@msdn=http://search.microsoft.com/search/results.aspx?qu=$$$ @pinvoke=http://pinvoke.net/$$$.htm Summary: Retrieves a specified type of information about an access token !!!!C# Signature: [DllImport("advapi32.dll", SetLastError=true)] static extern bool GetTokenInformation( IntPtr TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, IntPtr TokenInformation, uint TokenInformationLength, out uint ReturnLength); !!!!VB.NET Definition: Public Declare Function GetTokenInformation Lib "advapi32.dll" ( _ ByVal TokenHandle As IntPtr, ByVal TokenInformationClass As TOKEN_INFORMATION_CLASS, _ ByVal TokenInformation As IntPtr, ByVal TokenInformationLength As System.UInt32, _ ByRef ReturnLength As System.UInt32) As Boolean !!!!User-Defined Types: [TOKEN_INFORMATION_CLASS] !!!!Notes: Call once with zero for the third and fourth parameters to obtain the required size, then allocate the buffer and call again supplying these parameters. !!!!Tips & Tricks: Please add some! !!!!Sample Code: // Prints out sid of current user using System; using System.Runtime.InteropServices; using System.Security.Principal; using System.Text; namespace test { class clsLookupAccountName { enum TOKEN_INFORMATION_CLASS { TokenUser = 1, TokenGroups, TokenPrivileges, TokenOwner, TokenPrimaryGroup, TokenDefaultDacl, TokenSource, TokenType, TokenImpersonationLevel, TokenStatistics, TokenRestrictedSids, TokenSessionId, TokenGroupsAndPrivileges, TokenSessionReference, TokenSandBoxInert, TokenAuditPolicy, TokenOrigin } public struct TOKEN_USER { public SID_AND_ATTRIBUTES User ; } [StructLayout(LayoutKind.Sequential)] public struct SID_AND_ATTRIBUTES { public IntPtr Sid ; public int Attributes ; } // Using IntPtr for pSID insted of Byte[] [DllImport("advapi32", CharSet=CharSet.Auto, SetLastError=true)] static extern bool ConvertSidToStringSid( IntPtr pSID, out IntPtr ptrSid); [DllImport("kernel32.dll")] static extern IntPtr LocalFree(IntPtr hMem); [DllImport("advapi32.dll", SetLastError=true)] static extern bool GetTokenInformation( IntPtr TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, IntPtr TokenInformation, int TokenInformationLength, out int ReturnLength); [STAThread] static void Main(string[] args) { int TokenInfLength = 0 ; bool Result ; // first call gets lenght of TokenInformation Result = GetTokenInformation( WindowsIdentity.GetCurrent().Token , TOKEN_INFORMATION_CLASS.TokenUser , IntPtr.Zero , TokenInfLength , out TokenInfLength ); IntPtr TokenInformation = Marshal.AllocHGlobal( TokenInfLength ) ; Result = GetTokenInformation( WindowsIdentity.GetCurrent().Token , TOKEN_INFORMATION_CLASS.TokenUser , TokenInformation , TokenInfLength , out TokenInfLength ) ; if( Result ) { TOKEN_USER TokenUser = ( TOKEN_USER )Marshal.PtrToStructure( TokenInformation , typeof( TOKEN_USER ) ) ; IntPtr pstr = IntPtr.Zero; Boolean ok = ConvertSidToStringSid( TokenUser.User.Sid , out pstr ); string sidstr = Marshal.PtrToStringAuto( pstr ); LocalFree(pstr); Console.WriteLine(@"Found sid {0}",sidstr); } Marshal.FreeHGlobal( TokenInformation ); Console.ReadLine(); } } } There's a sample based on this at http://stackoverflow.com/questions/2146153/how-to-get-the-logon-sid-in-c/2146418#2146418 that gets the LogonSID instead. !!!!Alternative Managed API: Do you know one? Please contribute it! Documentation: MSDN http://msdn.microsoft.com/en-us/library/aa446671%28VS.85%29.aspx
Edit advapi32.GetToken...
You do not have permission to change this page. If you feel this is in error, please send feedback with the contact link on the main page.