09-06-2007, 23:40
|
|
|
חבר מתאריך: 12.08.04
הודעות: 993
|
|
בס"ד
הפונקציה נותנת הרשאות מלאות בקובץ לכל המשתמשים במחשב....
סאשה - תודה שוב
קוד PHP:
bool FileSecurityAllowAll(LPCTSTR fileName) { DWORD sizeDacl=0; SECURITY_DESCRIPTOR *sd=0; ACL *acl=0; bool ret=false; PACL tmpAcl=0;
GetFileSecurity(fileName,DACL_SECURITY_INFORMATION ,0,0,&sizeDacl); if(sizeDacl==0)goto cleanup; sd=(SECURITY_DESCRIPTOR *)LocalAlloc(0,sizeDacl); if (GetFileSecurity(fileName, DACL_SECURITY_INFORMATION, sd, sizeDacl, &sizeDacl)==FALSE)goto cleanup;
int defaulted, present; if (GetSecurityDescriptorDacl(sd, &present, &acl, &defaulted)==FALSE)goto cleanup; if(present==FALSE)goto cleanup;
ACL_SIZE_INFORMATION acl_size_info; if (GetAclInformation(acl,&acl_size_info, sizeof(acl_size_info),AclSizeInformation)==FALSE)g oto cleanup;
DWORD sizeAcl=acl_size_info.AclBytesInUse; tmpAcl=(PACL)LocalAlloc(0,sizeAcl); if(InitializeAcl(tmpAcl,sizeAcl,ACL_REVISION)==FAL SE)goto cleanup; for(UINT i = 0; i < acl_size_info.AceCount; i++) {//Copy to temp PACCESS_ALLOWED_ACE ace; if(GetAce(acl,i,(PVOID*)&ace)==FALSE)goto cleanup; AddAce(tmpAcl,ACL_REVISION,MAXDWORD,ace,ace->Header.AceSize); } for(UINT i = 0; i < acl_size_info.AceCount; i++) { DeleteAce(acl,0); } for(UINT i = 0; i < acl_size_info.AceCount; i++) {//Let's modify the permissions..... PACCESS_ALLOWED_ACE ace; if(GetAce(tmpAcl,i,(PVOID*)&ace)==FALSE)goto cleanup; ace->Header.AceType=ACCESS_ALLOWED_ACE_TYPE; if(AddAce(acl,ACL_REVISION,MAXDWORD,ace,ace->Header.AceSize)==FALSE)goto cleanup; }
if(SetFileSecurity(fileName,DACL_SECURITY_INFORMAT ION,sd)==FALSE)goto cleanup;
ret=true; cleanup:
if(sd)LocalFree(sd); if(tmpAcl)LocalFree(tmpAcl); // HeapFree(GetProcessHeap(), 0, acl); --- The acl is in the sd
return ret; }
נערך לאחרונה ע"י yytg בתאריך 09-06-2007 בשעה 23:43.
|