Fungsi WmiSystemControl (wmilib.h)

Rutinitas WmiSystemControl adalah rutinitas pengiriman untuk driver yang menggunakan rutinitas dukungan pustaka WMI untuk menangani IRP WMI.

Sintaks

NTSTATUS WmiSystemControl(
  [in]      PWMILIB_CONTEXT         WmiLibInfo,
  [in]      PDEVICE_OBJECT          DeviceObject,
  [in, out] PIRP                    Irp,
  [out]     PSYSCTL_IRP_DISPOSITION IrpDisposition
);

Parameter

[in] WmiLibInfo

Penunjuk ke struktur WMILIB_CONTEXT yang berisi informasi pendaftaran untuk blok data driver dan blok peristiwa dan menentukan titik masuk untuk rutinitas panggilan balik pustaka WMI driver.

[in] DeviceObject

Penunjuk ke DEVICE_OBJECT pengemudi.

[in, out] Irp

Penunjuk ke IRP.

[out] IrpDisposition

Penunjuk ke nilai enumerasi jenis SYSCTL_IRP_DISPOSITION yang menunjukkan bagaimana IRP ditangani. WmiSystemControl selalu menetapkan nilai ini, bahkan ketika mengembalikan kode NTSTATUS yang tidak berhasil.

SYSCTL_IRP_DISPOSITION adalah enumerasi di Wmilib.h dan berisi nilai berikut:

IrpProcessed

IRP diproses dan mungkin selesai. Jika rutinitas DpWmiXxx driver yang dipanggil oleh WmiSystemControl tidak menyelesaikan IRP, driver harus memanggil WmiCompleteRequest untuk menyelesaikan IRP setelah WmiSystemControl kembali.

IrpNotCompleted

IRP diproses tetapi tidak selesai, baik karena WMI mendeteksi kesalahan dan menyiapkan IRP dengan kode kesalahan yang sesuai, atau memproses permintaan IRP_MN_REGINFO atau IRP_MN_REGINFO_EX . Driver harus menyelesaikan IRP dengan memanggil IoCompleteRequest.

IrpNotWmi

IRP bukan permintaan WMI (yaitu, WMI tidak mengenali kode minor IRP). Jika driver menangani permintaan IRP_MJ_SYSTEM_CONTROL dengan IRP_MN_XXX ini, driver harus menangani IRP; jika tidak, driver harus meneruskan IRP ke driver bawah berikutnya. Jika driver adalah driver tingkat terendah, maka harus menyelesaikan IRP.

IrpForward

IRP ditargetkan ke objek perangkat lain (yaitu, penunjuk objek perangkat di Parameters.WMI.ProviderId di IRP tidak cocok dengan pointer yang diteruskan oleh driver dalam panggilannya ke IoWMIRegistrationControl). Driver harus meneruskan IRP ke driver bawah berikutnya. Jika driver adalah driver tingkat terendah, maka harus menyelesaikan IRP.

Nilai kembali

WmiSystemControl mengembalikan STATUS_SUCCESS atau salah satu kode kesalahan berikut:

Keterangan

Ketika driver menerima permintaan IRP_MJ_SYSTEM_CONTROL dengan kode minor WMI IRP, driver memanggil WmiSystemControl dengan penunjuk ke struktur WMILIB_CONTEXT driver, penunjuk ke objek perangkatnya, dan penunjuk ke IRP. Struktur WMILIB_CONTEXT berisi informasi pendaftaran untuk blok data driver dan blok peristiwa dan menentukan titik masuk untuk rutinitas panggilan balik pustaka WMI-nya.

WmiSystemControl mengonfirmasi bahwa IRP adalah permintaan WMI dan menentukan apakah blok yang ditentukan oleh permintaan berlaku untuk driver. Jika demikian, ia memproses IRP dengan memanggil titik masuk DpWmiXxx yang sesuai dalam struktur WMILIB_CONTEXT driver. WMI berjalan di IRQL PASSIVE_LEVEL ketika memanggil rutinitas DpWmiXxx driver.

Driver harus berjalan di IRQL PASSIVE_LEVEL ketika meneruskan permintaan IRP_MJ_SYSTEM_CONTROL ke driver berikutnya yang lebih rendah.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia di Windows 2000 dan versi Windows yang lebih baru.
Target Platform Universal
Header wmilib.h (termasuk Wmilib.h)
Pustaka Wmilib.lib
IRQL PASSIVE_LEVEL (lihat bagian Keterangan)
Aturan kepatuhan DDI WmiComplete(wdm)

Lihat juga

DpWmiExecuteMethod

DpWmiFunctionControl

DpWmiQueryDataBlock

DpWmiQueryReginfo

DpWmiSetDataBlock

DpWmiSetDataItem

IRP_MJ_SYSTEM_CONTROL

IRP_MN_REGINFO_EX

IoCompleteRequest

WMILIB_CONTEXT