IOCTL_MPIO_PASS_THROUGH_PATH_DIRECT IOCTL (ntddscsi.h)
此 I/O 控制程式碼可讓應用程式或核心驅動程式將 SCSI 命令傳送至指定的實際 LUN。 下列限制適用於使用此 I/O 控制項程式代碼的限制:
- 如果虛擬 LUN 的類別驅動程式存在,應用程式必須將要求傳送至該類別驅動程式。 因此,只有在裝置沒有類別驅動程式時,應用程式才能將此要求直接傳送至 MPIO。
- 所有傳遞要求都必須是同步的。
- 應用程式不需要系統管理許可權,即可將傳遞要求傳送至裝置,但必須具有裝置的讀取/寫入許可權。
- 要求包含內嵌 SCSI_PASS_THROUGH_DIRECT 結構) 以及特定指示詞中的SCSI傳遞要求 (。
- SCSI 傳遞結構應該符合這類的需求,如 SCSI_PASS_THROUGH_DIRECT中所述。
- 如果要透過宣告實際 LUN 的 DSM 傳送要求,則必須指出該要求。 在這種情況下,DSM 本身必須指出相同的實際 LUN。 否則,要求將會失敗。
- 要求必須指定由虛擬 LUN 組成的實際 LUN,以先前的 SCSI 位址或其 MPIO PathId 來組成,但不能同時指定這兩者。
主要程序代碼
輸入緩衝區
Parameters.DeviceIoControl.InputBufferLength 會指出 Irp-AssociatedIrp.SystemBuffer> 緩衝區的大小,以位元組為單位。
輸入緩衝區長度
緩衝區的大小 必須至少為 (MPIO_PASS_THROUGH_PATH) ,或者,如果 32 位應用程式在 64 位作業系統中傳送, sizeof (MPIO_PASS_THROUGH_PATH32) 。
輸出緩衝區
埠驅動程式會傳回任何要求感知數據,以及從裝置傳輸到 Irp-AssociatedIrp.SystemBuffer> 緩衝區的任何數據。
輸出緩衝區長度
內嵌SCSI_PASS_THROUGH_DIRECT結構中的 SenseInfoLength 和 DataTransferLength 會更新,以指出傳輸的數據量。
狀態區塊
[資訊] 位元位會設定為 Irp-AssociatedIrp.SystemBuffer> 輸出緩衝區中傳回的位元組數目。 [狀態] 欄位會設定為 [STATUS_SUCCESS],或者如果內嵌SCSI_PASS_THROUGH_DIRECT中的輸入 Length 值未正確設定,則可能會STATUS_BUFFER_TOO_SMALL或STATUS_INVALID_PARAMETER。
規格需求
需求 | 值 |
---|---|
標頭 | ntddscsi.h (包含 Ntddscsi.h) |