[DllImport("advapi32.dll", CharSet=CharSet.Auto)]
static extern uint GetNamedSecurityInfo(
string pObjectName,
SE_OBJECT_TYPE ObjectType,
SECURITY_INFORMATION SecurityInfo,
out IntPtr pSidOwner,
out IntPtr pSidGroup,
out IntPtr pDacl,
out IntPtr pSacl,
out IntPtr pSecurityDescriptor);
Declare Function GetNamedSecurityInfo Lib "advapi32.dll" ( _
ByVal pObjectName As String, _
ByVal ObjectType As SE_OBJECT_TYPE, _
ByVal SecurityInfo As SECURITY_INFORMATION, _
ByRef pSidOwner As IntPtr, _
ByRef pSidGroup As IntPtr, _
ByRef pDacl As IntPtr, _
ByRef pSacl As IntPtr, _
ByRef pSecurityDescriptor As IntPtr) As Integer
SE_OBJECT_TYPE, SECURITY_INFORMATION
None. None.
Please add some!!
public static string GetFileObjectOwner(string objectName)
IntPtr pZero = IntPtr.Zero;
IntPtr pSid = pZero;
IntPtr psd = pZero;
int errorReturn = GetNamedSecurityInfo(objectName, SE_FILE_OBJECT,
OWNER_SECURITY_INFORMATION,
out pSid, out pZero, out pZero, out pZero, out psd);
if(errorReturn != 0)
{
Console.WriteLine("GetNamedSecurityInfo: {0} ", errorReturn);
return null;
}
int _bufferSize = 64;
StringBuilder _buffer = new StringBuilder();
int _accounLength = _bufferSize;
int _domainLength = _bufferSize;
int _sidNameUse= 0;
StringBuilder _account = new StringBuilder(_bufferSize);
StringBuilder _domain = new StringBuilder(_bufferSize);
errorReturn = LookupAccountSid(null, pSid, _account, ref _accounLength, _domain, ref _domainLength, out _sidNameUse);
if(errorReturn == 0)
{
Console.WriteLine("LookupAccountSid: {0}", Marshal.GetLastWin32Error());
return null;
}
_buffer.Append(_domain);
_buffer.Append(@"\");
_buffer.Append(_account);
return _buffer.ToString();
' Type of Securable Object we are operating in this sample code
Private Const SE_FILE_OBJECT = 1&
' The Security Information constants required
Private Const DACL_SECURITY_INFORMATION = 4&
Dim pSecDesc, pOldDACL As IntPtr
Dim Win32Error As Win32Exception
Dim ret As Integer
' get the Security Descriptor and DACL
ret = GetNamedSecurityInfo(strPath, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, Nothing, Nothing, pOldDACL, Nothing, pSecDesc)
If ret <> 0 Then
Win32Error = New Win32Exception(ret)
Throw New Exception(Win32Error.Message)
End If
Do you know one? Please contribute it!