WindowsIdentity.RunImpersonated Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Überlädt
| Name | Beschreibung |
|---|---|
| RunImpersonated(SafeAccessTokenHandle, Action) |
Führt die angegebene Aktion als identitätswechsel Windows Identität aus. Anstatt einen imitierten Methodenaufruf zu verwenden und ihre Funktion auszuführen WindowsImpersonationContext, können Sie Ihre Funktion direkt als Parameter verwenden RunImpersonated(SafeAccessTokenHandle, Action) und bereitstellen. |
| RunImpersonated<T>(SafeAccessTokenHandle, Func<T>) |
Führt die angegebene Funktion als identitätswechselte Windows Identität aus. Anstatt einen imitierten Methodenaufruf zu verwenden und ihre Funktion auszuführen WindowsImpersonationContext, können Sie Ihre Funktion direkt als Parameter verwenden RunImpersonated(SafeAccessTokenHandle, Action) und bereitstellen. |
RunImpersonated(SafeAccessTokenHandle, Action)
Führt die angegebene Aktion als identitätswechsel Windows Identität aus. Anstatt einen imitierten Methodenaufruf zu verwenden und ihre Funktion auszuführen WindowsImpersonationContext, können Sie Ihre Funktion direkt als Parameter verwenden RunImpersonated(SafeAccessTokenHandle, Action) und bereitstellen.
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
Public Shared Sub RunImpersonated (safeAccessTokenHandle As SafeAccessTokenHandle, action As Action)
Parameter
- safeAccessTokenHandle
- SafeAccessTokenHandle
Das SafeAccessTokenHandle der identitätswechselten Windows Identität.
- action
- Action
Auszuführende System.Action.
Beispiele
Im folgenden Beispiel wird die Verwendung der WindowsIdentity Klasse zum Identitätswechsel eines Benutzers veranschaulicht.
Warning
In diesem Beispiel wird der Benutzer aufgefordert, ein Kennwort auf dem Konsolenbildschirm einzugeben. Das Kennwort wird auf dem Bildschirm angezeigt, da das Konsolenfenster maskierte Eingaben nicht nativ unterstützt.
// 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);
}
}
Hinweise
Note
Diese Methode kann zuverlässig mit dem asynchronen/await-Muster verwendet werden, im Gegensatz zu Impersonate. In einer asynchronen Methode kann die generische Überladung dieser Methode mit einem asynchronen Delegatargument verwendet werden, sodass die resultierende Aufgabe möglicherweise erwartet wird.
Gilt für:
RunImpersonated<T>(SafeAccessTokenHandle, Func<T>)
Führt die angegebene Funktion als identitätswechselte Windows Identität aus. Anstatt einen imitierten Methodenaufruf zu verwenden und ihre Funktion auszuführen WindowsImpersonationContext, können Sie Ihre Funktion direkt als Parameter verwenden RunImpersonated(SafeAccessTokenHandle, Action) und bereitstellen.
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
Public Shared Function RunImpersonated(Of T) (safeAccessTokenHandle As SafeAccessTokenHandle, func As Func(Of T)) As T
Typparameter
- T
Der Typ des Objekts, das von der Funktion verwendet und zurückgegeben wird.
Parameter
- safeAccessTokenHandle
- SafeAccessTokenHandle
Das SafeAccessTokenHandle der identitätswechselten Windows Identität.
- func
- Func<T>
Das auszuführende System.Func.
Gibt zurück
Das Ergebnis der Funktion.
Beispiele
Im folgenden Beispiel wird die Verwendung der WindowsIdentity Klasse zum Identitätswechsel eines Benutzers veranschaulicht.
Warning
In diesem Beispiel wird der Benutzer aufgefordert, ein Kennwort auf dem Konsolenbildschirm einzugeben. Das Kennwort wird auf dem Bildschirm angezeigt, da das Konsolenfenster maskierte Eingaben nicht nativ unterstützt.
// 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);
}
}
Hinweise
Note
Diese Methode kann zuverlässig mit dem asynchronen/await-Muster verwendet werden, im Gegensatz zu Impersonate. In einer asynchronen Methode kann diese Methode mit einem asynchronen Delegatargument verwendet werden, sodass die resultierende Aufgabe möglicherweise erwartet wird.