共用方式為


處理 SCSI Pass-Through 要求

產生 IOCTL_SCSI_PASS_THROUGH 要求或 IOCTL_SCSI_PASS_THROUGH_DIRECT 要求的類別驅動程式會負責下列事項:

  • 參數.DeviceIoControl.InputBufferLength 的使用者緩衝區長度設定為至少 sizeof(SCSI_PASS_THROUGH) 或 sizeof(SCSI_PASS_THROUGH_DIRECT)

  • 如往常設定記憶體埠驅動程式的 I/O 堆疊位置

  • 將 IRP 中的 MinorFunction 設定為 IRP_MJ_DEVICE_CONTROL,這會將要求標示為已由記憶體類別驅動程式處理。

在收到來自較高層級驅動程式的IOCTL_SCSI_PASS_THROUGH或IOCTL_SCSI_PASS_THROUGH_DIRECT要求時,儲存類別驅動程式的 DispatchDeviceControl 例程負責檢查內嵌 SCSI 命令 (CDB) 的有效性,如果命令對裝置有效,請將要求傳送至記憶體埠驅動程式。

如果埠驅動程式的 I/O 堆疊位置中 IOCTL_SCSI_PASS_THROUGH 或 IOCTL_SCSI_PASS_THROUGH_DIRECT 要求的 MinorFunction 字段未設定為 IRP_MJ_DEVICE_CONTROL,則埠驅動程式將假設該要求直接來自應用程式,並且沒有針對目標裝置類型的類別驅動程式存在。 將這類要求直接傳送至記憶體類別驅動程式所宣告之裝置的埠驅動程式是應用程式錯誤。

埠驅動程式不會檢查內嵌在這類傳遞要求中的SCSI命令有效性。