Freigeben über


CONTROLLER_OBJECT-Struktur (ntddk.h)

Ein Controllerobjekt stellt einen Hardwareadapter oder Controller mit homogenen Geräten dar, die die eigentlichen Ziele für E/A-Anforderungen sind. Ein Controllerobjekt kann verwendet werden, um die E/A eines Gerätetreibers mit den Zielgeräten über seinen Hardwareadapter/Controller zu synchronisieren.

Ein Controllerobjekt ist teilweise undurchsichtig. Treiberautoren müssen über ein bestimmtes Feld bescheid wissen, das dem Controllerobjektobjekt zugeordnet ist, da ihre Treiber über den von IoCreateController zurückgegebenen Controllerobjektzeiger auf dieses Feld zugreifen. Auf das folgende Feld in einem Controllerobjekt kann der erstellende Treiber zugreifen.

Syntax

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

Member

Type

Size

ControllerExtension

Zeiger auf die Controllererweiterung. Die Struktur und der Inhalt der Controllererweiterung sind treiberdefiniert. Die Größe wird vom Treiber bestimmt, die im Aufruf von IoCreateController des Treibers angegeben wird. In der Regel behalten Treiber den allgemeinen Zustand über E/A-Vorgänge in der Controllererweiterung und den gerätespezifischen Zustand über E/A für ein Zielgerät in der entsprechenden Geräteerweiterung bei.

DeviceWaitQueue

Spare1

Spare2

Hinweise

Die meisten Treiberroutinen, die IRPs verarbeiten, erhalten einen Zeiger auf das Zielgerätobjekt. Daher speichern Gerätetreiber, die Controllerobjekte verwenden, häufig den von IoCreateController zurückgegebenen Controllerobjektzeiger in jeder Geräteerweiterung.

Beachten Sie, dass ein Controllerobjekt keinen Namen hat, sodass es nicht das Ziel einer E/A-Anforderung sein kann, und dass treiber auf höherer Ebene keine Verbindung herstellen oder ihre Geräteobjekte an das Controllerobjekt eines Gerätetreibers anfügen können.

Nicht dokumentierte Felder in einem Controllerobjekt sollten als nicht zugänglich betrachtet werden. Treiber mit Abhängigkeiten von Objektfeldstandorten oder Zugriff auf nicht dokumentierte Felder bleiben möglicherweise nicht portabel und interoperabel mit anderen Treibern im Laufe der Zeit.

Anforderungen

Anforderung Wert
Header ntddk.h (include Ntddk.h)

Weitere Informationen

IoCreateController