chính xác nội dung được nhắc đến mà bạn phải sử dụng. để có được nó, bạn cần phải gọi phương thức LogonUser:
oops không nhận ra rằng tôi chỉ có mã VB.net ở đây. tưởng tượng nó trong C#;) đây trong c#
khai phương pháp bên ngoài:
Private Declare Auto Function LogonUser Lib "advapi32.dll" (ByVal lpszUsername As [String], _
ByVal lpszDomain As [String], ByVal lpszPassword As [String], _
ByVal dwLogonType As Integer, ByVal dwLogonProvider As Integer, _
ByRef phToken As IntPtr) As Boolean
và thực hiện:
_Token = New IntPtr(0)
Const LOGON32_PROVIDER_DEFAULT As Integer = 0
'This parameter causes LogonUser to create a primary token.
Const LOGON32_LOGON_INTERACTIVE As Integer = 2
Const LOGON32_LOGON_NEWCREDENTIALS As Integer = 9
_Token = IntPtr.Zero
' Call LogonUser to obtain a handle to an access token.
Dim returnValue As Boolean = LogonUser(_User, _Domain, _Password, LOGON32_LOGON_NEWCREDENTIALS, LOGON32_PROVIDER_DEFAULT, _Token)
If False = returnValue Then
Dim ret As Integer = Marshal.GetLastWin32Error()
Console.WriteLine("LogonUser failed with error code : {0}", ret)
Throw New System.ComponentModel.Win32Exception(ret)
End If
_Identity = New WindowsIdentity(_Token)
_Context = _Identity.Impersonate()
Có cách nào để làm như vậy mà không có mật khẩu? Tôi có quyền truy cập vào nó như tôi đang tạo ra ngay trước khi mạo danh, chỉ nghĩ rằng tôi muốn hỏi. – Doug
Tôi đoán người ta nên gọi 'CloseHandle' (như đã đề cập trong [docs for' LogonUser'] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa378184 (v = vs.85) .aspx)) cho 'userToken' sau khối sử dụng. Hay điều này được gọi theo cách nào đó bởi 'WindowsIdentity'? – CodeFox
Xin chào Nếu đây là Ứng dụng ASP.NET, phạm vi của điều này là gì? Tôi có nên gọi chức năng này trong mọi trang không? –