Bonjour,
est-il possible d'accéder aux propriétés d'un fichier, notament au nom du propriétaire, en VBA?
Merci
Bonjour,
est-il possible d'accéder aux propriétés d'un fichier, notament au nom du propriétaire, en VBA?
Merci
de quel type de fichier tu parle
ça doit être possible en passant par des api windows.
n'importe quel fichier...
quelles api windows?
pour l'instant je n'ai pas trouvé d'exemple sur le net...
Il me semble que certaines api de "advapi32.dll" devrait correspondre à ton problème.
Bonjour, pouvez-vous indiquer comment ont manipule cette api pour connaître le propriétaire du fichier, avez-vous un exemple ?
Merci...
Cette propriété n'est disponible que sur les partitions ntfs je crois Si ton produit a besoin d'une partition propre, je doute de l'efficacité
C'est bien du ntfs, mais je ne sais pas comment déclarer et manipuler l'api citée plus haut. Sais-tu comment on fait?
J'ai trouvé ça sur http://support.microsoft.com et sur xp ça fonctionne, tu met tout le code dans un form avec un bouton Command1 :
++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142 Private Declare Function GetFileSecurity Lib "advapi32.dll" _ Alias "GetFileSecurityA" ( _ ByVal lpFileName As String, _ ByVal RequestedInformation As Long, _ pSecurityDescriptor As Byte, _ ByVal nLength As Long, _ lpnLengthNeeded As Long _ ) As Long Private Declare Function GetSecurityDescriptorOwner Lib "advapi32.dll" _ (pSecurityDescriptor As Any, _ pOwner As Long, _ lpbOwnerDefaulted As Long) As Long Private Declare Function LookupAccountSid Lib "advapi32.dll" _ Alias "LookupAccountSidA" ( _ ByVal lpSystemName As String, _ ByVal Sid As Long, _ ByVal name As String, _ cbName As Long, _ ByVal ReferencedDomainName As String, _ cbReferencedDomainName As Long, _ peUse As Long) As Long Private Declare Function GetWindowsDirectory Lib "kernel32" _ Alias "GetWindowsDirectoryA" ( _ ByVal lpBuffer As String, _ ByVal nSize As Long) As Long Private Const OWNER_SECURITY_INFORMATION = &H1 Private Const ERROR_INSUFFICIENT_BUFFER = 122& Private Const MAX_PATH = 255 Sub Command1_Click() Dim szfilename As String ' File name to retrieve the owner for Dim bSuccess As Long ' Status variable Dim sizeSD As Long ' Buffer size to store Owner's SID Dim pOwner As Long ' Pointer to the Owner's SID Dim name As String ' Name of the file owner Dim domain_name As String ' Name of the first domain for the owner Dim name_len As Long ' Required length for the owner name Dim domain_len As Long ' Required length for the domain name Dim sdBuf() As Byte ' Buffer for Security Descriptor Dim nLength As Long ' Length of the Windows Directory Dim deUse As Long ' Pointer to a SID_NAME_USE enumerated ' type indicating the type of the account ' Initialize some required variables. bSuccess = 0 name = "" domain_name = "" name_len = 0 domain_len = 0 pOwner = 0 szfilename = Space(MAX_PATH) ' Obtain the path to the Windows Directory and use the notepad.exe file ' as it should be on the system. nLength = GetWindowsDirectory(szfilename, Len(szfilename)) If nLength = 0 Then MsgBox "Unable to Obtain the Windows Directory" End If 'szfilename = Left$(szfilename, nLength) & "\notepad.exe" '********************************************* szfilename = "c:\" '********************************************* ' Call GetFileSecurity the first time to obtain the size of the ' buffer required for the Security Descriptor. bSuccess = GetFileSecurity( _ szfilename, _ OWNER_SECURITY_INFORMATION, _ 0, _ 0&, _ sizeSD) If (bSuccess = 0) And _ (Err.LastDllError <> ERROR_INSUFFICIENT_BUFFER) Then MsgBox "GetLastError returned : " & Err.LastDllError End If ' Create a buffer of the required size and call GetFileSecurity again. ReDim sdBuf(0 To sizeSD - 1) As Byte ' Fill the buffer with the security descriptor of the object specified ' by the szfilename parameter. The calling process must have the right ' to view the specified aspects of the object's security status. bSuccess = GetFileSecurity( _ szfilename, _ OWNER_SECURITY_INFORMATION, _ sdBuf(0), _ sizeSD, _ sizeSD) If (bSuccess <> 0) Then ' Obtain the owner's SID from the Security Descriptor. ' bSuccess = GetSecurityDescriptorOwner(sdBuf(0), pOwner, 0&) If (bSuccess = 0) Then MsgBox "GetLastError returned : " & Err.LastDllError End If ' Retrieve the name of the account and the name of the first ' domain on which this SID is found. Passes in the Owner's SID ' obtained previously. Call LookupAccountSid twice, the first time ' to obtain the required size of the owner and domain names. bSuccess = LookupAccountSid(vbNullString, pOwner, name, name_len, _ domain_name, domain_len, deUse) If (bSuccess = 0) And _ (Err.LastDllError <> ERROR_INSUFFICIENT_BUFFER) Then MsgBox "GetLastError returned : " & Err.LastDllError End If ' Allocate the required space in the name and domain_name string ' variables. Allocate 1 byte less to avoid the appended NULL character. ' name = Space(name_len - 1) domain_name = Space(domain_len - 1) ' Call LookupAccountSid again to actually fill in the name of the owner ' and the first domain. ' bSuccess = LookupAccountSid(vbNullString, pOwner, name, name_len, _ domain_name, domain_len, deUse) If bSuccess = 0 Then MsgBox "GetLastError returned : " & Err.LastDllError End If MsgBox "The Owner of " & szfilename & " is " & name End If End Sub
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager