Working code below (paying back to the groups :)
/Tomas
Class SidFunctions
Enum SID_NAME_USE
SidTypeUser = 1
SidTypeGroup
SidTypeDomain
SidTypeAlias
SidTypeWellKnownGroup
SidTypeDeletedAccount
SidTypeInvalid
SidTypeUnknown
SidTypeComputer
End Enum 'SID_NAME_USE
Declare Function LookupAccountName Lib "advapi32.dll" Alias
"LookupAccountNameA" (ByVal lpSystemName As String, ByVal
lpAccountName As String,
<System.Runtime.InteropServices.MarshalAs(System.R untime.InteropServices.UnmanagedType.LPArray)>
ByVal Sid() As Byte, ByRef cbSid As System.UInt32, ByVal
ReferencedDomainName As System.Text.StringBuilder, ByRef
cchReferencedDomainName As System.UInt32, ByRef peUse As SID_NAME_USE)
As Boolean
Public Function ConvertUsernameToSidString(ByVal i_AccountName As
String, Optional ByVal i_Domain As String = "") As String
'************************************************* ********************
'* Source of example:
http://pinvoke.net/default.aspx/adva...kupAccountName
'************************************************* ********************
Dim resultAsByte As Byte() = Nothing
Dim result As String
Dim m_resultAsByteCapacity As System.UInt32 =
UInt32.Parse("0")
Dim m_StringBuilder As New System.Text.StringBuilder
Dim m_StringBuilderCapacity As System.UInt32 =
UInt32.Parse(m_StringBuilder.Capacity)
Dim m_SID_NAME_USE As SID_NAME_USE
'************************************************* ********************
'* Lookup
'************************************************* ********************
Call LookupAccountName(i_Domain, i_AccountName, resultAsByte,
m_resultAsByteCapacity, m_StringBuilder, m_StringBuilderCapacity,
m_SID_NAME_USE)
'************************************************* ********************
'* We should get ERROR_INSUFFICIENT_BUFFER
'************************************************* ********************
If System.Runtime.InteropServices.Marshal.GetLastWin3 2Error =
122 Then 'ERROR_INSUFFICIENT_BUFFER
'************************************************* ********************
'* Allocate the exact amount of needed space
'************************************************* ********************
resultAsByte = New
Byte(CLng(m_resultAsByteCapacity.ToString)) {}
m_StringBuilder.EnsureCapacity(CLng(m_StringBuilde rCapacity.ToString))
'************************************************* ********************
'* And fetch the information
'************************************************* ********************
If LookupAccountName(i_Domain, i_AccountName,
resultAsByte, m_resultAsByteCapacity, m_StringBuilder,
m_StringBuilderCapacity, m_SID_NAME_USE) = True Then
'************************************************* ********************
'* Store result (all OK)
'************************************************* ********************
result = BitConverter.ToString(resultAsByte)
'Call ConvertSidFromByteToString(resultAsByte, result)
Debug.WriteLine("Type=" & m_SID_NAME_USE.ToString &
vbTab & "SID=" & result)
End If
End If
Return result
End Function
End Class