0

次のコードを使用して、winform アプリケーションの Windows 認証を通じてユーザーを検証します。これは Windows XP では正常に機能しますが、ユーザーが Windows 2000 を使用している場合、ユーザー ID またはパスワードが無効であると表示されます。

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;
    }

ありがとう

4

1 に答える 1

0

のドキュメントにLogonUser記載されているとおり:

Windows 2000 : 資格情報を検証する必要がある場合は、SSPI API を使用してください。SSPI API の使用方法については、How To Validate User Credentials on Microsoft Operating Systems を参照してください。返されたアクセス トークンを使用してユーザーを偽装し、リソースにアクセスする必要がある場合は、関数LogonUserまたは関数を使用します。LogonUserEx

実行している Windows のバージョンを確認するには、 を確認してくださいEnvironment.OSVersion.Version

Windows 2000 は 5.0 です。XPは5.2です。

また、 を呼び出してハンドルを閉じる必要CloseHandleがあります。

于 2010-05-26T14:07:12.943 に答える