This documentation is archived and is not being maintained.

WindowsIdentity Class

Represents a Windows user.

Namespace:  System.Security.Principal
Assembly:  mscorlib (in mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class WindowsIdentity : IIdentity, 
	ISerializable, IDeserializationCallback, IDisposable

Call the GetCurrent method to create a WindowsIdentity object that represents the current user.

The following example shows the use of members of WindowsIdentity class. For an example showing how to obtain a Windows account token through a call to the unmanaged Win32 LogonUser function, and use that token to impersonate another user, see the WindowsImpersonationContext class.

using namespace System;
using namespace System::Security::Principal;
void IntPtrConstructor( IntPtr logonToken );
void IntPtrStringConstructor( IntPtr logonToken );
void IntPrtStringTypeBoolConstructor( IntPtr logonToken );
void IntPtrStringTypeConstructor( IntPtr logonToken );
void UseProperties( IntPtr logonToken );
IntPtr LogonUser();
void GetAnonymousUser();
void ImpersonateIdentity( IntPtr logonToken );

[STAThread]
int main()
{

   // Retrieve the Windows account token for the current user.
   IntPtr logonToken = LogonUser();

   // Constructor implementations.
   IntPtrConstructor( logonToken );
   IntPtrStringConstructor( logonToken );
   IntPtrStringTypeConstructor( logonToken );
   IntPrtStringTypeBoolConstructor( logonToken );

   // Property implementations.
   UseProperties( logonToken );

   // Method implementations.
   GetAnonymousUser();
   ImpersonateIdentity( logonToken );
   Console::WriteLine( "This sample completed successfully; " 
   "press Enter to exit." );
   Console::ReadLine();
}


// Create a WindowsIdentity object for the user represented by the 
// specified Windows account token. 
void IntPtrConstructor( IntPtr logonToken )
{

   // Construct a WindowsIdentity object using the input account token.
   WindowsIdentity^ windowsIdentity = gcnew WindowsIdentity( logonToken );

   Console::WriteLine( "Created a Windows identity object named {0}.", windowsIdentity->Name );
}


// Create a WindowsIdentity object for the user represented by the 
// specified account token and authentication type. 
void IntPtrStringConstructor( IntPtr logonToken )
{

   // Construct a WindowsIdentity object using the input account token  
   // and the specified authentication type.
   String^ authenticationType = "WindowsAuthentication";
   WindowsIdentity^ windowsIdentity = gcnew WindowsIdentity( logonToken,authenticationType );

   Console::WriteLine( "Created a Windows identity object named {0}.", windowsIdentity->Name );
}


// Create a WindowsIdentity object for the user represented by the 
// specified account token, authentication type and Windows account 
// type. 
void IntPtrStringTypeConstructor( IntPtr logonToken )
{

   // Construct a WindowsIdentity object using the input account token, 
   // and the specified authentication type and Windows account type.
   String^ authenticationType = "WindowsAuthentication";
   WindowsAccountType guestAccount = WindowsAccountType::Guest;
   WindowsIdentity^ windowsIdentity = gcnew WindowsIdentity( logonToken,authenticationType,guestAccount );

   Console::WriteLine( "Created a Windows identity object named {0}.", windowsIdentity->Name );
}


// Create a WindowsIdentity object for the user represented by the 
// specified account token, authentication type, Windows account type and 
// Boolean authentication flag. 
void IntPrtStringTypeBoolConstructor( IntPtr logonToken )
{

   // Construct a WindowsIdentity object using the input account token, 
   // and the specified authentication type, Windows account type, and 
   // authentication flag.
   String^ authenticationType = "WindowsAuthentication";
   WindowsAccountType guestAccount = WindowsAccountType::Guest;
   bool isAuthenticated = true;
   WindowsIdentity^ windowsIdentity = gcnew WindowsIdentity( logonToken,authenticationType,guestAccount,isAuthenticated );

   Console::WriteLine( "Created a Windows identity object named {0}.", windowsIdentity->Name );
}

// Access the properties of a WindowsIdentity object. 
void UseProperties( IntPtr logonToken )
{
   WindowsIdentity^ windowsIdentity = gcnew WindowsIdentity( logonToken );
   String^ propertyDescription = "The windows identity named ";

   // Retrieve the Windows logon name from the Windows identity object.
   propertyDescription = String::Concat( propertyDescription, windowsIdentity->Name );

   // Verify that the user account is not considered to be an Anonymous 
   // account by the system. 
   if (  !windowsIdentity->IsAnonymous )
   {
      propertyDescription = String::Concat( propertyDescription, ", is not an Anonymous account" );
   }


   // Verify that the user account has been authenticated by Windows. 
   if ( windowsIdentity->IsAuthenticated )
   {
      propertyDescription = String::Concat( propertyDescription, ", is authenticated" );
   }


   // Verify that the user account is considered to be a System account 
   // by the system. 
   if ( windowsIdentity->IsSystem )
   {
      propertyDescription = String::Concat( propertyDescription, ", is a System account" );
   }


   // Verify that the user account is considered to be a Guest account 
   // by the system. 
   if ( windowsIdentity->IsGuest )
   {
      propertyDescription = String::Concat( propertyDescription, ", is a Guest account" );
   }


   // Retrieve the authentication type for the 
   String^ authenticationType = windowsIdentity->AuthenticationType;

   // Append the authenication type to the output message. 
   if ( authenticationType != nullptr )
   {
      propertyDescription = String::Format( "{0} and uses {1} authentication type.", propertyDescription, authenticationType );
   }

   Console::WriteLine( propertyDescription );
}


// Retrieve the account token from the current WindowsIdentity object 
// instead of calling the unmanaged LogonUser method in the advapi32.dll.
IntPtr LogonUser()
{

   IntPtr accountToken = WindowsIdentity::GetCurrent()->Token;

   return accountToken;
}


// Get the WindowsIdentity object for an Anonymous user. 
void GetAnonymousUser()
{

   // Retrieve a WindowsIdentity object that represents an anonymous 
   // Windows user.
   WindowsIdentity^ windowsIdentity = WindowsIdentity::GetAnonymous();

}


// Impersonate a Windows identity. 
void ImpersonateIdentity( IntPtr logonToken )
{

   // Retrieve the Windows identity using the specified token.
   WindowsIdentity^ windowsIdentity = gcnew WindowsIdentity( logonToken );

   // Create a WindowsImpersonationContext object by impersonating the 
   // Windows identity.
   WindowsImpersonationContext^ impersonationContext = windowsIdentity->Impersonate();
   Console::WriteLine( "Name of the identity after impersonation: {0}.", WindowsIdentity::GetCurrent()->Name );

   // Stop impersonating the user.
   impersonationContext->Undo();

   // Check the identity name.
   Console::Write( "Name of the identity after performing an Undo on the" );
   Console::WriteLine( " impersonation: {0}", WindowsIdentity::GetCurrent()->Name );
}

System::Object
  System.Security.Principal::WindowsIdentity

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0, 2.0, 1.1, 1.0
Show: