Freigeben über


Behandeln von SCSI-Pass-Through-Anforderungen

Ein Klassentreiber, der eine IOCTL_SCSI_PASS_THROUGH - oder eine IOCTL_SCSI_PASS_THROUGH_DIRECT-Anforderung generiert, ist für Folgendes verantwortlich:

  • Festlegen der Länge des Benutzerpuffers unter Parameters.DeviceIoControl.InputBufferLength auf mindestens sizeof(SCSI_PASS_THROUGH) oder sizeof(SCSI_PASS_THROUGH_DIRECT)

  • Einrichten des E/A-Stapelspeicherorts des Speicherporttreibers wie gewohnt

  • Festlegen der MinorFunction im IRP auf IRP_MJ_DEVICE_CONTROL, wodurch die Anforderung als von einem Speicherklassentreiber verarbeitet wurde.

Nach Erhalt einer IOCTL_SCSI_PASS_THROUGH- oder IOCTL_SCSI_PASS_THROUGH_DIRECT-Anforderung von einem Treiber auf höherer Ebene ist die DispatchDeviceControl-Routine eines Speicherklassentreibers für die Überprüfung der Gültigkeit des eingebetteten SCSI-Befehls (CDB) verantwortlich und, wenn der Befehl für sein Gerät gültig ist, die Anforderung an den Speicherporttreiber zu senden.

Wenn für den E/A-Stapelspeicherort des Porttreibers für eine IOCTL_SCSI_PASS_THROUGH- oder IOCTL_SCSI_PASS_THROUGH_DIRECT-Anforderung das Feld MinorFunction nicht mit IRP_MJ_DEVICE_CONTROL festgelegt ist, geht der Porttreiber davon aus, dass die Anforderung direkt von einer Anwendung stammt und kein Klassentreiber für den Zielgerätetyp vorhanden ist. Es ist ein Anwendungsfehler, eine solche Anforderung direkt an den Porttreiber für ein Gerät zu senden, das von einem Speicherklassentreiber beansprucht wurde.

Der Porttreiber überprüft nicht die Gültigkeit des in eine solche Passthroughanforderung eingebetteten SCSI-Befehls.