IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS IOCTL (ehstorioctl.h)

IOCTL ini mengembalikan tataan hasil yang berisi enumerasi semua Penyimpanan aktif Objek Perangkat Fisik (PDO) yang terkait dengan Target Perintah yang Dapat Diatasi (ACT) yang diberikan. Klien dapat terlebih dahulu menyelidiki ukuran buffer yang diperlukan dengan mengeluarkan IOCTL ini dengan cara berikut:

DeviceIoControl(
    hDevice,
    IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS,
    &pdoType,
    sizeof(PDO_TYPE),
    NULL,
    0,
    &dwBytesRequired,
    NULL );

Dengan parameter buffer output diatur ke NULL, manajer I/O menghapus bit IRP_INPUT_OPERATION di bendera IRP. Setelah mendeteksi hal ini, driver silo penyimpanan dapat dengan aman mengatur IoStatus.Information ke ukuran buffer yang diperlukan, sehingga menunjukkannya kepada klien.

Ini hanya berfungsi karena STATUS_BUFFER_OVERFLOW (0x80000005) adalah nilai NT_WARNING() di mana manajer I/O menyalin IoStatus.Information ke dalam parameter lpBytesReturned, mengembalikan nilai tersebut kepada klien.

Perhatian diperlukan di sini karena IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS didefinisikan dengan METHOD_BUFFERED, oleh karena itu manajer I/O akan mencoba menyalin jumlah byte ini ke dalam buffer output.

Kode utama

IRP_MJ_DEVICE_CONTROL

Buffer input

Buffer input di Irp-AssociatedIrp.SystemBuffer> harus berisi nilai ULONG seperti yang didefinisikan dalam PDO_TYPE,

di mana semua PDO, hanya PDO disk, hanya PDO kontrol atau semua PDO silo yang masing-masing dijumlahkan sesuai dengan nilai input PDO_TYPE yang disediakan.

Panjang buffer input

Panjang ULONG.

Buffer output

Irp-AssociatedIrp.SystemBuffer> menunjuk ke buffer yang akan menerima hasil enumerasi PDO. Jika klien menyediakan buffer non-NULL dengan IOCTL yang dikeluarkan, maka driver mengisinya dengan hasil yang ditetapkan hanya jika Parameters.DeviceIoControl.Nilai yang dikembalikan STATUS_SUCCESS jika ukuran buffer cukup dan hasilnya telah disalin ke buffer. Jika tidak, STATUS_INVALID_BUFFER_SIZE dikembalikan dan buffer output tidak dimodifikasi.

Buffer enumerasi yang dikembalikan berisi tataan hasil yang terstruktur sesuai dengan aturan berikut. Struktur terkemuka dalam buffer, ENUM_PDO_RESULTS, terdiri dari jumlah struktur dan array struktur ENUM_PDO_ENTRY .

Panjang buffer output

OutputBufferLength menunjukkan ukuran buffer dengan panjang yang cukup untuk menyertakan seluruh tataan hasil.

Blok status

Salah satu nilai berikut dapat dikembalikan di bidang Status:

STATUS_SUCCESS - Buffer output berisi enumerasi PDO yang diminta.
STATUS_BUFFER_OVERFLOW - Bidang Informasi diatur ke ukuran buffer yang diperlukan untuk berisi seluruh output tataan hasil enumerasi.
STATUS_INVALID_BUFFER_SIZE - Panjang buffer output yang disediakan tidak cukup untuk berisi seluruh output tataan hasil enumerasi.

Persyaratan

Persyaratan Nilai
Header ehstorioctl.h (termasuk EhStorIoctl.h)