2

を使用してユーザーを認証するコマンドラインアプリケーション内で実行していますLogonUser。関数は正しく戻り、正しく失敗します(無効なユーザー名またはパスワード)。LogonUser関数から返されたトークンをWindowsIdentity(IntPtr)コンストラクターに渡すと、次のエラーが発生します。

偽装のトークンが無効です-複製できません。

関数WindowsIdentityを使用してコンストラクターにトークンを渡す前に、トークンを複製してみました。DuplicateTokenこれも失敗します。UACをオンにして、Windows7x64を実行しています。管理者として実行する場合と管理者として実行しない場合の両方で実行すると、同じ結果が得られます。

いくつかの追加情報:

  • ドメインにログインする
  • 使用するLOGON32_LOGON_INTERACTIVE
  • 使用するLOGON32_PROVIDER_DEFAULT
4

3 に答える 3

1

以下はあなたのために働きますか、それとも問題を再現しますか?

[DllImport("advapi32.dll", SetLastError = true)]
private static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);

// ...

IntPtr token;
LogonUser(Username, Domain, Password, 8, 0, out token)

WindowsIdentity wi;
wi = new WindowsIdentity(token);
于 2011-02-24T15:30:48.383 に答える
1

これは結局環境になりました。ドメインに対して認証しようとしているときのDNSの問題。開発ボックスをリセットすると、問題が修正されました。

于 2011-03-01T16:31:20.173 に答える
1

.Net Framework 4でコンパイルされたコードでのみ同じエラーが発生しました。以前のすべてのバージョンでコンパイルされた場合、エラーは発生しませんでした。

このコードは.net4で失敗していました:

using(WindowsIdentity identity = new WindowsIdentity(accessToken))
    context = identity.Impersonate();

しかし、私はこれが機能することを発見しました:

context = WindowsIdentity.Impersonate(accessToken);
于 2012-03-27T15:30:02.890 に答える