1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
////////////QUELQUES CONSTANTES (toutes ne sont pas utile pour cette fonction
CONSTANTE
//////////////////////////////////////CONSTANTE WINDOWS
//partage d'un repertoire
STYPE_DISKTREE = 0x0
STYPE_SPECIAL = 0x80000000
//Type d'objet
SE_FILE_OBJECT = 0x01
//Type de droit
OWNER_SECURITY_INFORMATION = 0x00000001
GROUP_SECURITY_INFORMATION = 0x00000002
DACL_SECURITY_INFORMATION = 0x00000004
SACL_SECURITY_INFORMATION = 0x00000008
UNPROTECTED_SACL_SECURITY_INFORMATION = 0x10000000
UNPROTECTED_DACL_SECURITY_INFORMATION = 0x20000000
PROTECTED_SACL_SECURITY_INFORMATION = 0x40000000
//permissions
ACCESS_READ = 0x1
ACCESS_WRITE = 0x2
ACCESS_CREATE= 0x4
ACCESS_EXEC = 0x8
ACCESS_DELETE= 0x10
ACCESS_ATRIB = 0x20
ACCESS_PERM = 0x40
//DROIT
GENERIC_ALL = 0x10000000
GENERIC_EXECUTE = 0x20000000
GENERIC_READ = 0x80000000
GENERIC_WRITE = 0x40000000
//
SET_ACCESS = 0X2
CONTAINER_INHERIT_ACE = 0x2
OBJECT_INHERIT_ACE = 0x1
//RETOUR
ERROR_SUCCESS = 0x0
FIN
TRUSTEE est une structure
pMultipleTrustee is entier système
MultipleTrusteeOperation is entier système
TrusteeForm is entier système
TrusteeType is entier système
ptstrName is UNICODE string
END
EXPLICIT_ACCESS est une structure
grfAccessPermissions is entier système
grfAccessMode is entier système
grfInheritance is entier système
pTRUSTEE is TRUSTEE
END
ACL est un structure
AclRevision est entier sans signe sur 1 octet
Sbz1 est entier sans signe sur 1 octet
AclSize est entier sans signe sur 2 octets
AceCount est entier sans signe sur 2 octets
Sbz2 est entier sans signe sur 2 octets
FIN
////////////PROCEDURE
PROCEDURE FixeDroits(nomFichier est chaîne, utilisateur est chaîne, droits est entier = GENERIC_ALL)
Myresult est entier système
pSecDesc est entier système
ea est EXPLICIT_ACCESS
pNewDACL est entier système
pOldDACL est entier système
NewACL est un ACL
OldACL est un ACL
SecDesc est un ACL
pNewDACL = &NewACL
pOldDACL = &OldACL
pSecDesc = &SecDesc
fs est objet Automation dynamique = allouer un objet Automation "Scripting.FileSystemObject"
d est objet Automation dynamique = fs>>GetDrive(fs>>GetFolder(nomFichier)>>Drive)
sTypeSystem est chaîne
sTypeSystem = d>>FileSystem
SI sTypeSystem = "NTFS" ALORS
Myresult = API("advapi32.dll","GetNamedSecurityInfo",nomFichier, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, 0x0, 0x0, pOldDACL, 0x0, pSecDesc)
SI Myresult = ERROR_SUCCESS ALORS
ea.pTRUSTEE.ptstrName = &utilisateur
API("advapi32.dll","uildExplicitAccessWithName", &ea, &utilisateur, droits, SET_ACCESS, OUBinaire(CONTAINER_INHERIT_ACE,OBJECT_INHERIT_ACE))
Myresult = API("advapi32.dll","SetEntriesInAcl",1, ea, pOldDACL, pNewDACL)
SI Myresult = ERROR_SUCCESS ALORS
Myresult = API("advapi32.dll","SetNamedSecurityInfo",nomFichier, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, 0x0, 0x0, pNewDACL, 0x0)
SI Myresult = ERROR_SUCCESS ALORS
Info("SetNamedSecurityInfo succeeded")
SINON
Info("SetNamedSecurityInfo failed with error code : " + Myresult)
FIN
VariableRAZ(NewACL)
SINON
Info("SetEntriesInAcl failed with error code : " + Myresult)
FIN
VariableRAZ( SecDesc)
SINON
Info("GetNamedSecurityInfo failed with error code : "+Myresult)
FIN
FIN
libérer fs
libérer d |
Partager