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 の場合、CallbackFunction はIO_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