#include<Accctrl.h>#include<Aclapi.h>voidSetFilePermission(LPCTSTR FileName){
PSID pEveryoneSID = NULL;
PACL pACL = NULL;
EXPLICIT_ACCESS ea[1];
SID_IDENTIFIER_AUTHORITY SIDAuthWorld= SECURITY_WORLD_SID_AUTHORITY;//Create a well-known SID for the Everyone group.AllocateAndInitializeSid(&SIDAuthWorld,1,
SECURITY_WORLD_RID,0,0,0,0,0,0,0,&pEveryoneSID);//Initialize an EXPLICIT_ACCESS structure for an ACE.ZeroMemory(&ea,1*sizeof(EXPLICIT_ACCESS));
ea[0].grfAccessPermissions =0xFFFFFFFF;
ea[0].grfAccessMode = DENY_ACCESS;
ea[0].grfInheritance= NO_INHERITANCE;
ea[0].Trustee.TrusteeForm= TRUSTEE_IS_SID;
ea[0].Trustee.TrusteeType= TRUSTEE_IS_WELL_KNOWN_GROUP;
ea[0].Trustee.ptstrName =(LPTSTR) pEveryoneSID;//Create a new ACL that contains the new ACEs.SetEntriesInAcl(1, ea, NULL,&pACL);//Initialize a security descriptor.
PSECURITY_DESCRIPTOR pSD =(PSECURITY_DESCRIPTOR)LocalAlloc(LPTR,
SECURITY_DESCRIPTOR_MIN_LENGTH);InitializeSecurityDescriptor(pSD,SECURITY_DESCRIPTOR_REVISION);//Add the ACL to the security descriptor. SetSecurityDescriptorDacl(pSD,
TRUE,//bDaclPresent flag
pACL,
FALSE);//not a default DACL //Change the security attributesSetFileSecurity(FileName, DACL_SECURITY_INFORMATION, pSD);if(pEveryoneSID)FreeSid(pEveryoneSID);if(pACL)LocalFree(pACL);if(pSD)LocalFree(pSD);}
Juste remarque: ce code provient de l'article de MSDNCréation d'un Descripteur de Sécurité pour un Nouvel Objet en C++". Commentaire dit "L'ACE autoriser l'accès en lecture à la clé", mais grfAccessPermissions définit les autorisations, de sorte que le réglage de la valeur 0xFFFFFFFF donne TOUT. J'ai enlevé le contradictoire commentaire de code.
Je suppose que vous voulez dire sur un système Windows? Vous devez utiliser le NTFS partie de l'API Win32, qui est ce que cacls utilise. Parcourir via MSDN, il va être là quelque part. Par exemple SetSecurityInfo
Utilisez le code suivant
Commentaire dit "L'ACE autoriser l'accès en lecture à la clé", mais grfAccessPermissions définit les autorisations, de sorte que le réglage de la valeur 0xFFFFFFFF donne TOUT.
J'ai enlevé le contradictoire commentaire de code.
OriginalL'auteur Shino C G
Je suppose que vous voulez dire sur un système Windows? Vous devez utiliser le NTFS partie de l'API Win32, qui est ce que cacls utilise. Parcourir via MSDN, il va être là quelque part. Par exemple SetSecurityInfo
OriginalL'auteur PowerApp101
Si vous ne voulez pas déconner avec l'API (c'est à dire SetNamedSecurityInfo), vous pourriez être en mesure de contourner l'invite de la sorte:
Depuis echo est un builtin, à l'appel de la commande en ligne à partir de votre programme, vous auriez probablement à exécuter:
OriginalL'auteur JimG