共用方式為


WindowsIdentity 建構函式

定義

初始化 WindowsIdentity 類別的新實例。

多載

WindowsIdentity(IntPtr)

針對指定的 Windows 帳戶令牌所代表的使用者,初始化 WindowsIdentity 類別的新實例。

WindowsIdentity(WindowsIdentity)

使用指定的 WindowsIdentity 物件,初始化 WindowsIdentity 類別的新實例。

WindowsIdentity(String)

為指定的用戶主體名稱 (UPN) 表示的使用者,初始化 WindowsIdentity 類別的新實例。

WindowsIdentity(IntPtr, String)

針對指定的 Windows 帳戶令牌和指定的驗證類型所代表的使用者,初始化 WindowsIdentity 類別的新實例。

WindowsIdentity(SerializationInfo, StreamingContext)
已淘汰.

針對 SerializationInfo 數據流中資訊所代表的使用者,初始化 WindowsIdentity 類別的新實例。

WindowsIdentity(String, String)

為指定的用戶主體名稱 (UPN) 和指定的驗證類型所代表的使用者,初始化 WindowsIdentity 類別的新實例。

WindowsIdentity(IntPtr, String, WindowsAccountType)

為指定的 Windows 帳戶令牌、指定的驗證類型和指定的 Windows 帳戶類型所代表的使用者,初始化 WindowsIdentity 類別的新實例。

WindowsIdentity(IntPtr, String, WindowsAccountType, Boolean)

針對指定的 Windows 帳戶令牌、指定的驗證類型、指定的 Windows 帳戶類型,以及指定的驗證狀態,初始化 WindowsIdentity 類別的新實例。

WindowsIdentity(IntPtr)

針對指定的 Windows 帳戶令牌所代表的使用者,初始化 WindowsIdentity 類別的新實例。

public:
 WindowsIdentity(IntPtr userToken);
public WindowsIdentity (IntPtr userToken);
new System.Security.Principal.WindowsIdentity : nativeint -> System.Security.Principal.WindowsIdentity
Public Sub New (userToken As IntPtr)

參數

userToken
IntPtr

nativeint

代表程式代碼執行之使用者的帳戶令牌。

例外狀況

userToken 為 0。

-或-

userToken 重複且模擬無效。

呼叫端沒有正確的許可權。

-或-

發生 Win32 錯誤。

備註

下表顯示 WindowsIdentity實例的初始屬性值。

財產 初始值
AuthenticationType Negotiate
WindowsAccountType Normal
IsAuthenticated false

注意

您可以藉由呼叫 Unmanaged 程式代碼,例如 Windows API LogonUser 函式,來擷取 userToken 所代表的令牌。 呼叫 Windows API CloseHandle 函式,一律釋放 userToken。 如需呼叫 Unmanaged 程式代碼的詳細資訊,請參閱 使用 Unmanaged DLL 函式

適用於

WindowsIdentity(WindowsIdentity)

使用指定的 WindowsIdentity 物件,初始化 WindowsIdentity 類別的新實例。

protected:
 WindowsIdentity(System::Security::Principal::WindowsIdentity ^ identity);
protected WindowsIdentity (System.Security.Principal.WindowsIdentity identity);
new System.Security.Principal.WindowsIdentity : System.Security.Principal.WindowsIdentity -> System.Security.Principal.WindowsIdentity
Protected Sub New (identity As WindowsIdentity)

參數

identity
WindowsIdentity

要從中建構新實體的物件,WindowsIdentity

適用於

WindowsIdentity(String)

為指定的用戶主體名稱 (UPN) 表示的使用者,初始化 WindowsIdentity 類別的新實例。

public:
 WindowsIdentity(System::String ^ sUserPrincipalName);
public WindowsIdentity (string sUserPrincipalName);
new System.Security.Principal.WindowsIdentity : string -> System.Security.Principal.WindowsIdentity
Public Sub New (sUserPrincipalName As String)

參數

sUserPrincipalName
String

代表程式代碼執行之使用者的UPN。

例外狀況

Windows 傳回 Windows NT 狀態代碼STATUS_ACCESS_DENIED。

記憶體不足。

呼叫端沒有正確的許可權。

-或-

計算機未連結至 Windows 2003 或更新版本的網域。

-或-

計算機未執行 Windows 2003 或更新版本。

-或-

使用者不是計算機所連結之網域的成員。

備註

UPN 的格式 username@domainname.com,換句話說,是電子郵件位址。 sUserPrincipalName 中識別的UPN是用來透過 Windows API LsaLogonUser 函式擷取該使用者的令牌。 接著,該令牌會用來識別使用者。 因為無法使用提供的 UPN 登入,所以可能會傳回例外狀況。

注意

此建構函式僅適用於加入 Windows Server 2003 或更新版本的網域的電腦。 舊版網域類型擲回例外狀況。 這項限制是因為此建構函式會使用 KERB_S4U_LOGON 結構,這是 Windows Server 2003 中首次引進的。 此外,此建構函式需要目標用戶帳戶上 token-groups-global-and-universal 屬性的讀取許可權。

適用於

WindowsIdentity(IntPtr, String)

針對指定的 Windows 帳戶令牌和指定的驗證類型所代表的使用者,初始化 WindowsIdentity 類別的新實例。

public:
 WindowsIdentity(IntPtr userToken, System::String ^ type);
public WindowsIdentity (IntPtr userToken, string type);
new System.Security.Principal.WindowsIdentity : nativeint * string -> System.Security.Principal.WindowsIdentity
Public Sub New (userToken As IntPtr, type As String)

參數

userToken
IntPtr

nativeint

代表程式代碼執行之使用者的帳戶令牌。

type
String

(僅限參考用途。)用來識別使用者的驗證類型。

例外狀況

userToken 為 0。

-或-

userToken 重複且模擬無效。

呼叫端沒有正確的許可權。

-或-

發生 Win32 錯誤。

範例

下列程式代碼示範如何使用 WindowsIdentity 建構函式,為指定的 Windows 帳戶令牌和指定的驗證類型所代表的使用者建立 WindowsIdentity 類別的新實例。 此程式代碼範例是提供給 WindowsIdentity 類別之較大範例的一部分。

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 );
}
private static void IntPtrStringConstructor(IntPtr logonToken)
{
    // Construct a WindowsIdentity object using the input account token 
    // and the specified authentication type.
    string authenticationType = "WindowsAuthentication";
    WindowsIdentity windowsIdentity =
                    new WindowsIdentity(logonToken, authenticationType);

    Console.WriteLine("Created a Windows identity object named " +
        windowsIdentity.Name + ".");
}
Private Sub IntPtrStringConstructor(ByVal logonToken As IntPtr)
    ' Construct a WindowsIdentity object using the input account token 
    ' and the specified authentication type
    Dim authenticationType = "WindowsAuthentication"
    Dim windowsIdentity As _
        New WindowsIdentity(logonToken, authenticationType)

    WriteLine("Created a Windows identity object named " + _
        windowsIdentity.Name + ".")
End Sub

備註

下表顯示 WindowsIdentity實例的初始屬性值。

財產 初始值
WindowsAccountType Normal
IsAuthenticated false

type 參數的值是用來設定 AuthenticationType 參數。 如果 typenull,則安全性系統會將 AuthenticationType 設定為 Windows Vista 和更新版本的 Windows 作業系統上 Negotiate,以及在舊版 Windows 操作系統上 Kerberos。 安全性系統不會使用此值;僅供參考之用。

注意

您可以藉由呼叫 Unmanaged 程式代碼,例如 Windows API LogonUser 函式,來擷取 userToken 所代表的令牌。 呼叫 Windows API CloseHandle 函式,一律釋放 userToken。 如需呼叫 Unmanaged 程式代碼的詳細資訊,請參閱 使用 Unmanaged DLL 函式

適用於

WindowsIdentity(SerializationInfo, StreamingContext)

警告

This API supports obsolete formatter-based serialization. It should not be called or extended by application code.

針對 SerializationInfo 數據流中資訊所代表的使用者,初始化 WindowsIdentity 類別的新實例。

public:
 WindowsIdentity(System::Runtime::Serialization::SerializationInfo ^ info, System::Runtime::Serialization::StreamingContext context);
public WindowsIdentity (System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context);
[System.Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.", DiagnosticId="SYSLIB0051", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public WindowsIdentity (System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context);
new System.Security.Principal.WindowsIdentity : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> System.Security.Principal.WindowsIdentity
[<System.Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.", DiagnosticId="SYSLIB0051", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Security.Principal.WindowsIdentity : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> System.Security.Principal.WindowsIdentity
Public Sub New (info As SerializationInfo, context As StreamingContext)

參數

info
SerializationInfo

物件,其中包含使用者的帳戶資訊。

context
StreamingContext

物件,表示數據流特性。

屬性

例外狀況

無法跨進程串行化 WindowsIdentity

呼叫端沒有正確的許可權。

-或-

發生 Win32 錯誤。

備註

重要

使用不受信任的數據呼叫此方法是安全性風險。 僅使用信任的數據呼叫這個方法。 如需詳細資訊,請參閱 驗證所有輸入

適用於

WindowsIdentity(String, String)

為指定的用戶主體名稱 (UPN) 和指定的驗證類型所代表的使用者,初始化 WindowsIdentity 類別的新實例。

public:
 WindowsIdentity(System::String ^ sUserPrincipalName, System::String ^ type);
public WindowsIdentity (string sUserPrincipalName, string type);
new System.Security.Principal.WindowsIdentity : string * string -> System.Security.Principal.WindowsIdentity
Public Sub New (sUserPrincipalName As String, type As String)

參數

sUserPrincipalName
String

代表程式代碼執行之使用者的UPN。

type
String

(僅限參考用途。)用來識別使用者的驗證類型。

例外狀況

Windows 傳回 Windows NT 狀態代碼STATUS_ACCESS_DENIED。

記憶體不足。

呼叫端沒有正確的許可權。

-或-

計算機未連結至 Windows 2003 或更新版本的網域。

-或-

計算機未執行 Windows 2003 或更新版本。

-或-

使用者不是計算機所連結之網域的成員。

備註

type 參數的值是用來設定 AuthenticationType 參數。 如果 typenull,則安全性系統會將 AuthenticationType 設定為 Windows Vista 和更新版本的 Windows 作業系統上 Negotiate,以及在舊版 Windows 操作系統上 Kerberos。 安全性系統不會使用此值;僅供參考之用。

sUserPrincipalName 中識別的UPN是用來透過 Windows API LsaLogonUser 函式擷取該使用者的令牌。 接著,該令牌會用來識別使用者。 因為無法使用提供的 UPN 登入,所以可能會傳回例外狀況。

注意

此建構函式僅適用於加入 Windows Server 2003 或更新版本的網域的電腦。 舊版網域類型擲回例外狀況。 這項限制是因為此建構函式會使用 KERB_S4U_LOGON 結構,這是 Windows Server 2003 中首次引進的。 此外,此建構函式需要目標用戶帳戶上 token-groups-global-and-universal 屬性的讀取許可權。

適用於

WindowsIdentity(IntPtr, String, WindowsAccountType)

為指定的 Windows 帳戶令牌、指定的驗證類型和指定的 Windows 帳戶類型所代表的使用者,初始化 WindowsIdentity 類別的新實例。

public:
 WindowsIdentity(IntPtr userToken, System::String ^ type, System::Security::Principal::WindowsAccountType acctType);
public WindowsIdentity (IntPtr userToken, string type, System.Security.Principal.WindowsAccountType acctType);
new System.Security.Principal.WindowsIdentity : nativeint * string * System.Security.Principal.WindowsAccountType -> System.Security.Principal.WindowsIdentity
Public Sub New (userToken As IntPtr, type As String, acctType As WindowsAccountType)

參數

userToken
IntPtr

nativeint

代表程式代碼執行之使用者的帳戶令牌。

type
String

(僅限參考用途。)用來識別使用者的驗證類型。

acctType
WindowsAccountType

其中一個列舉值。

例外狀況

userToken 為 0。

-或-

userToken 重複且模擬無效。

呼叫端沒有正確的許可權。

-或-

發生 Win32 錯誤。

範例

下列程式代碼示範如何使用 WindowsIdentity 建構函式,為指定的 Windows 帳戶令牌、指定的驗證類型和指定的 Windows 帳戶類型所代表的使用者建立 WindowsIdentity 類別的新實例。 此程式代碼範例是提供給 WindowsIdentity 類別之較大範例的一部分。

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 );
}
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 windowsIdentity =
        new WindowsIdentity(logonToken, authenticationType, guestAccount);

    Console.WriteLine("Created a Windows identity object named " +
        windowsIdentity.Name + ".");
}
Private Sub IntPtrStringTypeConstructor(ByVal logonToken As IntPtr)
    ' Construct a WindowsIdentity object using the input account token,
    ' and the specified authentication type and Windows account type.
    Dim authenticationType As String = "WindowsAuthentication"
    Dim guestAccount As WindowsAccountType = WindowsAccountType.Guest
    Dim windowsIdentity As _
        New WindowsIdentity(logonToken, authenticationType, guestAccount)

    WriteLine("Created a Windows identity object named " + _
        windowsIdentity.Name + ".")
End Sub

備註

下表顯示 WindowsIdentity實例的初始屬性值。

財產 初始值
IsAuthenticated false

type 參數的值是用來設定 AuthenticationType 參數。 如果 typenull,則安全性系統會將 AuthenticationType 設定為 Windows Vista 和更新版本的 Windows 作業系統上 Negotiate,以及在舊版 Windows 操作系統上 Kerberos。 安全性系統不會使用此值;僅供參考之用。

注意

您可以藉由呼叫 Unmanaged 程式代碼,例如 Windows API LogonUser 函式,來擷取 userToken 所代表的令牌。 呼叫 Windows API CloseHandle 函式,一律釋放 userToken。 如需呼叫 Unmanaged 程式代碼的詳細資訊,請參閱 使用 Unmanaged DLL 函式

適用於

WindowsIdentity(IntPtr, String, WindowsAccountType, Boolean)

針對指定的 Windows 帳戶令牌、指定的驗證類型、指定的 Windows 帳戶類型,以及指定的驗證狀態,初始化 WindowsIdentity 類別的新實例。

public:
 WindowsIdentity(IntPtr userToken, System::String ^ type, System::Security::Principal::WindowsAccountType acctType, bool isAuthenticated);
public WindowsIdentity (IntPtr userToken, string type, System.Security.Principal.WindowsAccountType acctType, bool isAuthenticated);
new System.Security.Principal.WindowsIdentity : nativeint * string * System.Security.Principal.WindowsAccountType * bool -> System.Security.Principal.WindowsIdentity
Public Sub New (userToken As IntPtr, type As String, acctType As WindowsAccountType, isAuthenticated As Boolean)

參數

userToken
IntPtr

nativeint

代表程式代碼執行之使用者的帳戶令牌。

type
String

(僅限參考用途。)用來識別使用者的驗證類型。

acctType
WindowsAccountType

其中一個列舉值。

isAuthenticated
Boolean

true 表示使用者已驗證;否則,false

例外狀況

userToken 為 0。

-或-

userToken 重複且模擬無效。

呼叫端沒有正確的許可權。

-或-

發生 Win32 錯誤。

範例

下列程式代碼示範如何使用 WindowsIdentity 建構函式,為指定的 Windows 帳戶令牌、指定的驗證類型、指定的 Windows 帳戶類型和指定的驗證狀態所代表的使用者,建立 WindowsIdentity 類別的新實例。 此程式代碼範例是提供給 WindowsIdentity 類別之較大範例的一部分。

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 );
}
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 windowsIdentity = new WindowsIdentity(
        logonToken, authenticationType, guestAccount, isAuthenticated);

    Console.WriteLine("Created a Windows identity object named " +
        windowsIdentity.Name + ".");
}
Private Sub IntPrtStringTypeBoolConstructor(ByVal logonToken As IntPtr)
    ' Construct a WindowsIdentity object using the input account token,
    ' and the specified authentication type, Windows account type, and
    ' authentication flag.
    Dim authenticationType As String = "WindowsAuthentication"
    Dim guestAccount As WindowsAccountType = WindowsAccountType.Guest
    Dim isAuthenticated As Boolean = True
    Dim windowsIdentity As New WindowsIdentity( _
        logonToken, authenticationType, guestAccount, isAuthenticated)

    WriteLine("Created a Windows identity object named " + _
        windowsIdentity.Name + ".")
End Sub

備註

type 參數的值是用來設定 AuthenticationType 參數。 如果 typenull,則安全性系統會將 AuthenticationType 設定為 Windows Vista 和更新版本的 Windows 作業系統上 Negotiate,以及在舊版 Windows 操作系統上 Kerberos。 安全性系統不會使用此值;僅供參考之用。

您可以藉由呼叫 Unmanaged 程式代碼,例如 Windows API LogonUser 函式,來擷取 userToken 所代表的令牌。 呼叫 Windows API CloseHandle 函式,一律釋放 userToken。 如需呼叫 Unmanaged 程式代碼的詳細資訊,請參閱 使用 Unmanaged DLL 函式

適用於