[DllImport("advapi32.dll", SetLastError=true)]
static extern bool AllocateAndInitializeSid(
ref SidIdentifierAuthority pIdentifierAuthority,
byte nSubAuthorityCount,
int dwSubAuthority0, int dwSubAuthority1,
int dwSubAuthority2, int dwSubAuthority3,
int dwSubAuthority4, int dwSubAuthority5,
int dwSubAuthority6, int dwSubAuthority7,
out IntPtr pSid);
Declare Function AllocateAndInitializeSid Lib "advapi32.dll" ( _
ByVal pIdentifierAuthority As IntPtr, _
ByVal nSubAuthorityCount As Byte, _
ByVal dwSubAuthority0 As Integer, ByVal dwSubAuthority1 As Integer, _
ByVal dwSubAuthority2 As Integer, ByVal dwSubAuthority3 As Integer, _
ByVal dwSubAuthority4 As Integer, ByVal dwSubAuthority5 As Integer, _
ByVal dwSubAuthority6 As Integer, ByVal dwSubAuthority7 As Integer, _
ByRef pSid As IntPtr) As Boolean
None.
The returned SID must be freed with FreeSid.
You will need to reference System.Runtime.InteropServices
Please add some!
[StructLayout(LayoutKind.Sequential)]
public struct SidIdentifierAuthority
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6, ArraySubType = UnmanagedType.I1)]
public byte[] Value;
}
const int NtSecurityAuthority = 5;
const int AuthenticatedUser = 11;
SidIdentifierAuthority NtAuthority = new SidIdentifierAuthority();
NtAuthority.Value = new byte[] { 0, 0, 0, 0, 0, NtSecurityAuthority };
IntPtr AuthenticatedUsersSid = IntPtr.Zero;
// Get the SID for the Authenticated Uses group
Native.AllocateAndInitializeSid(ref NtAuthority, 1, AuthenticatedUser, 0, 0, 0, 0, 0, 0, 0, out AuthenticatedUsersSid);
// Remember to free the SID when you are done
Native.FreeSid(AuthenticatedUsersSid);
Structure SID_IDENTIFIER_AUTHORITY
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=6)> Dim Value() As Byte
End Structure
Const SECURITY_NT_AUTHORITY As Integer = 5
Const SECURITY_BUILTIN_DOMAIN_RID As Integer = 32
Const DOMAIN_ALIAS_RID_ADMINS As Integer = 544
Dim AdminGroup as IntPtr
Dim NtAuthority As SID_IDENTIFIER_AUTHORITY
ReDim NtAuthority.Value(6)
NtAuthority.Value(5) = SECURITY_NT_AUTHORITY
If Not AllocateAndInitializeSid(NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, AdminGroup) Then
MsgBox("Yikes, couldn't create the Local Admininstrator Group's SID")
Exit Sub
End If
Do you know one? Please contribute it!