Search
Module:
Directory

   Desktop Functions:

   Smart Device Functions:


Show Recent Changes
Subscribe (RSS)
Misc. Pages
Comments
FAQ
Helpful Tools
Playground
Suggested Reading
Website TODO List
Download Visual Studio Add-In

AllocateAndInitializeSid (advapi32)
 
.
Summary
Allocates and initializes a security identifier (SID) with up to eight subauthorities.

C# Signature:

[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);

VB Signature:

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

User-Defined Types:

None.

Notes:

The returned SID must be freed with FreeSid.

You will need to reference System.Runtime.InteropServices

Tips & Tricks:

Please add some!

C# Sample Code:

    [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);

Vb.Net Sample Code:

    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

Vb.Net Sample Code:

    Structure SID_IDENTIFIER_AUTHORITY
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=6)> Dim Value() As Byte
    End Structure

    Dim AdminGroup as IntPtr
    Dim NtAuthority As SID_IDENTIFIER_AUTHORITY
    ReDim NtAuthority.Value(6)
    NtAuthority.Value(5) = SECURITY_NT_AUTHORITY
    Const SECURITY_NT_AUTHORITY As Integer = 5
    Const SECURITY_BUILTIN_DOMAIN_RID As Integer = 32
    Const DOMAIN_ALIAS_RID_ADMINS As Integer = 544

    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
    Dim AdminGroup as IntPtr
    Dim NtAuthority As SID_IDENTIFIER_AUTHORITY
    ReDim NtAuthority.Value(6)
    NtAuthority.Value(5) = SECURITY_NT_AUTHORITY

Alternative Managed API:

Do you know one? Please contribute it!

    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

Documentation

Alternative Managed API:

Do you know one? Please contribute it!

Documentation

Please edit this page!

Do you have...

  • helpful tips or sample code to share for using this API in managed code?
  • corrections to the existing content?
  • variations of the signature you want to share?
  • additional languages you want to include?

Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).

 
Access PInvoke.net directly from VS:
Terms of Use
Edit This Page
Find References
Show Printable Version
Revisions