IO_SESSION_NOTIFICATION_FUNCTION コールバック関数 (wdm.h)
IO_SESSION_NOTIFICATION_FUNCTION関数の種類は、ドライバーが関心のあるユーザー セッションの状態の変更の通知を受け取るコールバック ルーチンを定義します。
構文
IO_SESSION_NOTIFICATION_FUNCTION IoSessionNotificationFunction;
NTSTATUS IoSessionNotificationFunction(
[in] PVOID SessionObject,
[in] PVOID IoObject,
[in] ULONG Event,
[in] PVOID Context,
[in] PVOID NotificationPayload,
[in] ULONG PayloadLength
)
{...}
パラメーター
[in] SessionObject
ユーザー セッションに関する情報を含む、不透明なシステム オブジェクトへのポインター。 ドライバーは、このポインター値を ContainerObject パラメーター値として IoGetContainerInformation ルーチンに渡すことができます。
[in] IoObject
ドライバーが所有する I/O オブジェクトへのポインター。 このパラメーターは、ドライバーがセッション イベントの通知を受け取るために以前に登録したときに IoRegisterContainerNotification ルーチンにドライバーが指定した I/O オブジェクト ポインターです。 IoRegisterContainerNotification ルーチンの NotificationInformation パラメーターは、IoObject メンバーが I/O オブジェクトを指すIO_SESSION_STATE_NOTIFICATION構造体を指します。
[in] Event
通知コールバックの原因となったセッション イベントを示す IO_SESSION_EVENT 列挙定数。
[in] Context
ドライバーがセッション イベントの通知を受け取るために登録したときに、ドライバーが IoRegisterContainerNotification ルーチンに以前に指定したコンテキスト値。 IoRegisterContainerNotification 呼び出しで、ドライバーは Context メンバーにコンテキスト値が含まれるIO_SESSION_STATE_NOTIFICATION構造体へのポインターを提供しました。
[in] NotificationPayload
IO_SESSION_CONNECT_INFO構造体を含むペイロード バッファーへのポインター。
[in] PayloadLength
NotificationPayload によって指されるバッファーのサイズ (バイト単位)。 バッファー サイズが、Wdm.h ヘッダー ファイルで定義IO_SESSION_MAX_PAYLOAD_SIZE定数値を超える必要はありません。
戻り値
ルーチンが成功した場合は、STATUS_SUCCESSを返す必要があります。 それ以外の場合は、Ntstatus.h ヘッダー ファイルで定義されているエラー状態値のいずれかを返す必要があります。
注釈
カーネル モード ドライバーは、このルーチンを実装します。 I/O マネージャーはこのルーチンを呼び出して、セッション イベントをドライバーに通知します。
セッション イベントの通知を受け取るために、ドライバーは IoRegisterContainerNotification ルーチンを呼び出し、ドライバーのIO_SESSION_NOTIFICATION_FUNCTION ルーチンを指すこのルーチンの CallbackFunction パラメーターを設定します。 ドライバーが IoRegisterContainerNotification に渡す I/O オブジェクトは、ドライバーが特定のユーザー セッションのイベントまたはすべてのセッションのイベントの通知を受信するかどうかを決定します。 詳細については、「 IO_SESSION_STATE_NOTIFICATION」を参照してください。
例
I/O セッション通知ルーチンを定義するには、まず、定義するコールバック ルーチンの種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数の種類のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、ドライバー、静的ドライバー検証ツール (SDV)、およびその他の検証ツールのコード分析でエラーが検出され、Windows オペレーティング システム用のドライバーを記述するための要件になります。
たとえば、 という名前 MyIoSessionNotification
の I/O セッション通知ルーチンを定義するには、次のコード例に示すように、IO_SESSION_NOTIFICATION_FUNCTION型を使用します。
IO_SESSION_NOTIFICATION_FUNCTION MyIoSessionNotification;
次に、コールバック ルーチンを次のように実装します。
_Use_decl_annotations_
NTSTATUS
MyIoSessionNotification(
PVOID SessionObject,
PVOID IoObject,
ULONG Event,
PVOID Context,
PVOID NotificationPayload,
ULONG PayloadLength
)
{
// Function body
}
IO_SESSION_NOTIFICATION_FUNCTION関数の種類は、Wdm.h ヘッダー ファイルで定義されます。 コード分析ツールを実行するときにエラーをより正確に識別するには、必ず注釈を _Use_decl_annotations_
関数定義に追加してください。 注釈により _Use_decl_annotations_
、ヘッダー ファイル内のIO_SESSION_NOTIFICATION_FUNCTION関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「 WDM ドライバーの関数ロール型を使用して関数を宣言する」を参照してください。 の詳細 _Use_decl_annotations_
については、「 関数の動作に注釈を付ける」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 7 以降のバージョンの Windows オペレーティング システムでサポートされています。 |
対象プラットフォーム | デスクトップ |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h、Fltkernel.h を含む) |
IRQL | IRQL <= APC_LEVELで呼び出されます。 |