次の方法で共有


CONTROLLER_OBJECT 構造体 (ntddk.h)

コントローラー オブジェクトは、I/O 要求の実際のターゲットである同種のデバイスを持つハードウェア アダプターまたはコントローラーを表します。 コントローラー オブジェクトを使用すると、デバイス ドライバーの I/O をハードウェア アダプターまたはコントローラーを介してターゲット デバイスに同期できます。

コントローラー オブジェクトは部分的に不透明です。 ドライバーライターは、 IoCreateController によって返されるコントローラー オブジェクト ポインターを介してこのフィールドにアクセスするため、コントローラー オブジェクトに関連付けられている特定のフィールドについて知っている必要があります。 コントローラー オブジェクトの次のフィールドには、作成中のドライバーからアクセスできます。

構文

typedef struct _CONTROLLER_OBJECT {
  CSHORT        Type;
  CSHORT        Size;
  PVOID         ControllerExtension;
  KDEVICE_QUEUE DeviceWaitQueue;
  ULONG         Spare1;
  LARGE_INTEGER Spare2;
} CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;

メンバー

Type

Size

ControllerExtension

コントローラー拡張機能へのポインター。 コントローラー拡張機能の構造と内容は、ドライバーによって定義されます。 サイズはドライバーによって決定され、 IoCreateController へのドライバーの呼び出しで指定されます。 通常、ドライバーは、コントローラー拡張機能での I/O 操作に関する一般的な状態と、対応するデバイス拡張機能のターゲット デバイスの I/O に関するデバイス固有の状態を維持します。

DeviceWaitQueue

Spare1

Spare2

注釈

IRP を処理するほとんどのドライバー ルーチンには、ターゲット デバイス オブジェクトへのポインターが与えられます。 そのため、コントローラー オブジェクトを使用するデバイス ドライバーは、 IoCreateController によって返されるコントローラー オブジェクト ポインターを各デバイス拡張機能に頻繁に格納します。

コントローラー オブジェクトには名前がないため、I/O 要求のターゲットにすることはできません。また、上位レベルのドライバーは、デバイス ドライバーのコントローラー オブジェクトにデバイス オブジェクトを接続またはアタッチできないことに注意してください。

コントローラー オブジェクト内の文書化されていないフィールドは、アクセス不可と見なす必要があります。 オブジェクト フィールドの場所に依存しているドライバーや、ドキュメントに記載されていないフィールドへのアクセスを持つドライバーは、移植性が維持されず、時間の経過と共に他のドライバーと相互運用できない可能性があります。

要件

要件
Header ntddk.h (Ntddk.h を含む)

こちらもご覧ください

IoCreateController