Udostępnij przez


Obsługa żądań Pass-Through SCSI

Sterownik klasy, który generuje żądanie IOCTL_SCSI_PASS_THROUGH lub żądanie IOCTL_SCSI_PASS_THROUGH_DIRECT jest odpowiedzialny za następujące kwestie:

  • Ustawianie długości buforu użytkownika w parametrach .DeviceIoControl.InputBufferLength na co najmniej rozmiaru(SCSI_PASS_THROUGH) lub rozmiaru(SCSI_PASS_THROUGH_DIRECT)

  • Ustawianie lokalizacji stosu I/O sterownika portu pamięci w standardowy sposób

  • Ustawienie MinorFunction w IRP na wartość IRP_MJ_DEVICE_CONTROL, co oznacza żądanie jako przetworzone przez sterownik klasy pamięci.

Po otrzymaniu żądania IOCTL_SCSI_PASS_THROUGH lub IOCTL_SCSI_PASS_THROUGH_DIRECT od sterownika wyższego poziomu, sterownik klasy pamięci masowej DispatchDeviceControl jest odpowiedzialny za sprawdzenie poprawności osadzonego polecenia SCSI (CDB) i, jeśli polecenie jest prawidłowe dla jego urządzenia, wysłanie żądania do sterownika portu pamięci masowej.

Jeśli lokalizacja stosu we/wy sterownika portu dla żądania IOCTL_SCSI_PASS_THROUGH lub IOCTL_SCSI_PASS_THROUGH_DIRECT nie ma jego minorFunction pole ustawione z IRP_MJ_DEVICE_CONTROL, sterownik portu zakłada, że żądanie pochodzi bezpośrednio z aplikacji i że żaden sterownik klasy nie istnieje dla typu urządzenia docelowego. Jest to błąd aplikacji, aby wysyłać takie żądanie bezpośrednio do sterownika portu dla urządzenia, którym zarządza sterownik klasy pamięci masowej.

Sterownik portu nie sprawdza poprawności polecenia SCSI osadzonego w takim żądaniu przekazywania.