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