Aracılığıyla paylaş


WMI Etkinliklerini Gönderme

Bir sürücü WMI olaylarını kullanarak uygulamaların IRP'leri yoklamasına veya göndermesine gerek kalmadan kullanıcı modu uygulamalarına olayları bildirebilir. Bir sürücü, WMI istemcilerini hata günlüğüne kaydetmeye alternatif olarak değil olağanüstü koşullar hakkında bilgilendirmek için WMI olaylarını kullanmalıdır. Sürücü, Wmicore.mof dosyasında cihaz türü için tanımlanan standart olay bloklarını desteklemelidir ve cihaza özgü bildirimleri desteklemek için ek özel olay blokları tanımlayıp kaydedebilir.

Olay bloğu, WMIEvent soyut temel sınıfından türetilen bir veri bloğudur. Olay bloğu, veri bloğuyla aynı verilerden herhangi birini içerebilir veya boş olabilir; başka bir deyişle, bir olay bloğu sürücü tanımlı veri öğesi içermesi gerekmez. Olay bloğu veri içeriyorsa, XXX WNODE_toplam boyutu ile verilerin kayıt defteri tanımlı 1 kilobayt sınırını aşmaması gerekir. Genel olarak, daha küçük olaylar sistem performansının daha iyi ve daha zamanında bildirimle sonuçlanır. Blokları tanımlama hakkında bilgi için bkz. WMI Verileri ve Olay Blokları için MOF Sözdizimi ve WMI Verileri ve Olay Blokları Tasarlama.

Sürücü, WMIREG_FLAG_EVENT_ONLY_GUID'in ayarlı olduğu olay bloğunu WMIREGGUID yapısı içinde kaydederek, bir olay için destek sağladığını belirtir. Blokları kaydetme hakkında bilgi için bkz. WMI Veri Sağlayıcısı olarak kaydetme.

WMI istemci kullanıcısı bir olayın bildirimini istediğinde WMI, sürücüye bir IRP_MN_ENABLE_EVENTS isteği gönderir ve bu istek sürücüyü olayın sürücü tarafından belirlenen tetikleyici durumunu izlemeye başlama konusunda uyarır. Ardından, tetikleyici koşulu oluştuğunda, sürücü olayı WMI'ye gönderir ve bu da olayı olay için kayıtlı olan tüm veri tüketicilerine gönderir.

Bir sürücü WMI'ye aşağıdaki yollardan biriyle bir olay gönderir:

  • WmiFireEventçekirdek modu WMI kitaplığı yordamını çağırın. Sürücü, yalnızca dinamik örnek adları kullanmayan ve temel statik örnek adlarını tek bir temel ad dizesine veya bir PDO'nun cihaz örnek kimliğine dayandıran olayları göndermek için WmiFireEvent çağırabilir. Ayrıca, olayın tek bir örnek olması gerekir; yani bir sürücü, tek bir öğeden veya birden çok örnekten oluşan bir olay göndermek için WmiFireEvent çağıramaz. Daha fazla bilgi için bkz. WmiFireEvent Kullanarak Etkinlik Gönderme.

  • Çekirdek modu yordamı IoWMIWriteEvent, olay verilerini içeren WNODE_XXX yapısına bir sürücü tarafından tahsis edilmiş ve başlatılmış bir işaretçiyle çağırın. Daha fazla bilgi için bkz. IoWMIWriteEvent ile Olay Gönderme.