Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CreateDirectory(path, NULL)
- BOOL CreateDirectoryWithUserFullControlACL(LPCTSTR lpPath)
- {
- if(!CreateDirectory(lpPath,NULL))
- return FALSE;
- HANDLE hDir = CreateFile(lpPath,READ_CONTROL|WRITE_DAC,0,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL);
- if(hDir == INVALID_HANDLE_VALUE)
- return FALSE;
- ACL* pOldDACL;
- SECURITY_DESCRIPTOR* pSD = NULL;
- GetSecurityInfo(hDir, SE_FILE_OBJECT , DACL_SECURITY_INFORMATION,NULL, NULL, &pOldDACL, NULL, (void**)&pSD);
- PSID pSid = NULL;
- SID_IDENTIFIER_AUTHORITY authNt = SECURITY_NT_AUTHORITY;
- AllocateAndInitializeSid(&authNt,2,SECURITY_BUILTIN_DOMAIN_RID,DOMAIN_ALIAS_RID_USERS,0,0,0,0,0,0,&pSid);
- EXPLICIT_ACCESS ea={0};
- ea.grfAccessMode = GRANT_ACCESS;
- ea.grfAccessPermissions = GENERIC_ALL;
- ea.grfInheritance = CONTAINER_INHERIT_ACE|OBJECT_INHERIT_ACE;
- ea.Trustee.TrusteeType = TRUSTEE_IS_GROUP;
- ea.Trustee.TrusteeForm = TRUSTEE_IS_SID;
- ea.Trustee.ptstrName = (LPTSTR)pSid;
- ACL* pNewDACL = 0;
- DWORD err = SetEntriesInAcl(1,&ea,pOldDACL,&pNewDACL);
- if(pNewDACL)
- SetSecurityInfo(hDir,SE_FILE_OBJECT,DACL_SECURITY_INFORMATION,NULL, NULL, pNewDACL, NULL);
- FreeSid(pSid);
- LocalFree(pNewDACL);
- LocalFree(pSD);
- LocalFree(pOldDACL);
- CloseHandle(hDir);
- return TRUE;
- }
- SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;
- PSID everyone_sid = NULL;
- AllocateAndInitializeSid(&SIDAuthWorld, 1, SECURITY_WORLD_RID,
- 0, 0, 0, 0, 0, 0, 0, &everyone_sid);
- EXPLICIT_ACCESS ea;
- ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
- ea.grfAccessPermissions = SPECIFIC_RIGHTS_ALL | STANDARD_RIGHTS_ALL;
- ea.grfAccessMode = SET_ACCESS;
- ea.grfInheritance = NO_INHERITANCE;
- ea.Trustee.TrusteeForm = TRUSTEE_IS_SID;
- ea.Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
- ea.Trustee.ptstrName = (LPWSTR)everyone_sid;
- PACL acl = NULL;
- SetEntriesInAcl(1, &ea, NULL, &acl);
- PSECURITY_DESCRIPTOR sd = (PSECURITY_DESCRIPTOR)LocalAlloc(LPTR,
- SECURITY_DESCRIPTOR_MIN_LENGTH);
- InitializeSecurityDescriptor(sd, SECURITY_DESCRIPTOR_REVISION);
- SetSecurityDescriptorDacl(sd, TRUE, acl, FALSE);
- SECURITY_ATTRIBUTES sa;
- sa.nLength = sizeof(SECURITY_ATTRIBUTES);
- sa.lpSecurityDescriptor = sd;
- sa.bInheritHandle = FALSE;
- CreateDirectory(path, &sa);
- FreeSid(everyone_sid);
- LocalFree(sd);
- LocalFree(acl);
Add Comment
Please, Sign In to add comment