IO_SESSION_STATE_NOTIFICATION 構造体 (wdm.h)

IO_SESSION_STATE_NOTIFICATION構造体には、ドライバーがセッション イベントの通知を受信するために登録するときに、カーネル モード ドライバーが IoRegisterContainerNotification ルーチンに提供する情報が含まれています。

構文

typedef struct _IO_SESSION_STATE_NOTIFICATION {
  ULONG Size;
  ULONG Flags;
  PVOID IoObject;
  ULONG EventMask;
  PVOID Context;
} IO_SESSION_STATE_NOTIFICATION, *PIO_SESSION_STATE_NOTIFICATION;

メンバー

Size

IO_SESSION_STATE_NOTIFICATION構造体のサイズ (バイト単位)。

Flags

現在、このメンバーに対してフラグは定義されていません。 0 に設定します。

IoObject

ドライバーが所有する I/O オブジェクトへのポインター。 このメンバーは、 DEVICE_OBJECTDRIVER_OBJECT、または FILE_OBJECT構造体を 指すことができます。 I/O オブジェクトは、登録の有効期間にわたって有効なままである必要があります。 登録済みのデバイス オブジェクトを削除する前に、登録済みドライバーをアンロードするか、登録済みのファイル オブジェクトを閉じる前に、 IoUnregisterContainerNotification ルーチンを呼び出して登録を取り消します。 ドライバーは、複数の I/O オブジェクトの同時登録を維持できますが、同じ I/O オブジェクトに対して複数のアクティブな登録を作成することはできません。

EventMask

セッション イベントのビットをマスクします。 これらのマスク ビットは、ドライバーが通知を要求するイベントを示します。

セッション イベントの通知を受信するために登録するために、カーネル モード ドライバーは IoRegisterContainerNotification ルーチンを呼び出します。 ドライバーが通知を受信するセッション イベントを指定するには、ドライバーは、1 つ以上のIO_SESSION_STATE_XXX 定数のビットごとの OR にこの構造体の EventMask メンバーを設定します。

このメンバーを、次の IO_SESSION_STATE_XXX 定数の 1 つ以上のビットごとの OR に設定します。

意味
IO_SESSION_STATE_ALL_EVENTS
0xffffffff
すべてのセッション イベントの通知を送信します。
IO_SESSION_STATE_CREATION_EVENT
0x00000001
ユーザー セッションが作成されたときに通知を送信します。
IO_SESSION_STATE_TERMINATION_EVENT
0x00000002
ユーザー セッションが終了したときに通知を送信します。
IO_SESSION_STATE_CONNECT_EVENT
0x00000004
ユーザー セッションが接続されたときに通知を送信します。
IO_SESSION_STATE_DISCONNECT_EVENT
0x00000008
ユーザー セッションが切断されたときに通知を送信します。
IO_SESSION_STATE_LOGON_EVENT
0x00000010
ユーザーがセッションにログオンしたときに通知を送信します。
IO_SESSION_STATE_LOGOFF_EVENT
0x00000020
ユーザーがセッションからログオフしたときに通知を送信します。
IO_SESSION_STATE_VALID_EVENT_MASK
0x0000003f
任意の種類のセッション イベントが発生したときに通知を送信します。

Context

ドライバーが特定のセッション通知登録のプライベート データを格納できるコンテキスト バッファーへのポインター。 I/O マネージャーは、このポインターをドライバーの通知コールバック ルーチン ( IoRegisterContainerNotification ルーチンの CallbackFunction パラメーターで指定) に渡します。 I/O マネージャーは 、コンテキスト ポインターの検証や、指すバッファーへのアクセスを試みません。 ドライバーがコンテキスト バッファーを必要としない場合、このメンバーは NULL にすることができます

注釈

この構造体は、 IoRegisterContainerNotification ルーチンによって使用されます。 IoRegisterContainerNotification を呼び出すドライバーは、この構造体を使用して、登録対象のセッション イベント通知を指定します。

セッションごとのデバイス オブジェクトは、特定のユーザー セッションのみがアクセスできるデバイスを表します。 ドライバーがセッションごとのデバイス オブジェクトであるデバイス オブジェクトを指すように IoObject メンバーを設定した場合、 IoRegisterContainerNotification は、デバイス オブジェクトによって表されるセッションで発生したイベントの通知のみを受信するようにドライバーを登録します。 IoObject がセッションごとのデバイス オブジェクトではないデバイス オブジェクトを指している場合、または IoObject がデバイス オブジェクトではないオブジェクトを指している場合、IoRegisterContainerNotification はドライバーを登録して、コンピューター上のすべてのセッションで発生するイベントの通知を受信します。

デバイス オブジェクトがセッションごとのデバイス オブジェクトであるかどうかを判断するために、ドライバーは IoGetDevicePropertyData ルーチンを呼び出して、デバイス オブジェクトのプロパティ ストア内 のDEVPKEY_Device_SessionId プロパティ キーに対してクエリを実行できます。 DEVPKEY_Device_SessionId プロパティが存在し、プロパティの値が 0 以外のターミナル サービス セッション識別子に設定されている場合、デバイス オブジェクトはセッションごとのデバイス オブジェクトです。 詳細については、「 DEVPKEY_Device_SessionId」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 7 以降のバージョンの Windows オペレーティング システムでサポートされています。
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h、Fltkernel.h を含む)

こちらもご覧ください

DEVICE_OBJECT

DEVPKEY_Device_SessionId

DRIVER_OBJECT

FILE_OBJECT

IoGetDevicePropertyData

IoRegisterContainerNotification