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 要求のターゲットにすることはできません。上位レベルのドライバーは、デバイス ドライバーのコントローラー オブジェクトにデバイス オブジェクトを接続またはアタッチできないことに注意してください。
コントローラー オブジェクト内の文書化されていないフィールドは、アクセス不可と見なす必要があります。 オブジェクト フィールドの場所に依存しているドライバーや、文書化されていないフィールドへのアクセスを持つドライバーは、移植性が維持されず、時間の経過と共に他のドライバーと相互運用できない可能性があります。
要件 | 価値 |
---|---|
ヘッダー | ntddk.h (Ntddk.h を含む) |
IoCreateController の