IOCTL_VPCI_WRITE_BLOCK IOCTL (vpci.h)
Driver untuk fungsi virtual PCI Express (PCIe) (VF) mengeluarkan kode kontrol I/O IOCTL_VPCI_WRITE_BLOCK (IOCTL) untuk menulis data ke blok konfigurasi VF. Driver mengeluarkan IOCTL ini ke driver berikutnya yang lebih rendah di tumpukan driver.
- Menyiapkan Struktur Paket Permintaan I/O
- Menyiapkan Struktur Lokasi Tumpukan I/O
- Mengeluarkan Permintaan IOCTL
- Hasil Penyelesaian Permintaan IOCTL
Kode utama
Blok status
Irp-IoStatus.Status> diatur ke STATUS_SUCCESS jika permintaan berhasil.
Jika tidak, Status ke kondisi kesalahan yang sesuai sebagai kode NTSTATUS.
Untuk informasi selengkapnya, lihat [XREF-LINK:NTSTATUS Values].
Keterangan
Menyiapkan Struktur Paket Permintaan I/O
Driver harus terlebih dahulu mengalokasikan atau menggunakan kembali paket permintaan I/O (IRP). Anda dapat menggunakan rutinitas IoBuildDeviceIoControlRequest untuk secara khusus mengalokasikan IOCTL IRP. Anda juga dapat menggunakan rutinitas pembuatan dan inisialisasi IRP tujuan umum, seperti IoAllocateIrp, IoReuseIrp, atau IoInitializeIrp. Untuk informasi selengkapnya tentang alokasi IRP, lihat Membuat IRP untuk Driver Lower-Level.Driver kemudian harus mengatur anggota struktur IRP seperti yang dijelaskan dalam tabel berikut.
Anggota IRP | Nilai |
---|---|
UserBuffer | NULL |
UserEvent |
Alamat objek peristiwa yang diinisialisasi dalam panggilan ke rutinitas KeInitializeEvent . Catatan Jika penyelesaian asinkron permintaan IOCTL tidak diperlukan, anggota ini harus diatur ke NULL. Untuk informasi selengkapnya, lihat Membuat Permintaan IOCTL di Driver.
|
UserIosb | Alamat struktur IO_STATUS_BLOCK yang dialokasikan pemanggil. Struktur ini diperbarui oleh driver yang lebih rendah untuk menunjukkan status akhir permintaan I/O. |
Menyiapkan Struktur Lokasi Tumpukan I/O
Driver memanggil rutinitas IoGetNextIrpStackLocation untuk mengakses lokasi tumpukan I/O driver yang lebih rendah. Fungsi ini mengembalikan penunjuk ke struktur IO_STACK_LOCATION yang berisi parameter untuk lokasi tumpukan I/O.Driver kemudian harus mengatur anggota dalam struktur IO_STACK_LOCATION seperti yang dijelaskan dalam tabel berikut:
anggota IO_STACK_LOCATION | Nilai |
---|---|
MajorFunction | |
Parameters.DeviceIoControl.IoControlCode | |
Parameters.DeviceIoControl.Type3InputBuffer | Penunjuk ke struktur VPCI_WRITE_BLOCK_INPUT . Driver memformat struktur ini dengan parameter untuk permintaan I/O IOCTL_VPCI_WRITE_BLOCK . |
IParameters.DeviceIoControl.InputBufferLength | Ukuran, dalam byte, dari struktur VPCI_WRITE_BLOCK_INPUT . |
Parameters.DeviceIoControl.OutputBufferLength | Nol |
Mengeluarkan Permintaan IOCTL
Untuk mengeluarkan permintaan IOCTL ini, driver memanggil rutinitas IoCallDriver untuk meneruskan permintaan ke driver yang lebih rendah berikutnya di tumpukan driver. Driver mengatur parameter IoCallDriver seperti yang dijelaskan dalam tabel berikut ini.Parameter IoCallDriver | Nilai |
---|---|
DeviceObject | Objek perangkat driver yang lebih rendah. |
Irp | Alamat IRP yang sebelumnya dialokasikan dan diinisialisasi. Untuk informasi selengkapnya, lihat Menyiapkan Struktur Paket Permintaan (IRP) I/O. |
Hasil Penyelesaian Permintaan IOCTL
Saat permintaan IOCTL IOCTL_VPCI_WRITE_BLOCK selesai, anggota Status struktur IO_STATUS_BLOCK yang dialokasikan pemanggil diatur ke salah satu nilai dalam tabel berikut.:Nilai status | Deskripsi |
---|---|
STATUS_SUCCESS | IOCTL berhasil diselesaikan. |
STATUS_PENDING |
IOCTL belum selesai. Driver harus memanggil rutinitas KeWaitForSingleObject untuk menempatkan utas saat ini ke dalam status tunggu. Driver mengatur parameter Objek ke alamat objek peristiwa yang diinisialisasi dalam panggilan ke rutinitas KeInitializeEvent .
Peristiwa ini disinyalir ketika permintaan IOCTL selesai. Setelah peristiwa disinyalkan, utas melanjutkan eksekusi. |
STATUS_BUFFER_TOO_SMALL | Anggota Parameters.DeviceIoControl.InputBufferLength diatur ke nilai yang kurang dari ukuran, dalam byte, dari struktur VPCI_WRITE_BLOCK_INPUT . |
Jika permintaan berhasil diselesaikan, anggota Informasi dari struktur IO_STATUS_BLOCK diatur ke jumlah byte yang ditulis. Jika tidak, anggota Informasi diatur ke nol.
Ketika IOCTL_VPCI_WRITE_BLOCK IOCTL dikeluarkan, driver fungsi fisik PCIe (PF) diberi tahu untuk menulis data ke blok konfigurasi VF yang ditentukan.
Segera setelah blok konfigurasi VF dialokasikan, data konfigurasi VF dapat ditukar dengan cara yang dilindungi antara driver berikut:
- Driver VF, yang berjalan di sistem operasi tamu. Sistem operasi ini berjalan dalam partisi anak Hyper-V.
-
Driver PF, yang berjalan dalam sistem operasi manajemen.
Sistem operasi ini berjalan dalam partisi induk Hyper-V.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Tersedia di Windows Server 2012 dan versi Windows yang lebih baru. |
Header | vpci.h (termasuk Wdm.h) |
IRQL | DISPATCH_LEVEL |
Lihat juga
IRP_MJ_INTERNAL_DEVICE_CONTROL
Membuat Permintaan IOCTL di Driver
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk