IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS IOCTL (ehstorioctl.h)
這個 IOCTL 會傳回結果集,其中包含與指定可尋址命令目標 (ACT) 相關聯的所有使用中存儲設備實體裝置物件 (PDO) 的列舉。 用戶端可以透過下列方式發出此 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) |