Guest User

Untitled

a guest
Jun 24th, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.27 KB | None | 0 0
  1. CreateDirectory(path, NULL)
  2.  
  3. BOOL CreateDirectoryWithUserFullControlACL(LPCTSTR lpPath)
  4. {
  5. if(!CreateDirectory(lpPath,NULL))
  6. return FALSE;
  7.  
  8. HANDLE hDir = CreateFile(lpPath,READ_CONTROL|WRITE_DAC,0,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL);
  9. if(hDir == INVALID_HANDLE_VALUE)
  10. return FALSE;
  11.  
  12. ACL* pOldDACL;
  13. SECURITY_DESCRIPTOR* pSD = NULL;
  14. GetSecurityInfo(hDir, SE_FILE_OBJECT , DACL_SECURITY_INFORMATION,NULL, NULL, &pOldDACL, NULL, (void**)&pSD);
  15.  
  16. PSID pSid = NULL;
  17. SID_IDENTIFIER_AUTHORITY authNt = SECURITY_NT_AUTHORITY;
  18. AllocateAndInitializeSid(&authNt,2,SECURITY_BUILTIN_DOMAIN_RID,DOMAIN_ALIAS_RID_USERS,0,0,0,0,0,0,&pSid);
  19.  
  20. EXPLICIT_ACCESS ea={0};
  21. ea.grfAccessMode = GRANT_ACCESS;
  22. ea.grfAccessPermissions = GENERIC_ALL;
  23. ea.grfInheritance = CONTAINER_INHERIT_ACE|OBJECT_INHERIT_ACE;
  24. ea.Trustee.TrusteeType = TRUSTEE_IS_GROUP;
  25. ea.Trustee.TrusteeForm = TRUSTEE_IS_SID;
  26. ea.Trustee.ptstrName = (LPTSTR)pSid;
  27.  
  28. ACL* pNewDACL = 0;
  29. DWORD err = SetEntriesInAcl(1,&ea,pOldDACL,&pNewDACL);
  30.  
  31. if(pNewDACL)
  32. SetSecurityInfo(hDir,SE_FILE_OBJECT,DACL_SECURITY_INFORMATION,NULL, NULL, pNewDACL, NULL);
  33.  
  34. FreeSid(pSid);
  35. LocalFree(pNewDACL);
  36. LocalFree(pSD);
  37. LocalFree(pOldDACL);
  38. CloseHandle(hDir);
  39.  
  40. return TRUE;
  41. }
  42.  
  43. SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;
  44. PSID everyone_sid = NULL;
  45. AllocateAndInitializeSid(&SIDAuthWorld, 1, SECURITY_WORLD_RID,
  46. 0, 0, 0, 0, 0, 0, 0, &everyone_sid);
  47.  
  48. EXPLICIT_ACCESS ea;
  49. ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
  50. ea.grfAccessPermissions = SPECIFIC_RIGHTS_ALL | STANDARD_RIGHTS_ALL;
  51. ea.grfAccessMode = SET_ACCESS;
  52. ea.grfInheritance = NO_INHERITANCE;
  53. ea.Trustee.TrusteeForm = TRUSTEE_IS_SID;
  54. ea.Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
  55. ea.Trustee.ptstrName = (LPWSTR)everyone_sid;
  56.  
  57. PACL acl = NULL;
  58. SetEntriesInAcl(1, &ea, NULL, &acl);
  59.  
  60. PSECURITY_DESCRIPTOR sd = (PSECURITY_DESCRIPTOR)LocalAlloc(LPTR,
  61. SECURITY_DESCRIPTOR_MIN_LENGTH);
  62. InitializeSecurityDescriptor(sd, SECURITY_DESCRIPTOR_REVISION);
  63. SetSecurityDescriptorDacl(sd, TRUE, acl, FALSE);
  64.  
  65. SECURITY_ATTRIBUTES sa;
  66. sa.nLength = sizeof(SECURITY_ATTRIBUTES);
  67. sa.lpSecurityDescriptor = sd;
  68. sa.bInheritHandle = FALSE;
  69.  
  70. CreateDirectory(path, &sa);
  71.  
  72. FreeSid(everyone_sid);
  73. LocalFree(sd);
  74. LocalFree(acl);
Add Comment
Please, Sign In to add comment