WindowsIdentity 建構函式
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
初始化 WindowsIdentity 類別的新執行個體。
多載
WindowsIdentity(IntPtr) |
為指定 Windows 帳戶語彙基元所表示的使用者,初始化 WindowsIdentity 類別的新執行個體。 |
WindowsIdentity(WindowsIdentity) |
使用指定的 WindowsIdentity 物件,初始化 WindowsIdentity 類別的新執行個體。 |
WindowsIdentity(String) |
為指定使用者主要名稱 (UPN) 所表示的使用者,初始化 WindowsIdentity 類別的新執行個體。 |
WindowsIdentity(IntPtr, String) |
為指定 Windows 帳戶語彙基元和指定驗證 (Authentication) 類型所表示的使用者,初始化 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
使此程式碼為其執行之使用者的帳戶語彙基元。
例外狀況
備註
下表顯示 實例 WindowsIdentity的初始屬性值。
屬性 | 初始值 |
---|---|
AuthenticationType | Negotiate |
WindowsAccountType | Normal |
IsAuthenticated | false |
注意
您可以藉由呼叫非受控程序代碼,例如 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 或更新版本的網域的電腦。 舊版網域類型會擲回例外狀況。 這項限制是因為此建構函式使用 Windows Server 2003 中首次引進 的 KERB_S4U_LOGON 結構。 此外,此建構函式需要目標用戶帳戶上 token-groups-global-and-universal (TGGAU) 屬性 的讀取許可權。
適用於
WindowsIdentity(IntPtr, String)
為指定 Windows 帳戶語彙基元和指定驗證 (Authentication) 類型所表示的使用者,初始化 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
(僅供資訊提供之用。) 用來識別使用者的驗證類型。
例外狀況
範例
下列程式代碼示範如何使用 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 參數。 如果 type
為 null
,則安全性系統會在 Windows Vista 和更新版本的 Windows 作業系統上設定 AuthenticationType 為 Negotiate
,並在舊版 Windows 作業系統上設定為 Kerberos
。 安全性系統不會使用此值;僅供參考使用。
注意
您可以藉由呼叫非受控程序代碼,例如 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。
備註
重要
使用不信任的資料呼叫此方法,會造成安全性上的風險。 呼叫此方法時,請一律使用信任的資料。 如需詳細資訊,請參閱 驗證所有輸入。
適用於
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 參數。 如果 為 type
null
,則安全性系統會在 Windows Vista 和更新版本的 Windows 作業系統上設定 AuthenticationType 為 Negotiate
,並在舊版的 Windows 作業系統上設定為 Kerberos
。 安全性系統不會使用此值;僅供參考之用。
中所 sUserPrincipalName
識別的 UPN 可用來透過 Windows API LsaLogonUser
函式擷取該使用者的令牌。 接著,該令牌會用來識別使用者。 因為無法使用提供的 UPN 登入,所以可能會傳回例外狀況。
注意
此建構函式僅適用於加入 Windows Server 2003 或更新版本的網域的電腦。 舊版網域類型會擲回例外狀況。 這項限制是因為此建構函式會使用 windows Server 2003 中首次引進 的 KERB_S4U_LOGON 結構。 此外,此建構函式需要目標用戶帳戶上 token-groups-global-and-universal (TGGAU) 屬性 的讀取許可權。
適用於
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
其中一個列舉值。
例外狀況
範例
下列程式代碼示範如何使用 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 參數。 如果 為 type
null
,則安全性系統會在 Windows Vista 和更新版本的 Windows 作業系統上設定 AuthenticationType 為 Negotiate
,並在舊版的 Windows 作業系統上設定為 Kerberos
。 安全性系統不會使用此值;僅供參考之用。
注意
您可以藉由呼叫 Unmanaged 程式代碼,例如 Windows API LogonUser
函式來擷取所代表userToken
的令牌。 一律透過呼叫 Windows API 函CloseHandle
式來釋放userToken
。 如需呼叫 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
。
例外狀況
範例
下列程式代碼示範如何使用 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 參數。 如果 為 type
null
,則安全性系統會在 Windows Vista 和更新版本的 Windows 作業系統上設定 AuthenticationType 為 Negotiate
,並在舊版的 Windows 作業系統上設定為 Kerberos
。 安全性系統不會使用此值;僅供參考之用。
您可以藉由呼叫 Unmanaged 程式代碼,例如 Windows API LogonUser
函式來擷取所代表userToken
的令牌。 一律透過呼叫 Windows API 函CloseHandle
式來釋放userToken
。 如需呼叫 Unmanaged 程式代碼的詳細資訊,請參閱 取用非受控 DLL 函式。