IoRegisterContainerNotification 関数 (wdm.h)

IoRegisterContainerNotification ルーチンは、指定したイベント クラスに関する通知を受け取るカーネル モード ドライバーを登録します。

構文

NTSTATUS
IoRegisterContainerNotification(
    _In_ IO_CONTAINER_NOTIFICATION_CLASS NotificationClass,
    _In_ PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction,
    _In_reads_bytes_opt_(NotificationInformationLength) PVOID NotificationInformation,
    _In_ ULONG NotificationInformationLength,
    _Out_ PVOID * CallbackRegistration
    );

パラメーター

[in] NotificationClass

呼び出し元 (ドライバー) が通知を要求するイベントのクラスを指定します。 このパラメーターを次のIO_CONTAINER_NOTIFICATION_CLASS列挙値 設定します。

  • IoSessionStateNotification

詳細については、「解説」を参照してください。

[in] CallbackFunction

呼び出し元 (ドライバー) によって実装されるコールバック関数へのポインター。 I/O マネージャーはこの関数を呼び出して、 NotificationClass によって示されるクラスのイベントが発生したときに呼び出し元に通知します。 NotificationClass = IoSessionStateNotification の場合、このパラメーターは呼び出し元から提供されたIO_SESSION_NOTIFICATION_FUNCTION関数へのポインターです。 ただし、呼び出し元は、パラメーター型と一致するように、この関数ポインターを型PIO_CONTAINER_NOTIFICATION_FUNCTIONにキャストする必要があります。 詳細については、「解説」を参照してください。

[in, optional] NotificationInformation

NotificationClass で指定されたクラスのイベントの通知情報構造体を含む、呼び出し元によって割り当てられたバッファーへのポインター。 NotificationClass = IoSessionStateNotification の場合、NotificationInformation はIO_SESSION_STATE_NOTIFICATION構造体を指します。 呼び出し元は 、IoRegisterContainerNotification を呼び出す前に、この構造体に入力する必要があります。 この呼び出し中、 IoRegisterContainerNotification は、この構造体からデータをコピーします。I/O マネージャーは、呼び出しが返された後、構造体のドライバーのコピーにアクセスしません。

[in] NotificationInformationLength

NotificationInformation によって指されるバッファーに含まれる通知情報構造体のサイズ (バイト単位)。 NotificationClass = IoSessionStateNotification の場合は、このパラメーターを sizeof(IO_SESSION_STATE_NOTIFICATION) に設定します。

[out] CallbackRegistration

このルーチンがコンテナー通知登録オブジェクトのアドレスを書き込む場所へのポインター。 このオブジェクトは、I/O マネージャーが呼び出し元のコンテナー通知登録に関する情報を格納する不透明なシステム オブジェクトです。 通知が不要になった場合、呼び出し元はこのオブジェクト ポインターを IoUnregisterContainerNotification ルーチンに渡すことで登録を取り消します。

戻り値

呼び出しが成功した場合、IoRegisterContainerNotification はSTATUS_SUCCESSを返します。 エラーの戻り値として考えられるのは、次のとおりです。

リターン コード 説明
STATUS_INVALID_PARAMETER_1 Parameter NotificationClass は、有効な IO_CONTAINER_NOTIFICATION_CLASS 列挙定数ではありません。
STATUS_INVALID_PARAMETER_3 NotificationInformation によって指されている構造体内の情報が正しくありません。
STATUS_INVALID_PARAMETER_4 Parameter NotificationInformationLength は、指定された NotificationClass パラメーター値で使用するために必要な通知情報構造体のサイズと等しくありません。
STATUS_ALREADY_COMMITTED ドライバーは、指定された I/O オブジェクトに関連付けられているイベントの NotificationClass 通知を受信するために既に登録されています。
STATUS_INSUFFICIENT_RESOURCES オペレーティング システムには、要求された登録を作成するためのリソースが不足しています。

注釈

このルーチンは、さまざまなイベント クラスのイベントの通知をサポートする可能性があります。 Windows 7 では、このルーチンは IoSessionStateNotification 通知のみをサポートします。この通知は、ドライバーが関心を持っているユーザー セッションの状態の変更をカーネル モード ドライバーに通知します。 ユーザー モード アプリケーションの場合、 WTSRegisterSessionNotification 関数は同様のロールを満たします。

CallbackFunction パラメーターの関数ポインター型は、次のように定義されます。

typedef NTSTATUS
  (*PIO_CONTAINER_NOTIFICATION_FUNCTION)(
    );

呼び出し元は、 CallbackFunction パラメーター型と一致するように、コールバック関数ポインターをこの型にキャストする必要があります。 IoRegisterContainerNotification は、 NotificationClass パラメーターからコールバック関数ポインターの実際の型を決定します。 NotificationClass = IoSessionStateNotification の場合、CallbackFunctionIO_SESSION_NOTIFICATION_FUNCTION関数を指します。

要件

要件
サポートされている最小のクライアント Windows 7 以降のバージョンの Windows オペレーティング システムで使用できます。
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h、Fltkernel.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= APC_LEVEL

こちらもご覧ください

IO_CONTAINER_NOTIFICATION_CLASS

IO_SESSION_NOTIFICATION_FUNCTION

IO_SESSION_STATE_NOTIFICATION

IoUnregisterContainerNotification

WTSRegisterSessionNotification