SetNamedSecurityInfo: настройка DACL для объекта работает, но не сохраняется после перезагрузки системы

В Windows 7 я пытаюсь дать группе пользователей возможность чтения / записи на определенный диск, подключенный через SCSI, чтобы они могли запустить утилиту, которая читает / пишет на этот диск. Я пытаюсь сделать это путем изменения DACL объекта диска с помощью SetNamedSecurityInfo с использованием C ++.

    string devicePath = "\\?\scsi#disk&ven_wsi&prod_drs1100p#6&383ae3b6&0&000300#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}";
PSID ppsidOwner, ppsidGroup;
PACL ppDacl = NULL, ppSacl = NULL;
PSECURITY_DESCRIPTOR ppSecurityDescriptor = NULL;
char objName[200];
strcpy(objName, devicePath.c_str());

// Get SecurityInfo
GetNamedSecurityInfoA(objName, 1, DACL_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | OWNER_SECURITY_INFORMATION, &ppsidOwner, &ppsidGroup, &ppDacl, NULL, &ppSecurityDescriptor);

// Build ACE
EXPLICIT_ACCESS str_ACE;
DWORD rightsMask = STANDARD_RIGHTS_ALL | GENERIC_ALL | GENERIC_WRITE | GENERIC_READ;
BuildExplicitAccessWithNameA(&str_ACE, "DRS Operators", rightsMask, GRANT_ACCESS, NO_INHERITANCE);
PACL newPACL;

// Set ACE then Set SecurityInfo
SetEntriesInAclA(1, &str_ACE, ppDacl, &newPACL);
SetNamedSecurityInfoA(objName, 1, DACL_SECURITY_INFORMATION, NULL, NULL, newPACL, NULL);

Написанный мною код работает, что я подтвердил, используя GetNamedSecurityInfoA на объекте до и после изменения DACL, затем передавая полученные SecurityDescriptors в ConvertSecurityDescriptorToStringSecurityDescriptorA и убедившись, что они изменились. После выполнения этого кода я могу войти в систему как любой пользователь из группы пользователей «Операторы DRS» и могу читать / записывать на диск.

Единственная проблема, с которой я столкнулся, заключается в том, что изменения в DACL не сохраняются после завершения работы системы. После перезапуска DACL возвращается к тому, что было до того, как я пробежал код выше (который я проверил с помощью GetNamedSecurityInfoA). Кто-нибудь здесь имеет представление о том, почему изменения не сохраняются?

0

Решение

Задача ещё не решена.

Другие решения