IOCTL_MPIO_PASS_THROUGH_PATH_DIRECT_EX IOCTL (ntddscsi.h)
Die IOCTL_MPIO_PASS_THROUGH_PATH_DIRECT_EX-Steuerungscodeanforderung ist die erweiterte Version der IOCTL_MPIO_PASS_THROUGH_PATH_DIRECT-Anforderung. Diese Anforderung bietet Unterstützung für bidirektionale Datenübertragungen und lässt einen Befehlsdatenblock (COMMAND Data Block, CDB) > mit 16 Bytes zu.
Dieser E/A-Steuerungscode ermöglicht es einer Anwendung oder einem Kerneltreiber, einen SCSI-Befehl an eine bestimmte echte LUN zu senden. Die folgenden Einschränkungen gelten für die Verwendung dieses E/A-Steuerungscodes:
- Wenn ein Klassentreiber für die Pseudo-LUN vorhanden ist, muss die Anwendung die Anforderung an diesen Klassentreiber senden. Daher kann eine Anwendung diese Anforderung nur direkt an eine MPIO senden, wenn kein Klassentreiber für das Gerät vorhanden ist.
- Alle Passthroughanforderungen müssen synchron sein.
- Anwendungen erfordern keine Administratorrechte, um eine Passthrough-Anforderung an ein Gerät zu senden, aber sie müssen Lese-/Schreibzugriff auf das Gerät haben.
- Die Anforderung umfasst eine SCSI-Passthrough-Anforderung (in einer eingebetteten SCSI_PASS_THROUGH_DIRECT-Struktur ) sowie bestimmte Direktiven.
- Die SCSI-Passthrough-Struktur sollte die Anforderungen für diese erfüllen, wie unter SCSI_PASS_THROUGH_DIRECT beschrieben.
- Wenn die Anforderung über den DSM gesendet werden soll, der die echte LUN in Anspruch genommen hat, muss dies angegeben werden. In einem solchen Fall muss die DSM selbst die gleiche reale LUN angeben. Andernfalls schlägt die Anforderung fehl.
- Die Anforderung muss die tatsächliche LUN angeben, die von der Pseudo-LUN in Bezug auf die SCSI-Adresse oder die MPIO-PathId des Ersteren besteht, aber nicht beide.
Hauptcode
Eingabepuffer
Parameters.DeviceIoControl.InputBufferLength gibt die Größe des Puffers in Bytes bei Irp-AssociatedIrp.SystemBuffer> an.
Länge des Eingabepuffers
Der Puffer muss mindestens sizeof(MPIO_PASS_THROUGH_PATH_DIRECT_EX) oder, wenn er von einer 32-Bit-Anwendung in einem 64-Bit-Betriebssystem gesendet wird, sizeof(MPIO_PASS_THROUGH_PATH_DIRECT32_EX) sein.
Ausgabepuffer
Der Porttreiber gibt alle Anforderungsoptimierungsdaten und alle Daten zurück, die vom Gerät an den Puffer bei Irp-AssociatedIrp.SystemBuffer> übertragen werden.
Länge des Ausgabepuffers
SenseInfoLength und DataOutTransferLength in der eingebetteten SCSI_PASS_THROUGH_DIRECT_EX-Struktur werden aktualisiert, um die übertragene Datenmenge anzugeben.
Statusblock
Das Feld Information ist auf die Anzahl der Bytes festgelegt, die im Ausgabepuffer bei Irp-AssociatedIrp.SystemBuffer> zurückgegeben werden. Das Feld Status ist auf STATUS_SUCCESS oder möglicherweise auf STATUS_BUFFER_TOO_SMALL oder STATUS_INVALID_PARAMETER festgelegt, wenn der Eingabelängenwert im eingebetteten SCSI_PASS_THROUGH_DIRECT_EX nicht ordnungsgemäß festgelegt ist.
Anforderungen
Anforderung | Wert |
---|---|
Header | ntddscsi.h (einschließen von Ntddscsi.h) |