Freigeben über


IOCTL_AVC_CLASS IOCTL (avc.h)

Der IOCTL_AVC_CLASS E/A-Steuerungscode wird nur im Kernelmodus mithilfe des IRP_MJ_INTERNAL_DEVICE_CONTROL-Dispatch unterstützt.

Avc.sys unterstützt je nach Typ der instance (Peer oder virtuell) zwei Geräteschnittstellen. Diese Schnittstellen definieren die Funktionalität, die der Treiber für Untereinheitstreiber, andere Treiber und Anwendungen verfügbar macht. Während der Initialisierung ruft avc.sysIoRegisterDeviceInterface entweder mit GUID_AVC_CLASS (Peer oder nichtvirtuelle instance) oder GUID_VIRTUAL_AVC_CLASS (einem virtuellen instance) auf, und verwendet dann IoSetDeviceInterfaceState entsprechend dem Start- oder Beendetzustand des Treibers.

Peerinstanzen vonavc.sys registrieren die von GUID_AVC_CLASS identifizierte Geräteschnittstelle. Diese Schnittstelle unterstützt einen E/A-Steuerungscode, IOCTL_AVC_CLASS, der wiederum mehrere Funktionscodes unterstützt. Untergeordnete Treiber von Peer -avc.sys-Instanzen haben garantiert Zugriff auf diese Schnittstelle über ihr übergeordnetes Geräteobjekt.

Virtuelle Instanzen vonavc.sys registrieren die von GUID_VIRTUAL_AVC_CLASS identifizierte Geräteschnittstelle. Diese Schnittstelle unterstützt vier E/A-Steuerungscodes:

  • IOCTL_AVC_CLASS

  • IOCTL_AVC_UPDATE_VIRTUAL_SUBUNIT_INFO

  • IOCTL_AVC_REMOVE_VIRTUAL_SUBUNIT_INFO

  • IOCTL_AVC_BUS_RESET

Die GUID_AVC_CLASS-Schnittstelle unterstützt alle IOCTL_AVC_CLASS Funktionscodes, obwohl einige ihre Verwendung einschränken. Die GUID_VIRTUAL_AVC_CLASS-Schnittstelle unterstützt jedoch nicht alle IOCTL_AVC_CLASS Funktionscodes. Die Referenzseite für jeden einzelnen Funktionscode gibt an, ob er für GUID_VIRTUAL_AVC_CLASS Instanzen von avc.sysunterstützt wird.

Die IOCTL_AVC_CLASS Funktionscodes (und etwaige Einschränkungen) werden in jedem Funktionscode beschrieben.

Weitere Informationen zu IRPs und IOCTLs finden Sie unter Behandeln von IRPs.

Hauptcode

IRP_MJ_DEVICE_CONTROL

Eingabe-/Ausgabepuffer

Parameter->Others.Argument1 verweist entweder auf eine AVC_COMMAND_IRB-Struktur oder AVC_MULTIFUNC_IRB Struktur. Beide Strukturen enthalten eine AVC_IRB Struktur als Header, wie im folgenden Beispiel veranschaulicht:

typedef struct _AVC_COMMAND_IRB {
  AVC_IRB  Common;
  .
  .
  .
} AVC_COMMAND_IRB, *PAVC_COMMAND_IRB;
typedef struct _AVC_MULTIFUNC_IRB {
  AVC_IRB  Common;
  .
  .
  .
} AVC_MULTIFUNC_IRB, *PAVC_MULTIFUNC_IRB;

Die AVC_IRB-Struktur enthält ein einzelnes Funktionsmember . Dieses Element muss auf den gewünschten Funktionscode aus der AVC_FUNCTION-Enumeration festgelegt werden.

Die AVC_MULTIFUNC_IRB-Struktur enthält einen Union-Member, der die typspezifischen Parameter des Funktions-E/A-Anforderungsblocks für den Funktionscode angibt. Die Parameter und ihre Bedeutungen werden mit jedem Funktionscode dokumentiert.

Parameter->Others.Argument1 verweist auf dieselbe AVC_COMMAND_IRB- oder AVC_MULTIFUNC_IRB-Struktur, die als Eingabe übergeben wurde. Im Rahmen der Ausführung der Funktion füllt der Untereinheitstreiber bestimmte Untermember der Union innerhalb der Struktur mit Informationen für den Treiber aus. Die zurückgegebenen Informationen werden mit jeder Anforderung dokumentiert.

Statusblock

Die Vom AV/C-Protokolltreiber im E/A-Statusblock (Irp-IoStatus.Status>) zurückgegebenen Informationen werden mit jeder Anforderung dokumentiert.

Hinweise

Die meisten AV/C-Funktionen müssen IRQL = PASSIVE_LEVEL genannt werden. Einige können unter IRQL <= DISPATCH_LEVEL aufgerufen werden. Die jeweilige IRQL ist in jeder AV/C-Funktion dokumentiert.

Anforderungen

Anforderung Wert
Header avc.h (include Avc.h)

Weitere Informationen

AVC_COMMAND_IRB

AVC_FUNCTION

AVC_IRB

AVC_MULTIFUNC_IRB

IOCTL_AVC_BUS_RESET

IOCTL_AVC_REMOVE_VIRTUAL_SUBUNIT_INFO

IOCTL_AVC_UPDATE_VIRTUAL_SUBUNIT_INFO