[DllImport("advapi32.dll", SetLastError=true)]
static extern TODO GetSidSubAuthorityCount(TODO);
Declare Function GetSidSubAuthorityCount Lib "advapi32.dll" (
ByVal psid As IntPtr
) As IntPtr
None.
None.
Please add some!
Dim numSubAuthorities As Byte = Runtime.InteropServices.Marshal.ReadByte(GetSidSubAuthorityCount(pSID), 0)
'
' a WinNT version of the ConvertSidToStringSid function
'
Private Shared Function ConvertSidToStringSidNT(ByVal Sid As IntPtr) As String
Dim sb As New StringBuilder
Dim psia As SID_IDENTIFIER_AUTHORITY
Dim i, num, temp As Integer
Dim top As Long
Dim iptr As IntPtr
If Not IsValidSid(Sid) Then
Return ""
End If
sb.Append("S-1-")
' Get the top level authority
iptr = GetSidIdentifierAuthority(Sid)
psia = CType(Marshal.PtrToStructure(iptr, GetType(SID_IDENTIFIER_AUTHORITY)), SID_IDENTIFIER_AUTHORITY)
' How many sub authorities?
iptr = GetSidSubAuthorityCount(Sid)
num = Marshal.ReadInt16(iptr)
' Use the hex version of the top authority?
If psia.Value(0) <> 0 And psia.Value(1) <> 0 Then
sb.AppendFormat("0x{0:x2}" & psia.Value(0)
sb.AppendFormat("x{0:x2}" & psia.Value(1))
sb.AppendFormat("x{0:x2}" & psia.Value(2))
sb.AppendFormat("x{0:x2}" & psia.Value(3))
sb.AppendFormat("x{0:x2}" & psia.Value(4))
sb.AppendFormat("x{0:x2}" & psia.Value(5))
Else
top = psia.Value(5)
top += psia.Value(4) * 256
top += psia.Value(3) * 256 * 256
top += psia.Value(2) * 256 * 256 * 256
sb.Append(top.ToString)
End If
For i = 0 To num - 1
iptr = GetSidSubAuthority(Sid, i)
temp = Marshal.ReadInt32(iptr)
sb.Append("-" & temp.ToString)
Next
Return sb.ToString
End Function
Do you know one? Please contribute it!