次の方法で共有


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で呼び出されます。

こちらもご覧ください

IO_SESSION_CONNECT_INFO

IO_SESSION_EVENT

IO_SESSION_STATE_NOTIFICATION

IoGetContainerInformation

IoRegisterContainerNotification