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

IRP_MJ_PNP

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

IRP_MN_QUERY_INTERFACE

IRP_MN_WRITE_CONFIG