SetSecurityInfo DeviceObject в Win2008R2
От: VoMarch  
Дата: 28.11.11 15:22
Оценка:
Смысл нижеприведенного кода (который выполняется от имени LocalSystem) в том, чтобы к объекту виртуального диска, созданному драйвером, можно было обращаться лишь тому пользователю, который инициировал это создание.

Проблема в том, что необходимый результат достигается в WinXP и не достигается в Win2008R2: в Win2008R2 система будто бы игнорирует атрибуты безопасности объекта устройства при доступе к устройству, хотя все функции выполняются без ошибок и там и там; кроме того, WinObj показывает именно те атрибуты безопасности объекта устройства, которые назначаются ему этим кодом.


// назначаем символическую метку устройству, созданному драйвером
DefineDosDevice( DDD_RAW_TARGET_PATH, _T( "X:" ), _T( "\\Device\\Disk_X" );

// открываем, это устройство для изменения условий доступа к нему
HANDLE diskDeviceHandle = CreateFile( _T( "\\\\.\\Z:" ), STANDARD_RIGHTS_REQUIRED,
     0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );

// формируем необходимый нам дескриптор безопастности (accountSIDString здесь - это строка с SID, передаваемая в функцию сверху)
PSECURITY_DESCRIPTOR securityDescriptor = 0;
ConvertStringSecurityDescriptorToSecurityDescriptor( 
     _T( "D:(A;;GA;;;SY)(A;;RCWDWOGA;;;accountSIDString)" ) 
     , SDDL_REVISION_1
     , &securityDescriptor
     , 0);

// берем из дескриптора безопастности DACL
BOOL daclPresent = TRUE;
BOOL daclDefaulted = FALSE;
PACL acl = 0;
GetSecurityDescriptorDacl( securityDescriptor, &daclPresent, &acl, &daclDefaulted );

// и собственно, назначаем его объекту
SetSecurityInfo( diskDeviceHandle
     , SE_FILE_OBJECT
     , DACL_SECURITY_INFORMATION
     , 0, 0
     , acl
     , 0 );


Если кто-нибудь сталкивался с подобной проблемой, прошу откликнуться.
Заранее спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.