Freigeben über


CONTROLLER_OBJECT Struktur (ntddk.h)

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

Ein Controllerobjekt ist teilweise undurchsichtig. Treiberautoren müssen über ein bestimmtes Feld wissen, das dem Controllerobjekt zugeordnet ist, da ihre Treiber über den Controllerobjektzeiger, der von IoCreateControllerzurückgegeben wird, auf dieses Feld zugreifen. Auf das folgende Feld in einem Controllerobjekt kann auf den erstellenden Treiber zugegriffen werden.

Syntax

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

Angehörige

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 des Treibers an IoCreateControllerangegeben wird. In der Regel verwalten Treiber den allgemeinen Zustand über E/A-Vorgänge in der Controllererweiterung und gerätespezifischen Zustand über E/A für ein Zielgerät in der entsprechenden Geräteerweiterung.

DeviceWaitQueue

Spare1

Spare2

Bemerkungen

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

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

Nicht dokumentierte Felder innerhalb eines Controllerobjekts sollten als nicht zugänglich angesehen werden. Treiber mit Abhängigkeiten von Objektfeldpositionen oder Zugriff auf nicht dokumentierte Felder bleiben im Laufe der Zeit möglicherweise nicht portabel und interoperabel mit anderen Treibern.

Anforderungen

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

Siehe auch

IoCreateController-