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
|
PROCEDURE fRenvoyerNomProprietaireEtNomDomaine(sNomfichierLoc,sNomProprietaire,sNomDomaine)
bRes est un booléen=Faux //resultat des appels de DLL
sizeSD est un entier=0 //taille du buffer permettant de stocker le "SECURITY_DESCIPTOR" du fichier et de récupérer le SID du propriétaire
psizeSD est un entier=0 //pointeur permettant de récupérer la taille du buffer
pSIDProprietaire est un entier=0 //pointeur sur le SID du propriétaire du fichier
lpbOwnerDefaulted est un entier=0 // ?
//sNomProprietaire est une chaine="" //nom du proprietaire
//sNomDomaine est une chaine="" //nom de domaine ou du pc
nTailleBufferNomProprietaire est un entier=0 //taille du buffer contenant le nom du propriétaire
nTailleBufferNomDomaine est un entier=0 // taille du buffer contenant le nom du domaine ou du pc
gbufSecurityDescriptor est un Buffer //buffer contenant le SECURITY_DESCIPTOR du fichier
deUse est un entier=0 //pointeur sur une enumeration SID_NAME_USE indiquant le type de compte utilisateur du propriétaire
sNomDuSyteme est une chaîne="" // ? nom du syteme d'exploitation (?)
gbufBufferfixe est un Buffer sur 200 //Création d'un buffer vide de taille fixe servant à redimensionner le buffer de récupération du SECURITY_DESCIPTOR du fichier
SI sNomfichierLoc<>"" ALORS
gbufSecurityDescriptor=" " //Initialisation du buffer de récupération du SECURITY_DESCIPTOR du fichier (ne pas mettre de chaine vide
// (1) 1er appel à la DLL permettant de récupérer la taille du security descriptor du fichier
// ------------------------------------------------------------------------------------------
//syntaxe dans l'aide Windev : AppelDLL32("advapi32.dll", "GetFileSecurityA" , &lpFileName, RequestedInformation, &pSecurityDescriptor, nLength, &lpnLengthNeeded)
API("ADVAPI32.DLL","GetFileSecurityA",&sNomfichierLoc,OWNER_SECURITY_INFORMATION, &gbufSecurityDescriptor,sizeSD,&psizeSD) //renvoi faux ici
SI psizeSD>0 ALORS
//c'est ok, on continue
//Fixe la taille du buffer récupérant le SECURITY_DESCIPTOR du fichier
sizeSD=psizeSD
//redimensionnement du buffer par rapport à la taille récupérée lors du premier appel
gbufSecurityDescriptor=Gauche(gbufBufferfixe,sizeSD)
// (2) 2ème appel à la DLL permettant de récupérer cette fois le SECURITY_DESCIPTOR du fichier
// -------------------------------------------------------------------------------------------
bRes=API("ADVAPI32.DLL","GetFileSecurityA",&sNomfichierLoc,OWNER_SECURITY_INFORMATION, &gbufSecurityDescriptor,sizeSD,&psizeSD) //doit renvoyer vrai
SI bRes ALORS
//c'est ok, on continu
// (3) appel à la DLL permettant de récupérer le pointeur sur le SID du propriétaire du fichier
//---------------------------------------------------------------------------------------------
//AppelDLL32("advapi32.dll", "GetSecurityDescriptorOwner" , &pSecurityDescriptor, &pOwner, &lpbOwnerDefaulted)
bRes=AppelDLL32("advapi32.dll", "GetSecurityDescriptorOwner" , gbufSecurityDescriptor, &pSIDProprietaire, &lpbOwnerDefaulted)
SI bRes ALORS
// c'est ok, on continue
// (4) appel à la DLL permettant de récupérer les tailles des buffers contenant le nom du propriétaire et nom du domaine grâce au SID du propriétaire du fichier
//--------------------------------------------------------------------------------------------------------------------------------------------------------------
//AppelDLL32("advapi32.dll", "LookupAccountSidA" , &lpSystemName, &Sid, &lpname, &cbName, &lpReferencedDomainName, &cbReferencedDomainName, &peUse)
bRes=AppelDLL32("advapi32.dll", "LookupAccountSidA" , &sNomDuSyteme, pSIDProprietaire, &sNomProprietaire, &nTailleBufferNomProprietaire, &sNomDomaine, &nTailleBufferNomDomaine, &deUse)
SI nTailleBufferNomProprietaire>0 ET nTailleBufferNomDomaine>0 ALORS
//redimensionnement indispensable des variables contenant les noms du propriétaire et du domaine
sNomProprietaire=Complète(sNomProprietaire,nTailleBufferNomProprietaire)
sNomDomaine=Complète(sNomDomaine,nTailleBufferNomDomaine)
// (5) appel à la DLL permettant de récupérer le nom du propriétaire et le nom du domaine grâce au SID du propriétaire du fichier
//-------------------------------------------------------------------------------------------------------------------------------
bRes=AppelDLL32("advapi32.dll", "LookupAccountSidA" , &sNomDuSyteme, pSIDProprietaire, &sNomProprietaire, &nTailleBufferNomProprietaire, &sNomDomaine, &nTailleBufferNomDomaine, &deUse)
//on enlève le caractère "0" de fin de chaîne
sNomProprietaire=Gauche(sNomProprietaire,nTailleBufferNomProprietaire)
sNomDomaine=Gauche(sNomDomaine,nTailleBufferNomDomaine)
SI bRes ET sNomProprietaire<>"" ALORS
//tout est ok
Info("Le propriétaire du fichier est : "+sNomProprietaire+" "+sNomDomaine)
SINON
Erreur("Le nom du propriétaire du fichier : "+sNomfichierLoc,"n'a pas pu être déterminé.")
FIN
SINON
Erreur("Les tailles des buffers du nom du propriétaire du fichier et du nom du domaine n'ont pas pu être récupérées..")
FIN
SINON
Erreur("Le pointeur sur le SID du propriétaire du fichier n'a pas pu être récupéré.")
FIN
SINON
Erreur("Le descripteur de sécurité du fichier n'a pas pu être récupéré.")
FIN
SINON
Erreur("La taille du descripteur de sécurité du fichier n'a pas été récupérée.")
FIN
FIN |
Partager