WindowsIdentity.RunImpersonated Methode

Definition

Überlädt

RunImpersonated(SafeAccessTokenHandle, Action)

Führt die angegebene Aktion als imitierte Windows-Identität aus.Runs the specified action as the impersonated Windows identity. Statt einen imitierten Methodenaufruf zu verwenden und die Funktion in WindowsImpersonationContext auszuführen, können Sie RunImpersonated(SafeAccessTokenHandle, Action) verwenden und die Funktion direkt als Parameter angeben.Instead of using an impersonated method call and running your function in WindowsImpersonationContext, you can use RunImpersonated(SafeAccessTokenHandle, Action) and provide your function directly as a parameter.

RunImpersonated<T>(SafeAccessTokenHandle, Func<T>)

Führt die angegebene Funktion als imitierte Windows-Identität aus.Runs the specified function as the impersonated Windows identity. Statt einen imitierten Methodenaufruf zu verwenden und die Funktion in WindowsImpersonationContext auszuführen, können Sie RunImpersonated(SafeAccessTokenHandle, Action) verwenden und die Funktion direkt als Parameter angeben.Instead of using an impersonated method call and running your function in WindowsImpersonationContext, you can use RunImpersonated(SafeAccessTokenHandle, Action) and provide your function directly as a parameter.

RunImpersonated(SafeAccessTokenHandle, Action)

Führt die angegebene Aktion als imitierte Windows-Identität aus.Runs the specified action as the impersonated Windows identity. Statt einen imitierten Methodenaufruf zu verwenden und die Funktion in WindowsImpersonationContext auszuführen, können Sie RunImpersonated(SafeAccessTokenHandle, Action) verwenden und die Funktion direkt als Parameter angeben.Instead of using an impersonated method call and running your function in WindowsImpersonationContext, you can use RunImpersonated(SafeAccessTokenHandle, Action) and provide your function directly as a parameter.

public:
 static void RunImpersonated(Microsoft::Win32::SafeHandles::SafeAccessTokenHandle ^ safeAccessTokenHandle, Action ^ action);
public static void RunImpersonated (Microsoft.Win32.SafeHandles.SafeAccessTokenHandle safeAccessTokenHandle, Action action);
static member RunImpersonated : Microsoft.Win32.SafeHandles.SafeAccessTokenHandle * Action -> unit

Parameter

safeAccessTokenHandle
SafeAccessTokenHandle

Das SafeAccessTokenHandle der imitierten Windows-Identität.The SafeAccessTokenHandle of the impersonated Windows identity.

action
Action

Die auszuführende System.Action.The System.Action to run.

Beispiele

Im folgenden Beispiel wird veranschaulicht, wie die WindowsIdentity-Klasse verwendet wird, um die Identität eines Benutzers anzunehmen.The following example demonstrates the use of the WindowsIdentity class to impersonate a user.

Warnung

In diesem Beispiel wird der Benutzer aufgefordert, auf dem Konsolenbildschirm ein Kennwort einzugeben.This sample asks the user to enter a password on the console screen. Das Kennwort wird auf dem Bildschirm angezeigt, da das Konsolenfenster keine systemeigene Unterstützung für maskierte Eingaben bietet.The password will be visible on the screen, because the console window does not support masked input natively.

// The following example demonstrates the use of the WindowsIdentity class to impersonate a user.   
// IMPORTANT NOTE:   
// This sample asks the user to enter a password on the console screen.   
// The password will be visible on the screen, because the console window   
// does not support masked input natively.  
  
using System;  
using System.Runtime.InteropServices;  
using System.Security;  
using System.Security.Principal;  
using Microsoft.Win32.SafeHandles;  
  
public class ImpersonationDemo  
{  
    [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]  
    public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,  
        int dwLogonType, int dwLogonProvider, out SafeAccessTokenHandle phToken);  
  
    public static void Main()  
    {  
        // Get the user token for the specified user, domain, and password using the   
        // unmanaged LogonUser method.   
        // The local machine name can be used for the domain name to impersonate a user on this machine.  
        Console.Write("Enter the name of the domain on which to log on: ");  
        string domainName = Console.ReadLine();  
  
        Console.Write("Enter the login of a user on {0} that you wish to impersonate: ", domainName);  
        string userName = Console.ReadLine();  
  
        Console.Write("Enter the password for {0}: ", userName);  
  
        const int LOGON32_PROVIDER_DEFAULT = 0;  
        //This parameter causes LogonUser to create a primary token.   
        const int LOGON32_LOGON_INTERACTIVE = 2;  
  
        // Call LogonUser to obtain a handle to an access token.   
        SafeAccessTokenHandle safeAccessTokenHandle;  
        bool returnValue = LogonUser(userName, domainName, Console.ReadLine(),  
            LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,  
            out safeAccessTokenHandle);  
  
        if (false == returnValue)  
        {  
            int ret = Marshal.GetLastWin32Error();  
            Console.WriteLine("LogonUser failed with error code : {0}", ret);  
            throw new System.ComponentModel.Win32Exception(ret);  
        }  
  
        Console.WriteLine("Did LogonUser Succeed? " + (returnValue ? "Yes" : "No"));  
        // Check the identity.  
        Console.WriteLine("Before impersonation: " + WindowsIdentity.GetCurrent().Name);  
  
        // Note: if you want to run as unimpersonated, pass  
        //       'SafeAccessTokenHandle.InvalidHandle' instead of variable 'safeAccessTokenHandle'  
        WindowsIdentity.RunImpersonated(  
            safeAccessTokenHandle,  
            // User action  
            () =>  
            {  
                // Check the identity.  
                Console.WriteLine("During impersonation: " + WindowsIdentity.GetCurrent().Name);  
            }  
            );  
  
        // Check the identity again.  
        Console.WriteLine("After impersonation: " + WindowsIdentity.GetCurrent().Name);  
    }  
}  
  

RunImpersonated<T>(SafeAccessTokenHandle, Func<T>)

Führt die angegebene Funktion als imitierte Windows-Identität aus.Runs the specified function as the impersonated Windows identity. Statt einen imitierten Methodenaufruf zu verwenden und die Funktion in WindowsImpersonationContext auszuführen, können Sie RunImpersonated(SafeAccessTokenHandle, Action) verwenden und die Funktion direkt als Parameter angeben.Instead of using an impersonated method call and running your function in WindowsImpersonationContext, you can use RunImpersonated(SafeAccessTokenHandle, Action) and provide your function directly as a parameter.

public:
generic <typename T>
 static T RunImpersonated(Microsoft::Win32::SafeHandles::SafeAccessTokenHandle ^ safeAccessTokenHandle, Func<T> ^ func);
public static T RunImpersonated<T> (Microsoft.Win32.SafeHandles.SafeAccessTokenHandle safeAccessTokenHandle, Func<T> func);
static member RunImpersonated : Microsoft.Win32.SafeHandles.SafeAccessTokenHandle * Func<'T> -> 'T

Typparameter

T

Der Typ des Objekts, das von der Funktion verwendet und zurückgegeben wird.The type of object used by and returned by the function.

Parameter

safeAccessTokenHandle
SafeAccessTokenHandle

Das SafeAccessTokenHandle der imitierten Windows-Identität.The SafeAccessTokenHandle of the impersonated Windows identity.

func
Func<T>

Die auszuführende System.Func.The System.Func to run.

Gibt zurück

T

Das Ergebnis der Funktion.The result of the function.

Beispiele

Im folgenden Beispiel wird veranschaulicht, wie die WindowsIdentity-Klasse verwendet wird, um die Identität eines Benutzers anzunehmen.The following example demonstrates the use of the WindowsIdentity class to impersonate a user.

Warnung

In diesem Beispiel wird der Benutzer aufgefordert, auf dem Konsolenbildschirm ein Kennwort einzugeben.This sample asks the user to enter a password on the console screen. Das Kennwort wird auf dem Bildschirm angezeigt, da das Konsolenfenster keine systemeigene Unterstützung für maskierte Eingaben bietet.The password will be visible on the screen, because the console window does not support masked input natively.

// The following example demonstrates the use of the WindowsIdentity class to impersonate a user.   
// IMPORTANT NOTE:   
// This sample asks the user to enter a password on the console screen.   
// The password will be visible on the screen, because the console window   
// does not support masked input natively.  
  
using System;  
using System.Runtime.InteropServices;  
using System.Security;  
using System.Security.Principal;  
using Microsoft.Win32.SafeHandles;  
  
public class ImpersonationDemo  
{  
    [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]  
    public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,  
        int dwLogonType, int dwLogonProvider, out SafeAccessTokenHandle phToken);  
  
    public static void Main()  
    {  
        // Get the user token for the specified user, domain, and password using the   
        // unmanaged LogonUser method.   
        // The local machine name can be used for the domain name to impersonate a user on this machine.  
        Console.Write("Enter the name of the domain on which to log on: ");  
        string domainName = Console.ReadLine();  
  
        Console.Write("Enter the login of a user on {0} that you wish to impersonate: ", domainName);  
        string userName = Console.ReadLine();  
  
        Console.Write("Enter the password for {0}: ", userName);  
  
        const int LOGON32_PROVIDER_DEFAULT = 0;  
        //This parameter causes LogonUser to create a primary token.   
        const int LOGON32_LOGON_INTERACTIVE = 2;  
  
        // Call LogonUser to obtain a handle to an access token.   
        SafeAccessTokenHandle safeAccessTokenHandle;  
        bool returnValue = LogonUser(userName, domainName, Console.ReadLine(),  
            LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,  
            out safeAccessTokenHandle);  
  
        if (false == returnValue)  
        {  
            int ret = Marshal.GetLastWin32Error();  
            Console.WriteLine("LogonUser failed with error code : {0}", ret);  
            throw new System.ComponentModel.Win32Exception(ret);  
        }  
  
        Console.WriteLine("Did LogonUser Succeed? " + (returnValue ? "Yes" : "No"));  
        // Check the identity.  
        Console.WriteLine("Before impersonation: " + WindowsIdentity.GetCurrent().Name);  
  
        // Note: if you want to run as unimpersonated, pass  
        //       'SafeAccessTokenHandle.InvalidHandle' instead of variable 'safeAccessTokenHandle'  
        WindowsIdentity.RunImpersonated(  
            safeAccessTokenHandle,  
            // User action  
            () =>  
            {  
                // Check the identity.  
                Console.WriteLine("During impersonation: " + WindowsIdentity.GetCurrent().Name);  
            }  
            );  
  
        // Check the identity again.  
        Console.WriteLine("After impersonation: " + WindowsIdentity.GetCurrent().Name);  
    }  
}  
  

Gilt für: