Вот пытался реализовать через NTFS-права доступа.
Код | SID_IDENTIFIER_AUTHORITY sia; PSID ps; PACL pOldAcl, pNewAcl ; char* filename="D:\\I HERE.txt";
if(AllocateAndInitializeSid(&sia,2,SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_POWER_USERS,0,0,0,0,0,0,&ps)==0) MessageBox("Не удалось выделить память и инициальзировать SID",":(",MB_OK);
PSECURITY_DESCRIPTOR pSD; if(GetNamedSecurityInfo(filename,SE_FILE_OBJECT,DACL_SECURITY_INFORMATION, NULL,NULL,&pOldAcl,NULL,&pSD)!=ERROR_SUCCESS) MessageBox("Не удалось получить копию дескриптора безопасности",":(",MB_OK); LocalFree(pSD); EXPLICIT_ACCESS ea; ea.grfAccessMode=DENY_ACCESS; ea.grfAccessPermissions=GENERIC_ALL; ea.grfInheritance=INHERIT_ONLY_ACE; ea.Trustee.MultipleTrusteeOperation=NO_MULTIPLE_TRUSTEE; ea.Trustee.pMultipleTrustee=NULL; ea.Trustee.TrusteeForm=TRUSTEE_IS_SID; ea.Trustee.TrusteeType=TRUSTEE_IS_UNKNOWN; ea.Trustee.ptstrName=(char*)ps;
if(SetEntriesInAcl(1,&ea,pOldAcl,&pNewAcl)!=ERROR_SUCCESS) { DWORD dw=GetLastError(); //ошибка - малый размер буффера !!! MessageBox("Не удалось создать новый список прав доступа (ACL)",":(",MB_OK); exit(0); }
if(SetNamedSecurityInfo(filename,SE_FILE_OBJECT,DACL_SECURITY_INFORMATION, NULL,NULL,pNewAcl,NULL)!=ERROR_SUCCESS) MessageBox("Скрыть не получилось",":(",MB_ICONERROR|MB_OK);
|
Функция SetEntriesInAcl не изменяет значения pNewAcl, ошибка - малый размер буффера !!! Дальше прога просто вылетает Может неправильно заполняю структуру EXPLICIT_ACCESS ea ? |