[StructLayout(LayoutKind.Sequential)]
struct LSA_UNICODE_STRING
{
public UInt16 Length;
public UInt16 MaximumLength;
public IntPtr Buffer;
}
Structure LSA_UNICODE_STRING
Dim Length As Short
Dim MaximumLength As Short
Dim Buffer As IntPtr
End Structure
None.
None.
// You should already have the HPolicy and SID ready
IntPtr rightsPtr;
uint countOfRights;
LsaEnumerateAccountRights(HPolicy, SID, out rightsPtr, out countOfRights);
try
{
IntPtr ptr = rightsPtr;
LSA_UNICODE_STRING userRight;
for (int i = 0; i < countOfRights; i++)
{
userRight = (LSA_UNICODE_STRING)Marshal.PtrToStructure(ptr, typeof(LSA_UNICODE_STRING));
String userRightStr = Marshal.PtrToStringAuto(userRight.Buffer);
Console.WriteLine("Another Privilege found: " + userRightStr);
ptr = (IntPtr)((Int32)ptr + Marshal.SizeOf(userRight));
}
}
finally
{
LsaFreeMemory(rightsPtr);
}