IRP_MN_READ_CONFIG
Driver bus untuk bus dengan ruang konfigurasi harus menangani permintaan ini untuk perangkat anak mereka (PDO anak). Filter dan driver fungsi tidak menangani permintaan ini.
Nilai
0x0F
Kode Utama
Ketika Dikirim
Driver atau komponen sistem lainnya mengirimkan IRP ini untuk membaca ruang konfigurasi bus induk perangkat.
Driver atau komponen sistem lainnya mengirimkan IRP ini di IRQL < DISPATCH_LEVEL dalam konteks utas arbitrer.
Parameter Input
Anggota Parameters.ReadWriteConfig dari struktur IO_STACK_LOCATION adalah struktur yang berisi informasi berikut:
ULONG WhichSpace;
PVOID Buffer;
ULONG Offset;
ULONG Length
Anggota struktur dapat ditafsirkan secara berbeda oleh pengemudi bus yang berbeda, tetapi anggota biasanya didefinisikan sebagai berikut:
Ruang Mana
Menentukan area memori mana yang akan diakses. Parameter ini dapat mengambil nilai berikut:
Nilai | Bus | Makna |
---|---|---|
PCI_WHICHSPACE_CONFIG |
PCI |
Ruang konfigurasi PCI. |
PCI_WHICHSPACE_ROM |
PCI |
Memori baca-saja. |
PCCARD_COMMON_MEMORY PCCARD_COMMON_MEMORY_INDIRECT |
PCMCIA |
Memori PCCARD utama. |
PCCARD_ATTRIBUTE_MEMORY PCCARD_ATTRIBUTE_MEMORY_INDIRECT |
PCMCIA |
Ruang atribut PCMCIA (konfigurasi). |
PCCARD_PCI_CONFIGURATION_SPACE |
PCMCIA |
Ruang konfigurasi PCI. |
Nilai PCI_XXX ditentukan dalam Wdm.h. Nilai PCCARD_XXX didefinisikan dalam Ntddpcm.h.
Buffer
Menunjuk ke buffer untuk mengembalikan informasi yang diminta. Komponen yang mengirim IRP mengalokasikan struktur ini dari memori halaman. Format buffer khusus bus.
Offset
Menentukan offset ke dalam ruang konfigurasi.
Panjang
Menentukan jumlah byte yang akan dibaca.
Parameter Output
Setelah berhasil, driver bus mengisi buffer di Parameters.ReadWriteConfig.Buffer dengan data yang diminta.
Blok Status I/O
Driver bus mengatur Irp-IoStatus.Status> ke STATUS_SUCCESS atau ke status kesalahan yang sesuai seperti STATUS_INVALID_PARAMETER_n, STATUS_NO_SUCH_DEVICE, atau STATUS_DEVICE_NOT_READY.
Jika berhasil, pengemudi bus menetapkan Irp-IoStatus.Information> ke jumlah byte yang dikembalikan.
Jika pengemudi bus tidak dapat segera menyelesaikan permintaan ini, ia dapat menandai IRP tertunda, mengembalikan STATUS_PENDING, dan menyelesaikan IRP di lain waktu.
Operasi
Pengemudi bus menangani IRP ini untuk perangkat anaknya (PDO anak).
Fungsi dan driver filter tidak menangani IRP ini; mereka meneruskannya ke driver bawah berikutnya tanpa perubahan pada Irp-IoStatus>. Status dan mereka tidak mengatur rutinitas IoCompletion.
Driver bus yang menangani permintaan ini harus memeriksa parameter WhichSpace untuk memastikan bahwa itu berisi nilai yang didukung driver.
Lihat Plug and Play aturan umum untuk menangani Plug and Play runtime integrasi kecil.
Mengirim IRP ini
Biasanya, driver fungsi mengirimkan IRP ini ke driver teratas di tumpukan perangkat tempat driver tersebut terpasang dan IRP ditangani oleh driver bus induk.
Lihat Menangani IRP untuk informasi tentang pengiriman RUN. Langkah-langkah berikut berlaku khusus untuk IRP ini:
Alokasikan buffer dari kumpulan halaman dan inisialisasi ke nol.
Atur nilai di lokasi tumpukan I/O berikutnya dari IRP: atur MajorFunction ke IRP_MJ_PNP, atur MinorFunction ke IRP_MN_READ_CONFIG, dan atur nilai yang sesuai di Parameters.ReadWriteConfig.
Menginisialisasi IoStatus.Status ke STATUS_NOT_SUPPORTED.
Batalkan alokasi IRP dan buffer ketika tidak lagi diperlukan.
Driver harus mengirim IRP ini dari DISPATCH_LEVEL IRQL < .
Pengemudi dapat mengakses ruang konfigurasi bus di DISPATCH_LEVEL melalui rutinitas antarmuka bus, jika pengemudi bus induk mendukung antarmuka seperti itu. Untuk mendapatkan antarmuka bus, driver mengirimkan permintaan IRP_MN_QUERY_INTERFACE ke tumpukan perangkat tempat driver terpasang. Driver kemudian memanggil rutinitas yang sesuai yang dikembalikan dalam antarmuka.
Misalnya, untuk membaca ruang konfigurasi dari DISPATCH_LEVEL, driver dapat memanggil IRP_MN_QUERY_INTERFACE selama inisialisasi driver untuk mendapatkan antarmuka BUS_INTERFACE_STANDARD dari driver bus induk. Driver mengirim IRP kueri dari IRQL PASSIVE_LEVEL. Kemudian, dari kode di IRQL DISPATCH_LEVEL, driver memanggil rutinitas yang sesuai yang dikembalikan dalam antarmuka, seperti rutinitas Interface.GetBusData .
Persyaratan
Header |
Wdm.h (termasuk Wdm.h, Ntddk.h, atau Ntifs.h) |
Lihat juga
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