Atlanta Custom Software Development 

 
   Search        Code/Page
 

User Login
Email

Password

 

Forgot the Password?
Services
» Web Development
» Maintenance
» Data Integration/BI
» Information Management
Programming
  Database
Automation
OS/Networking
Graphics
Links
Tools
» Regular Expr Tester
» Free Tools

GetFileOwner - Get the owner of an NTFS file

Total Hit ( 5236)

Rate this article:     Poor     Excellent 

 Submit Your Question/Comment about this article

Rating


 



Click here to copy the following block
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

Const OWNER_SECURITY_INFORMATION = &H1
Const ERROR_INSUFFICIENT_BUFFER = 122&
Const MAX_PATH = 255

' return the name of the file owner
'
' runs over Windows NT or 2000, and works only with files in NTFS partitions

Function GetFileOwner(ByVal szfilename As String) As String
  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 ownerName 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
  
  ' 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)
  ' exit if any error
  If (bSuccess = 0) And (Err.LastDllError <> ERROR_INSUFFICIENT_BUFFER) Then _
    Exit Function
  
  ' 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
  ' filename 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)
  ' exit if error
  If bSuccess = 0 Then Exit Function
  
  ' Obtain the owner's SID from the Security Descriptor, exit if error
  bSuccess = GetSecurityDescriptorOwner(sdBuf(0), pOwner, 0&)
  If bSuccess = 0 Then Exit Function

  ' 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, ownerName, name_len, _
    domain_name, domain_len, deUse)
  ' exit if any error
  If (bSuccess = 0) And (Err.LastDllError <> ERROR_INSUFFICIENT_BUFFER) Then _
    Exit Function

  ' Allocate the required space in the name and domain_name string variables.
  ' Allocate 1 byte less to avoid the appended NULL character.
  ownerName = 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, ownerName, name_len, _
    domain_name, domain_len, deUse)
  If bSuccess = 0 Then Exit Function
   
  ' we've found a result
  GetFileOwner = ownerName
  
End Function


Submitted By : Nayan Patel  (Member Since : 5/26/2004 12:23:06 PM)

Job Description : He is the moderator of this site and currently working as an independent consultant. He works with VB.net/ASP.net, SQL Server and other MS technologies. He is MCSD.net, MCDBA and MCSE. In his free time he likes to watch funny movies and doing oil painting.
View all (893) submissions by this author  (Birth Date : 7/14/1981 )


Home   |  Comment   |  Contact Us   |  Privacy Policy   |  Terms & Conditions   |  BlogsZappySys

© 2008 BinaryWorld LLC. All rights reserved.