Namespace windowsidentitymembers {
Using system;
Using system. Security. Principal;
Class windowsidentitymembers
{
[Stathread]
Static void main (string [] ARGs)
{
// 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
// Specified Windows Account token.
Private Static void intptrconstructor (intptr logontoken)
{
// Construct a windowsidentity object using the input account token.
Windowsidentity = new windowsidentity (logontoken );
Console. writeline ("created a Windows identity object named" +
Windowsidentity. Name + ".");
}
// Create a windowsidentity object for the user represented by
// Specified account token and authentication type.
Private Static void intptrstringconstructor (intptr logontoken)
{
// Construct a windowsidentity object using the input account token
// And the specified authentication type.
String authenticationtype = "windowsauthentication ";
Windowsidentity =
New windowsidentity (logontoken, authenticationtype );
Console. writeline ("created a Windows identity object named" +
Windowsidentity. Name + ".");
}
// Create a windowsidentity object for the user represented by
// Specified account token, authentication type, and Windows Account
// Type.
Private Static 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 =
New windowsidentity (logontoken, authenticationtype, guestaccount );
Console. writeline ("created a Windows identity object named" +
Windowsidentity. Name + ".");
}
// Create a windowsidentity object for the user represented by
// Specified account token, authentication type, Windows Account type, and
// Boolean authentication flag.
Private Static 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 = new windowsidentity (
Logontoken, authenticationtype, guestaccount, isauthenticated );
Console. writeline ("created a Windows identity object named" +
Windowsidentity. Name + ".");
}
// Access the properties of a windowsidentity object.
Private Static void useproperties (intptr logontoken)
{
Windowsidentity = new windowsidentity (logontoken );
String propertydescription = "the Windows identity named ";
// Retrieve the Windows logon name from the Windows identity object.
Propertydescription + = windowsidentity. Name;
// Verify that the user account is not considered to be an anonymous
// Account by the system.
If (! Windowsidentity. isanonymous)
{
Propertydescription + = "is not an anonymous account ";
}
// Verify that the user account has been authenticated by windows.
If (windowsidentity. isauthenticated)
{
Propertydescription + = ", is authenticated ";
}
// Verify that the user account is considered to be a system account
// By the system.
If (windowsidentity. issystem)
{
Propertydescription + = ", is a system account ";
}
// Verify that the user account is considered to be a guest account
// By the system.
If (windowsidentity. isguest)
{
Propertydescription + = ", is a guest account ";
}
// Retrieve the authentication type for
String authenticationtype = windowsidentity. authenticationtype;
// Append the authenication type to the output message.
If (authenticationtype! = NULL)
{
Propertydescription + = ("and uses" + authenticationtype );
Propertydescription + = ("authentication type .");
}
Console. writeline (propertydescription );
// Display the SID for the owner.
Console. Write ("the SID for the owner is :");
Securityidentifier Si = windowsidentity. owner;
Console. writeline (Si. tostring ());
// Display the SIDS for the groups the current user belongs.
Console. writeline ("display the SIDS for the groups the current user belongs .");
Identityreferencecollection IRC = windowsidentity. Groups;
Foreach (identityreference IR in IRC)
Console. writeline (IR. value );
Tokenimpersonationlevel token = windowsidentity. impersonationlevel;
Console. writeline ("the impersonation level for the current user is:" + token. tostring ());
}
// Retrieve the account token from the current windowsidentity object
// Instead of calling the unmanaged logonuser method in the advapi32.dll.
Private Static intptr logonuser ()
{
String _ sectoken = windowsidentity. getcurrent (). User. value;
Console. writeline ("windowsidentity. getcurrent (). User. Value:" + _ sectoken );
Intptr accounttoken = windowsidentity. getcurrent (). Token;
Console. writeline ("token number is:" + accounttoken. tostring ());
Return accounttoken;
}
// Get the windowsidentity object for an anonymous user.
Private Static void getanonymoususer ()
{
// Retrieve a windowsidentity object that represents an anonymous
// Windows user.
Windowsidentity = windowsidentity. getanonymous ();
}
// Impersonate a Windows identity.
Private Static void impersonateidentity (intptr logontoken)
{
// Retrieve the Windows identity using the specified token.
Windowsidentity = new windowsidentity (logontoken );
// Create a windowsimpersonationcontext object by impersonating
// Windows identity.
Windowsimpersonationcontext impersonationcontext =
Windowsidentity. Impersonate ();
Console. writeline ("Name of the identity after impersonation :"
+ Windowsidentity. getcurrent (). Name + ".");
Console. writeline (windowsidentity. impersonationlevel );
// Stop impersonating the user.
Impersonationcontext. Undo ();
// Check the identity name.
Console. Write ("Name of the identity after discovery Ming an undo on ");
Console. writeline ("impersonation:" +
Windowsidentity. getcurrent (). Name );
}
}
}