Msv1_0SubAuthenticationFilter関数 (subauth.h)

Msv1_0SubAuthenticationFilter関数は、ドメイン コントローラーに固有のユーザー ログオン認証を実行します。

この関数は、ユーザーのログオン データと、ドメイン コントローラーの セキュリティ アカウント マネージャー (SAM) データベースでユーザーに対して見つかったすべての情報を受け取ります。

この関数は、Kerberos およびMSV1_0認証パッケージで使用するカスタムサブ認証パッケージ DLL によって実装されます。

構文

NTSTATUS Msv1_0SubAuthenticationFilter(
  [in]  NETLOGON_LOGON_INFO_CLASS LogonLevel,
  [in]  PVOID                     LogonInformation,
  [in]  ULONG                     Flags,
  [in]  PUSER_ALL_INFORMATION     UserAll,
  [out] PULONG                    WhichFields,
  [out] PULONG                    UserFlags,
  [out] PBOOLEAN                  Authoritative,
  [out] PLARGE_INTEGER            LogoffTime,
  [out] PLARGE_INTEGER            KickoffTime
);

パラメーター

[in] LogonLevel

LogonInformation で指定された情報のレベルを指定します。 通常、このパラメーターは NetlogonInteractiveInformation に設定されます。

[in] LogonInformation

NETLOGON_LOGON_IDENTITY_INFO構造体へのポインター。 この構造体のメンバーには、ログオンしているユーザーに関する情報が含まれています。 LogonDomainName メンバーは無視されます。

[in] Flags

省略可能。 ログオンの状況を説明するフラグが含まれています。 このパラメーターには、次の値のいずれかを指定できます。

意味
MSV1_0_PASSTHRU
パススルー認証。 ユーザーがこのマシンに接続していません。
MSV1_0_GUEST_LOGON
これは、ゲスト アカウントを使用したログオンの再試行です。

[in] UserAll

SAM データベースから返されたユーザーの説明を含む USER_ALL_INFORMATION 構造体へのポインター。

[out] WhichFields

SAM データベースに書き戻す必要がある USER_ALL_INFORMATION 構造体のメンバーを返します。 これらのメンバーは、Msv1_0SubAuthenticationFilterが成功 返す場合にのみ書き込まれます。 次の値のみが有効です。

意味
USER_ALL_PARAMETERS
UserAll 構造体の Parameters メンバーに含まれるデータを SAM データベースに書き戻します。

Parameters メンバーのUNICODE_STRING バッファーのサイズが変更された場合、Msv1_0SubAuthenticationFilter MIDL_user_free関数を使用してバッファーを削除し、MIDL_user_allocate関数を使用して再割り当てを行う必要があります。

[out] UserFlags

その関数の ProfileBuffer パラメーターの LsaLogonUser 関数から返される値。 このパラメーターには、次の値のいずれかを指定できます。

意味
LOGON_GUEST
これはゲスト ログオンでした。
LOGON_NOENCRYPTION
呼び出し元が暗号化された資格情報を指定しませんでした。
 
メモ 規則により、サブ認証パッケージは UserFlags パラメーターの上位バイトでのみビットを返します。
 

[out] Authoritative

返される状態が元の呼び出し元に返される権限のある状態であるかどうかを示すブール値へのポインター。 返される値が FALSE の場合は、別のドメイン コントローラーでログオン要求を再試行できます。 このパラメーターは、関数呼び出しの戻り値に関係なく、有効な情報を返す必要があります。 このパラメーターは、Kerberos 認証パッケージでは使用されません。

[out] LogoffTime

ユーザーがシステムからログオフする時刻を受け取る値へのポインター。 この時間は、ログオンの有効期間を制御するために使用され、GMT 相対 Windows システム時刻として指定されます。

[out] KickoffTime

ユーザーがシステムからログオフする時刻を受け取る値へのポインター。 この時間は、ログオンの有効期間を制御するために使用され、GMT 相対システム時刻として指定されます。 ユーザーが自動的にログオフされない場合は、次のように大きな正の値を指定します。

KickoffTime->HighPart = 0x7FFFFFFF;
KickoffTime->LowPart = 0xFFFFFFFF;

戻り値

この関数は、次のいずれかの値を返す必要があります。

リターン コード 説明
STATUS_SUCCESS
エラーはありませんでした。
STATUS_ACCOUNT_DISABLED
アカウントが無効である。
STATUS_ACCOUNT_EXPIRED
アカウントの有効期限が切れています。
STATUS_ACCOUNT_LOCKED_OUT
アカウントはロックアウトされています。
STATUS_INVALID_INFO_CLASS
LogonLevel が無効です。
STATUS_INVALID_LOGON_HOURS
現時点では、ユーザーはログオンを許可されていません。
STATUS_INVALID_WORKSTATION
ユーザーは、指定されたワークステーションにログオンする権限がありません。
STATUS_NO_SUCH_USER
指定したユーザーにアカウントがありません。
STATUS_PASSWORD_EXPIRED
パスワードの有効期限が切れています。
STATUS_PASSWORD_MUST_CHANGE
パスワードは、次のログオン時に変更する必要があります。
STATUS_WRONG_PASSWORD
パスワードが無効です。
 

Msv1_0SubAuthenticationFilter関数が Kerberos 認証パッケージで使用されている場合、関数呼び出しで STATUS_SUCCESSが返され、LogoffTime または KickoffTime の 2 つのパラメーターのいずれかが 0 以外の値を持つ場合、この値はチケットの有効期間として使用されます。 一方、両方のパラメーターの値が 0 以外の場合は、これら 2 つの値のうち小さい方が使用されます。

チケットの有効期間に使用される値 ( LogoffTimeKickoffTime の早い方) が既定のチケット有効期間より大きい場合、その値はチケットの最大更新時間として使用されます。 逆に、2 つの値のうち大きい値 ( LogoffTimeKickoffTime の後半) が既定のチケット有効期間より小さい場合、この値はチケットの有効期間として使用されます。 詳細については、「 Microsoft Kerberos」を参照してください。

Kerberos 認証パッケージと共に使用すると、この関数からエラーが返された場合、 キー配布センター (KDC) は Kerberos エラー KDC_ERR_POLICYを返し、状態値は拡張エラー コードとして返されます。

注釈

この関数の実装では、 ライトウェイト ディレクトリ アクセス プロトコル (LDAP) トラフィックを引き起こす操作を実行しないでください。 たとえば、 Active Directory データベースに接続してクエリを実行しないでください。

MSV1_0または Kerberos 認証パッケージがログオンを検証した後、 Msv1_0SubAuthenticationFilter 関数は追加の検証を実行して、ユーザーがネットワーク アカウントにログオンできるかどうかを判断できます。 この関数は、サブ認証パッケージ DLL がドメイン コントローラーのレジストリに 'Auth0' として正しく登録されている場合に呼び出されます。 レジストリ パスは、関数がMSV1_0または Kerberos サブ認証パッケージ DLL 内にあるかどうかによって異なります。

このフィルター ルーチンは、ログオンを続行する必要があることを示すSTATUS_SUCCESS、または追加の検証が失敗したことを示すエラー コードを返す場合があります。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー subauth.h