LogonUserW 関数 (winbase.h)
LogonUser 関数は、ユーザーをローカル コンピューターにログオンしようとします。 ローカル コンピューターは、LogonUser
構文
BOOL LogonUserW(
[in] LPCWSTR lpszUsername,
[in, optional] LPCWSTR lpszDomain,
[in, optional] LPCWSTR lpszPassword,
[in] DWORD dwLogonType,
[in] DWORD dwLogonProvider,
[out] PHANDLE phToken
);
パラメーター
[in] lpszUsername
ユーザーの名前を指定する null で終わる文字列へのポインター。 これは、ログオンするユーザー アカウントの名前です。
[in, optional] lpszDomain
アカウント データベースに lpszUsername アカウントが含まれているドメインまたはサーバーの名前を指定する null で終わる文字列へのポインター。 このパラメーターが NULL
[in, optional] lpszPassword
lpszUsernameで指定されたユーザー アカウントのプレーンテキスト パスワード
[in] dwLogonType
実行するログオン操作の種類。 このパラメーターには、Winbase.h で定義されている次のいずれかの値を指定できます。
価値 | 意味 |
---|---|
|
このログオンの種類は、プロセスがユーザーの代わりに直接介入することなく実行されるバッチ サーバーを対象としています。 この種類は、メールや Web サーバーなど、一度に多数のプレーンテキスト認証試行を処理するパフォーマンスの高いサーバー用でもあります。 |
|
このログオンの種類は、ターミナル サーバー、リモート シェル、または同様のプロセスによってログオンしているユーザーなど、コンピューターを対話形式で使用するユーザーを対象としています。 このログオンの種類には、切断された操作のログオン情報のキャッシュに追加の費用がかかります。そのため、メール サーバーなどの一部のクライアント/サーバー アプリケーションでは不適切です。 |
|
このログオンの種類は、ハイ パフォーマンス サーバーがプレーンテキスト パスワードを認証することを目的としています。 LogonUser 関数は、このログオンの種類の資格情報をキャッシュしません。 |
|
このログオンの種類では、認証パッケージ内の名前とパスワードが保持されます。これにより、サーバーはクライアントの偽装中に他のネットワーク サーバーに接続できます。 サーバーは、クライアントからプレーンテキストの資格情報を受け入れ、LogonUser |
|
このログオンの種類により、呼び出し元は現在のトークンを複製し、送信接続の新しい資格情報を指定できます。 新しいログオン セッションは同じローカル識別子を持ちますが、他のネットワーク接続には異なる資格情報を使用します。
このログオンの種類は、LOGON32_PROVIDER_WINNT50 ログオン プロバイダーでのみサポートされます。 注: 2023 年 1 月の時点で、グループ管理サービス アカウント (gMSA) でLOGON32_LOGON_NEW_CREDENTIALS ログオンの種類を使用することはできません。 |
|
サービスの種類のログオンを示します。 指定されたアカウントでサービス特権が有効になっている必要があります。 |
|
GINA はサポートされなくなりました。
Windows Server 2003 および Windows XP: このログオンの種類は、コンピューターを対話形式で使用するユーザーにログオンする GINA DLL 用です。 このログオンの種類では、ワークステーションのロックが解除された日時を示す一意の監査レコードを生成できます。 |
[in] dwLogonProvider
ログオン プロバイダーを指定します。 このパラメーターには、次のいずれかの値を指定できます。
価値 | 意味 |
---|---|
|
システムの標準ログオン プロバイダーを使用します。 ドメイン名 NULL を渡し、ユーザー名が UPN 形式でない場合を除き、既定の セキュリティ プロバイダー はネゴシエートされます。 この場合、既定のプロバイダーは NTLM です。 |
|
ネゴシエート ログオン プロバイダーを使用します。 |
|
NTLM ログオン プロバイダーを使用します。 |
[out] phToken
指定したユーザーを表すトークンへのハンドルを受け取るハンドル変数へのポインター。
返されたハンドルは、ImpersonateLoggedOnUser 関数の呼び出しで使用できます。
ほとんどの場合、返されるハンドルは、CreateProcessAsUser 関数の呼び出しで使用できる プライマリ トークン です。 ただし、LOGON32_LOGON_NETWORK フラグを指定した場合、LogonUser は、CreateProcessAsUser で使用できない 偽装トークンDuplicateTokenEx を呼び出してプライマリ トークンに変換しない限り返します。
このハンドルが不要になったら、CloseHandle 関数を呼び出してハンドルを閉じます。
戻り値
関数が成功した場合、関数は 0 以外の値を返します。
関数が失敗すると、0 が返されます。 拡張エラー情報を取得するには、GetLastError
備考
LOGON32_LOGON_NETWORK ログオンの種類は最速ですが、次の制限があります。
- この関数は、プライマリ トークンではなく、
偽装トークンを返します。 このトークンは、CreateProcessAsUser 関数では直接使用できません。 ただし、 DuplicateTokenEx 関数を呼び出してトークンをプライマリ トークンに変換し、それを CreateProcessAsUserで使用できます。 - トークンをプライマリ トークンに変換し、CreateProcessAsUser
で使用してプロセスを開始した場合、新しいプロセスはリダイレクターを介してリモート サーバーやプリンターなどの他のネットワーク リソースにアクセスできません。 例外として、ネットワーク リソースがアクセス制御されていない場合、新しいプロセスでアクセスできるようになります。
Passport アカウントにログオンしている場合を除き、この関数にはSE_TCB_NAME特権は必要ありません。
lpszUsername
少なくとも 1 つのトークンが存在する場合、ユーザーはログオンと見なされます。 CreateProcessAsUser
LogonUser 呼び出しが成功した場合、システムは、プロバイダーの NPLogonNotify エントリ ポイント関数を呼び出すことによってログオンが発生したことをネットワーク プロバイダーに通知します。
例
LocalService トークンは、次のコードを使用して生成できます。
LogonUser(L"LocalService", L"NT AUTHORITY", NULL, LOGON32_LOGON_SERVICE, LOGON32_PROVIDER_DEFAULT, &hToken)
手記
winbase.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして LogonUser を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows XP [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows Server 2003 [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | winbase.h (Windows.h を含む) |
ライブラリ | Advapi32.lib |
DLL | Advapi32.dll |
関連項目
CloseHandle の
CreateProcessAsUser の
DuplicateTokenEx の