共用方式為


處理 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) ,如果命令對裝置有效,請將要求傳送至儲存體埠驅動程式。

如果IOCTL_SCSI_PASS_THROUGH或IOCTL_SCSI_PASS_THROUGH_DIRECT要求的埠驅動程式 I/O 堆疊位置沒有其 MinorFunction 欄位設定IRP_MJ_DEVICE_CONTROL,埠驅動程式會假設要求直接來自應用程式,而且目標裝置類型沒有類別驅動程式存在。 應用程式錯誤是直接將這類要求傳送至儲存體類別驅動程式所宣告裝置的埠驅動程式。

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