 
        
        
          Добавил:
          
        
    
            Upload
            
            
            
            
            
            Опубликованный материал нарушает ваши авторские права? Сообщите нам.
          
          Вуз:
          Предмет:
          Файл:
          
        #define _WIN32_WINNT 0x0500
#include <stdio.h>
#include <windows.h> 
#include <aclapi.h>
int main()
{
  char chFileName[256];    // имя файла
  HANDLE hFile;            // дескриптор файла
  PSECURITY_DESCRIPTOR pSecurityDescriptor;  // указатель на SD
  SECURITY_DESCRIPTOR_CONTROL wControl;  // управляющие флаги из SD
  DWORD dwRevision;      // версия дескриптора безопасности
  DWORD dwRetCode;       // код возврата
  // вводим полное имя файла, например: C:\\test.txt
  printf("Input a full path to your file: ");
  gets(chFileName);
  // открываем файл
  hFile = CreateFile(
    chFileName,        // имя файла
    READ_CONTROL,      // разрешаем доступ к дескриптору безопасности
    0,                 // не разделяем доступ
    NULL,              // не наследуемый дескриптор
    OPEN_EXISTING,     // открываем существующий файл
    FILE_ATTRIBUTE_NORMAL,   // обычный файл
    NULL);             // шаблона нет
  if(hFile == INVALID_HANDLE_VALUE)
  {
    dwRetCode = GetLastError();
    printf("Create file failed.\n");
    printf("Error code: %u\n", dwRetCode);
    return dwRetCode;
  }
  // получаем дескриптор безопасности файла
  dwRetCode = GetSecurityInfo(
    hFile,         // дескриптор файла
    SE_FILE_OBJECT,    // объект файл
    DACL_SECURITY_INFORMATION,   // тип информации
    NULL,          // указатель на SID владельца не нужен
    NULL,          // указатель на первичную группу не нужен
    NULL,          // указатель на DACL не нужен
    NULL,          // указатель на SACL не нужен
    &pSecurityDescriptor);       // адрес указателя на SD
  if (dwRetCode != ERROR_SUCCESS)
  {
    printf("Get named security info failed.\n");
    printf("Error code: %u\n", dwRetCode);
    return dwRetCode;
  }
  // получаем управляющую информацию из дескриптора безопасности
  if(!GetSecurityDescriptorControl(
    pSecurityDescriptor,
    &wControl,
    &dwRevision))
  {
    dwRetCode = GetLastError();
    printf("Get security descriptor control failed.\n");
    printf("Error code: %u\n", dwRetCode);
    return dwRetCode;
  }
  printf("The following flags are set: \n");
  // определяем информацию из управляющего слова
  if(wControl & SE_DACL_AUTO_INHERITED)
    printf("SE_DACL_AUTO_INHERITED\n");
  if(wControl & SE_DACL_DEFAULTED)
    printf("SE_DACL_DEFAULTED\n");
  if(wControl & SE_DACL_PRESENT)
    printf("SE_DACL_PRESENT\n");
  if(wControl & SE_DACL_PROTECTED)
    printf("SE_DACL_PROTECTED\n");
  // выводим на печать версию дескриптора безопасности
  printf("Descriptor revision: %u\n", dwRevision);
  // освобождаем память для дескриптора
  LocalFree(pSecurityDescriptor);
  // закрываем файл
  CloseHandle(hFile);
  return 0;
}
          Соседние файлы в папке Листинги
          
      
    
    
    
          