2010-05-26 59 views
0

我使用以下代碼通過Windows身份驗證驗證用戶是否適合我的winform應用程序。這適用於Windows XP,但當用戶使用Windows 2000時,它說用戶名或密碼是有效的。用於Windows 2000的winforms的Windows身份驗證

如何做到這一點在Windows 2000中。此外,我如何檢測用戶是否正在使用Windows XP或Windows 2000

 [System.Runtime.InteropServices.DllImport("advapi32.dll")] 
    public static extern bool LogonUser(string userName, string domainName, string password, int LogonType, int LogonProvider, ref IntPtr phToken); 

    public bool IsValidateCredentials(string userName, string password, string domain) 
    { 
     IntPtr tokenHandler = IntPtr.Zero; 
     bool isValid = LogonUser(userName, domain, password, 2, 0, ref tokenHandler); 
     return isValid; 
    } 

感謝

+0

你應該通過'3'而不是'2'。 – SLaks 2010-05-26 14:43:23

回答

0

正如documentation for LogonUser指出:

Windows 2000:如果您需要驗證 憑據,請使用SSPI API。對於 有關使用SSPI API的信息, 請參閱How To Validate User Credentials on Microsoft Operating Systems。使用 LogonUserLogonUserEx函數 如果您需要使用返回的訪問令牌和 訪問資源,由 模擬用戶。

要檢查運行的Windows版本,請檢查Environment.OSVersion.Version

Windows 2000是5.0; XP是5.2。

此外,您需要需要通過致電CloseHandle關閉句柄。

+0

感謝您的鏈接...第二個鏈接中的示例代碼,對我來說只是一個保鏢...我認爲這是VC++,我是0 ...我是否需要嘗試轉換整個東西或有沒有一種簡單的方法在C#中執行它... – 2010-05-26 14:30:02

+0

是的;這就是C++。我現在沒有時間將其轉換爲C#。 – SLaks 2010-05-26 14:32:32

+0

希望我沒有被誤解......我從來沒有要求你將它轉換爲C#... – 2010-05-26 14:37:25