共用方式為


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_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)