IOCTL_AVC_CLASS IOCTL (avc.h)
Der IOCTL_AVC_CLASS E/A-Steuerungscode wird nur im Kernelmodus unterstützt, wobei die IRP_MJ_INTERNAL_DEVICE_CONTROL Verteiler verwendet wird.
Avc.sys unterstützt je nach Instanztyp (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 (einem Peer oder einer nichtvirtualen Instanz) oder GUID_VIRTUAL_AVC_CLASS (einer virtuellen Instanz) auf, und verwendet dann IoSetDeviceInterfaceState entsprechend für den gestarteten oder beendeten Zustand des Treibers.
Peerinstanzen von avc.sys registrieren die durch GUID_AVC_CLASS identifizierte Geräteschnittstelle. Diese Schnittstelle unterstützt einen E/A-Steuerelementcode, 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 von avc.sys registrieren die durch GUID_VIRTUAL_AVC_CLASS identifizierte Geräteschnittstelle. Diese Schnittstelle unterstützt vier E/A-Steuercodes:
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 einschränkungen für ihre Verwendung haben. 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 sie für GUID_VIRTUAL_AVC_CLASS Instanzen von avc.sysunterstützt wird.
Die IOCTL_AVC_CLASS Funktionscodes (und alle Einschränkungen) werden in jedem Funktionscode beschrieben.
Weitere Informationen zu IRPs und IOCTLs finden Sie unter Handling IRPs.
Hauptcode
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 Kopfzeile, wie im folgenden Beispiel dargestellt:
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 Function--Element. Dieses Element muss auf den gewünschten Funktionscode aus der AVC_FUNCTION-Enumeration festgelegt werden.
Die AVC_MULTIFUNC_IRB-Struktur enthält ein Union-Element, das 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 des Abschlusses der Funktion füllt der Untereinheitstreiber bestimmte Untermitglieder der Vereinigung innerhalb der Struktur mit Informationen für den Treiber aus. Die zurückgegebenen Informationen werden mit jeder Anforderung dokumentiert.
Statusblock
Die Informationen, die der AV/C-Protokolltreiber im I/O-Statusblock (Irp->IoStatus.Status) zurückgibt, wird bei jeder Anforderung dokumentiert.
Bemerkungen
Die meisten AV/C-Funktionen müssen IRQL = PASSIVE_LEVEL genannt werden. Einige werden unter IRQL-<= DISPATCH_LEVEL aufgerufen. Die jeweilige IRQL ist in jeder AV/C-Funktion dokumentiert.
Anforderungen
Anforderung | Wert |
---|---|
Header- | avc.h (include Avc.h) |