IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS IOCTL (ehstorioctl.h)
此 IOCTL 會傳回結果集,其中包含與指定可尋址命令目標 (ACT) 相關聯的所有作用中儲存實體裝置物件 (P) DO 的列舉。 用戶端可能會先以下列方式發出此 IOCTL,以探查所需的緩衝區大小:
DeviceIoControl(
hDevice,
IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS,
&pdoType,
sizeof(PDO_TYPE),
NULL,
0,
&dwBytesRequired,
NULL );
將輸出緩衝區參數設定為 NULL 時,I/O 管理員會清除 IRP 旗標的IRP_INPUT_OPERATION位。 偵測到此狀況時,記憶體接收器驅動程式可以將IoStatus.Information安全地設定為所需的緩衝區大小,因此會將它指示給用戶端。
這隻適用於STATUS_BUFFER_OVERFLOW (0x80000005) 是 I/O 管理員將 IoStatus.Information 複製到 lpBytesReturned 參數的NT_WARNING () 值,並將該值傳回給用戶端。
此處需要注意,因為IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS是使用 METHOD_BUFFERED 來定義,因此 I/O 管理員會嘗試將此位元組數目複製到輸出緩衝區。
主要程序代碼
輸入緩衝區
Irp-AssociatedIrp.SystemBuffer> 的輸入緩衝區必須包含如 PDO_TYPE中所定義的 ULONG 值。
其中所有 PDO、僅磁碟 PDO、僅控制 PDO 或所有尋址接收器 PDO 都會分別根據提供的 PDO_TYPE輸入值來列舉。
輸入緩衝區長度
ULONG 的長度。
輸出緩衝區
Irp-AssociatedIrp.SystemBuffer> 指向將接收 PDO 列舉結果的緩衝區。 如果用戶端提供具有發出 IOCTL 的非 NULL 緩衝區,則只有在 Parameters.DeviceIoControl 時,驅動程式才會以結果集填入該緩衝區。如果緩衝區大小足夠且結果已複製到緩衝區,傳回值就會STATUS_SUCCESS。 否則會傳回STATUS_INVALID_BUFFER_SIZE,且輸出緩衝區未修改。
傳回的列舉緩衝區包含根據下列規則結構化的結果集。 緩衝區中的前置結構 ENUM_PDO_RESULTS包含結構計數和 ENUM_PDO_ENTRY 結構的陣列。
輸出緩衝區長度
OutputBufferLength 指出足夠的長度緩衝區大小,以包含整個結果集。
狀態區塊
下列其中一個值可能會在 [狀態] 字段中傳回:
- STATUS_SUCCESS - 輸出緩衝區包含要求的 PDO 列舉。
- STATUS_BUFFER_OVERFLOW - [資訊] 字段會設定為必要的緩衝區大小,以包含整個列舉結果集輸出。
- STATUS_INVALID_BUFFER_SIZE - 提供的輸出緩衝區長度不足,無法包含整個列舉結果集輸出。
規格需求
需求 | 值 |
---|---|
標頭 | ehstorioctl.h (包含 EhStorIoctl.h) |