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 オペレーティング システムでサポートされています。 |
| ターゲット プラットフォーム の | デスクトップ |
| ヘッダー | wdm.h (Wdm.h、Ntddk.h、Ntifs.h、Fltkernel.h を含む) |
| IRQL | IRQL <= APC_LEVEL で呼び出されます。 |
関連項目
IoGetContainerInformation の
IoRegisterContainerNotification の