IRP_MN_REGINFO

Driver yang mendukung WMI di Microsoft Windows 98 dan Microsoft Windows 2000 harus menangani IRP ini. (Driver yang mendukung Windows XP juga harus menangani IRP_MN_REGINFO_EX IRP.) Driver dapat menangani RUNP WMI baik dengan memanggil WmiSystemControl atau dengan menangani IRP itu sendiri, seperti yang dijelaskan dalam Menangani Permintaan WMI.

Kode Utama

IRP_MJ_SYSTEM_CONTROL

Ketika Dikirim

Pada Windows 98 dan Windows 2000, WMI mengirimkan IRP ini untuk mengkueri atau memperbarui informasi pendaftaran driver setelah driver memanggil IoWMIRegistrationControl. Pada Windows XP dan yang lebih baru, WMI mengirimkan permintaan IRP_MN_REGINFO_EX sebagai gantinya.

WMI mengirimkan IRP ini di IRQL = PASSIVE_LEVEL dalam konteks utas sistem.

Parameter Input

Parameters.WMI.ProviderId menunjuk ke objek perangkat driver yang harus merespons permintaan. Pointer ini terletak di lokasi tumpukan I/O driver di IRP.

Parameters.WMI.DataPath diatur ke WMIREGISTER untuk mengkueri informasi pendaftaran atau WMIUPDATE untuk memperbaruinya.

Parameters.WMI.BufferSize menunjukkan ukuran maksimum buffer yang tidak dipagasi di Parameters.WMI.Buffer. Ukurannya harus lebih besar dari atau sama dengan total (sizeof(WMIREGINFO) + (GuidCount * sizeof(WMIREGGUID)), di mana GuidCount adalah jumlah blok data dan blok peristiwa yang didaftarkan oleh driver, ditambah ruang untuk nama instans statis, jika ada.

Parameter Output

Jika driver menangani IRP WMI dengan memanggil WmiSystemControl, WMI mendapatkan informasi pendaftaran untuk blok data driver dengan memanggil rutinitas DpWmiQueryReginfo-nya .

Jika tidak, driver mengisi struktur WMIREGINFO di Parameters.WMI.Buffer sebagai berikut:

  • Mengatur BufferSize ke ukuran dalam byte struktur WMIREGINFO ditambah data pendaftaran terkait.

  • Jika driver menangani permintaan WMI atas nama driver lain, atur NextWmiRegInfo ke offset dalam byte dari awal WMIREGINFO ini ke awal struktur WMIREGINFO lain yang berisi informasi pendaftaran dari driver lain.

  • Mengatur RegistryPath ke jalur registri yang diteruskan ke rutinitas DriverEntry driver.

  • Jika Parameters.WMI.Datapath diatur ke WMIREGISTER, atur MofResourceName ke offset dari awal WMIREGINFO ini ke string Unicode terhitung yang berisi nama sumber daya MOF driver dalam file gambarnya.

  • Mengatur GuidCount ke jumlah blok data dan blok peristiwa untuk mendaftar atau memperbarui.

  • Menulis array struktur WMIREGGUID , satu untuk setiap blok data atau blok peristiwa yang diekspos oleh driver, di WmiRegGuid.

Driver mengisi setiap struktur WMIREGGUID sebagai berikut:

  • Mengatur Guid ke GUID yang mengidentifikasi blok.

  • Mengatur Bendera untuk memberikan informasi tentang nama instans dan karakteristik blok lainnya. Misalnya, jika blok didaftarkan dengan nama instans statis, driver menetapkan Bendera dengan bendera WMIREG_FLAG_INSTANCE_XXX yang sesuai.

Jika blok sedang didaftarkan dengan nama instans statis, driver:

  • Mengatur InstanceCount ke jumlah instans.

  • Mengatur salah satu anggota berikut ke offset dalam byte ke data nama instans statis untuk blok:

    • Jika driver mengatur Bendera dengan WMIREG_FLAG_INSTANCE_LIST, driver mengatur InstanceNameList ke offset ke daftar string nama instans statis. WMI menentukan instans dalam permintaan berikutnya berdasarkan indeks ke dalam daftar ini.
    • Jika driver mengatur Bendera dengan WMIREG_FLAG_INSTANCE_BASENAME, driver mengatur BaseNameOffset ke offset ke string nama dasar. WMI menggunakan string ini untuk menghasilkan nama instans statis untuk blok.
    • Jika driver mengatur Bendera dengan WMIREG_FLAG_INSTANCE_PDO, driver mengatur Pdo ke offset ke pointer ke PDO yang diteruskan ke rutinitas AddDevice driver. WMI menggunakan jalur instans perangkat PDO untuk menghasilkan nama instans statis untuk blok tersebut.
  • Menulis string nama instans, string nama dasar, atau penunjuk ke PDO pada offset yang ditunjukkan oleh InstanceNameList, BaseName, atau Pdo, masing-masing.

Jika driver menangani pendaftaran WMI atas nama driver lain (seperti miniclass atau driver miniport), itu mengisi struktur WMIREGINFO lain dengan informasi pendaftaran driver lain dan menulisnya di NextWmiRegInfo di struktur sebelumnya.

Jika buffer di Parameters.WMI.Buffer terlalu kecil untuk menerima semua data, driver menulis ukuran yang diperlukan dalam byte sebagai ULONG ke Parameters.WMI.Buffer dan gagal IRP dan mengembalikan STATUS_BUFFER_TOO_SMALL.

Blok Status I/O

Jika driver menangani IRP dengan memanggil WmiSystemControl, WMI menetapkan Irp-IoStatus.Status> dan Irp-IoStatus.Information> di blok status I/O.

Jika tidak, driver mengatur Irp-IoStatus.Status> ke STATUS_SUCCESS atau ke status kesalahan yang sesuai seperti berikut ini:

STATUS_BUFFER_TOO_SMALL

Setelah berhasil, driver menetapkan Irp-IoStatus.Information> ke jumlah byte yang ditulis ke buffer di Parameters.WMI.Buffer.

Operasi

Driver dapat menangani RUNP WMI baik dengan memanggil WmiSystemControl atau dengan menangani IRP itu sendiri, seperti yang dijelaskan dalam Menangani Permintaan WMI.

Jika driver menangani runtime integrasi WMI dengan memanggil WmiSystemControl, yang rutin memanggil rutinitas DpWmiQueryReginfo driver.

Jika driver menangani permintaan IRP_MN_REGINFO itu sendiri, driver harus melakukannya hanya jika Parameters.WMI.ProviderId menunjuk ke objek perangkat yang sama dengan penunjuk yang diteruskan driver ke IoWMIRegistrationControl. Jika tidak, driver harus meneruskan permintaan ke driver berikutnya yang lebih rendah.

Sebelum menangani permintaan, driver harus memeriksa Parameters.WMI.DataPath untuk menentukan apakah WMI meminta informasi pendaftaran (WMIREGISTER) atau meminta pembaruan (WMIUPDATE).

WMI mengirimkan IRP ini dengan WMIREGISTER setelah driver memanggil IoWMIRegistrationControl dengan WMIREG_ACTION_REGISTER atau WMIREG_ACTION_REREGISTER. Sebagai respons, driver harus mengisi buffer di Parameters.WMI.Buffer dengan yang berikut:

  • Struktur WMIREGINFO yang menunjukkan jalur registri driver, nama sumber daya MOF-nya, dan jumlah blok yang akan didaftarkan.

  • Satu strukturWMIREGGUID untuk setiap blok untuk mendaftar. Jika blok akan didaftarkan dengan nama instans statis, driver menetapkan bendera WMIREG_FLAG_INSTANCE_XXX yang sesuai dalam struktur WMIREGGUID untuk blok tersebut.

  • Setiap string yang diperlukan WMI untuk menghasilkan nama instans statis.

WMI mengirimkan IRP ini dengan WMIUPDATE setelah driver memanggil IoWmiRegistrationControl dengan WMIREG_ACTION_UPDATE_GUIDS. Sebagai respons, driver harus mengisi buffer di Parameters.WMI.Buffer dengan struktur WMIREGINFO sebagai berikut:

  • Untuk menghapus blok, driver mengatur WMIREG_FLAG_REMOVE_GUID dalam struktur WMIREGGUID-nya .

  • Untuk menambahkan atau memperbarui blok (misalnya, untuk mengubah nama instans statisnya), driver menghapus WMIREG_FLAG_REMOVE_GUID dan menyediakan nilai pendaftaran baru atau yang diperbarui untuk blok tersebut.

  • Untuk mendaftarkan blok baru atau yang sudah ada dengan nama instans statis, driver menetapkan WMIREG_FLAG_INSTANCE_XXXX yang sesuai dan menyediakan string apa pun yang diperlukan WMI untuk menghasilkan nama instans statis.

Driver dapat menggunakan struktur WMIREGINFO yang sama untuk menghapus, menambahkan, atau memperbarui blok seperti yang digunakan pada awalnya untuk mendaftarkan semua bloknya, hanya mengubah bendera dan data untuk blok yang akan diperbarui. Jika WMIREGGUID dalam struktur WMIREGINFO seperti itu cocok dengan WMIREGGUID yang diteruskan oleh driver ketika pertama kali mendaftarkan blok itu, WMI melewati pemrosesan yang terlibat dalam memperbarui blok.

WMI tidak mengirim permintaan IRP_MN_REGINFO setelah driver memanggil IoWMIRegistrationControl dengan WMIREG_ACTION_DEREGISTER, karena WMI tidak memerlukan informasi lebih lanjut dari driver. Driver biasanya membatalkan pendaftaran bloknya sebagai respons terhadap permintaan IRP_MN_REMOVE_DEVICE .

Persyaratan

Header

Wdm.h (termasuk Wdm.h, Ntddk.h, atau Ntifs.h)

Lihat juga

DpWmiQueryReginfo

IoWMIRegistrationControl

WMILIB_CONTEXT

WMIREGGUID

WMIREGINFO

WmiSystemControl

IRP_MN_REGINFO_EX