IOCTL_STORAGE_PERSISTENT_RESERVE_IN IOCTL (ntddstor.h)

Driver kelas penyimpanan generik (classpnp.sys) mengekspos antarmuka kontrol I/O (IOCTL) untuk mengeluarkan perintah Persistent Reserve In. Perilaku perangkat penyimpanan saat perintah Persistent Reserve In diterima dijelaskan dalam spesifikasi Perintah Utama SCSI - 2 (SPC-2). Antarmuka IOCTL mengharuskan pemanggil untuk memiliki akses baca ke perangkat fisik untuk perintah Persistent Reserve In. Aplikasi mode pengguna, layanan, dan driver mode kernel dapat menggunakan IOCTL ini untuk mengontrol reservasi persisten. Jika dipanggil dari driver, IOCTL ini harus dipanggil dari utas yang berjalan di IRQL < DISPATCH_LEVEL. IOCTL ini didefinisikan dengan FILE_READ_ACCESS, mengharuskan handel perangkat memiliki izin baca untuk mengeluarkan perintah Persistent Reserve In.

Kode utama

IRP_MJ_DEVICE_CONTROL

Buffer input

Buffer di Irp-AssociatedIrp.SystemBuffer> berisi struktur PERSISTENT_RESERVE_COMMAND. Anda harus mengalokasikan buffer dari kumpulan yang tidak disejajarkan dan harus menyelaraskannya dengan benar untuk perangkat target dan adaptor.

PR_IN. ServiceAction dapat berupa salah satu hal berikut:

  • RESERVATION_ACTION_READ_KEYS
  • RESERVATION_ACTION_READ_RESERVATIONS

PR_IN. Panjang alokasi adalah ukuran (dalam byte) dari buffer yang dialokasikan untuk daftar parameter yang dikembalikan.

Panjang buffer input

Panjang buffer input, dalam byte.

Buffer output

Untuk PR_IN. ServiceAction = RESERVATION_ACTION_READ_KEYS, buffer output berisi struktur PRI_REGISTRATION_LIST dan harus setidaknya sizeof(PRI_REGISTRATION_LIST).

Untuk PR_IN. ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS, buffer output berisi struktur PRI_RESERVATION_LIST dan harus setidaknya sizeof(PRI_RESERVATION_LIST).

Jika buffer yang dialokasikan terlalu kecil untuk mengembalikan semua data Persistent Reserve In, keberhasilan akan dikembalikan dan ukuran yang diperlukan akan dikembalikan dalam daftar parameter bidang AdditionalLength .

Panjang buffer output

Panjang buffer output, dalam byte.

Blok status

Bidang Informasi diatur ke ukuran buffer output. Untuk ServiceAction = RESERVATION_ACTION_READ_KEYS, buffer output adalah struktur PRI_REGISTRATION_LIST . Untuk ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS, buffer output adalah struktur PRI_REGISTRATION_LIST .

Bidang Status diatur ke salah satu hal berikut ini:

Nilai Makna
STATUS_BUFFER_OVERFLOW (ERROR_MORE_DATA) Buffer output terlalu kecil untuk menyimpan data Cadangan Persisten Dalam. Bidang AdditionalLength buffer output akan berisi ukuran data yang akan dikembalikan.
STATUS_DEVICE_BUSY (ERROR_BUSY) Perintah gagal karena Konflik Reservasi (untuk informasi selengkapnya, lihat spesifikasi Scsi Primary Commands - 2 (SPC-2)**).
STATUS_INFO_LENGTH_MISMATCH Panjang buffer input untuk IOCTL kurang dari sizeof(PERSISTENT_RESERVE_COMMAND) atau ukuran yang ditentukan dalam struktur data PERSISTENT_RESERVE_COMMAND kurang dari sizeof(PERSISTENT_RESERVE_COMMAND).
STATUS_INVALID_DEVICE_REQUEST (ERROR_INVALID_FUNCTION) Kode kontrol I/O (IOCTL_STORAGE_PERSISTENT_RESERVE_IN) tidak didukung oleh driver penyimpanan.
STATUS_INVALID_PARAMETER (ERROR_INVALID_PARAMETER) Struktur buffer input salah berukuran atau diisi.
STATUS_INVALID_USER_BUFFER (ERROR_INVALID_USER_BUFFER) Buffer input atau output tidak diselaraskan dengan benar untuk perangkat atau adaptor. Status ini hanya dapat dikembalikan ketika driver mengirim IOCTL ke tumpukan penyimpanan. Status ini tidak akan dikembalikan ketika aplikasi mode pengguna mengirim IOCTL melalui DEVICEIoControl API karena Manajer I/O secara otomatis menyelaraskan buffer.
STATUS_IO_DEVICE_ERROR (ERROR_IO_DEVICE) Perangkat tidak mendukung perintah Persistent Reserve In.
STATUS_SUCCESS Operasi berhasil.

Persyaratan

Persyaratan Nilai
Header ntddstor.h (termasuk Ntddstor.h)