共用方式為


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_MJ_DEVICE_CONTROL

輸入緩衝區

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)