Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
DispatchSystemControl yordamında WMI IRP'lerini işleyen bir sürücü, böyle bir IRP'yi yalnızca Parameters.WMI.ProviderId dosyasındaki cihaz nesne işaretçisi IoWMIRegistrationControl çağrısında sürücü tarafından geçirilen işaretçiyle eşleşiyorsa işlemelidir. Aksi takdirde, sürücünün IRP'yi sonraki alt sürücüye iletmesi gerekir.
Sürücü isteği değerlendirirse, şunları yapmalıdır:
Sürücü tarafından desteklenen bir veri bloğunu temsil edip etmediğini belirlemek için Parameters.WMI.DataPath'teki GUID'yi denetleyin; değilse IRP'yi STATUS_WMI_GUID_NOT_FOUND ile başarısız olarak sonlandırın.
Bir sürücü, aşağıdaki isteklerden herhangi birini işlerken örnek adı için Parameters.WMI.Buffer konumunda giriş WNODE_XXX yapısını denetlemelidir:
IRP_MN_QUERY_SINGLE_INSTANCEIRP_MN_CHANGE_SINGLE_INSTANCEIRP_MN_CHANGE_SINGLE_ITEMIRP_MN_EXECUTE_METHOD Sürücü örnek adını aşağıdaki gibi denetlemelidir.
WnodeHeader.Flags içinde WNODE_FLAG_STATIC_INSTANCE_NAMES ayarlandıysa, sürücünün söz konusu bloğun statik örnek adları listesinde dizin olarak InstanceIndex kullanın.
WnodeHeader.Flags içinde WNODE_FLAG_STATIC_INSTANCE_NAMES temizse, input WNODE_XXX yapısındaki örnek adı dizesine uzaklık olarak OffsetInstanceName kullanın. OffsetInstanceName , varsa NUL sonlandırıcısı dahil olmak üzere örnek adı dizesinin uzunluğunu bayt cinsinden (karakter değil) ve ardından dizenin kendisini Unicode olarak gösteren, yapının başından USHORT'a bayt cinsinden uzaklıktır.
Sürücü InstanceIndex veya OffsetInstanceName tarafından belirtilen örneği bulamaz ise, IRP'yi STATUS_WMI_INSTANCE_NOT_FOUND ile başarısızlıkla sonuçlandırmalıdır.
IRP_MN_EXECUTE_METHOD isteği için, girişteki WNODE_METHOD_ITEM içinde MethodID'yi kontrol edin ve yöntem bu veri bloğu için geçerli değilse, IRP'yi STATUS_WMI_ITEMID_NOT_FOUND ile sonlandırın.
İstek çıkış oluşturursa, aşağıdaki isteklerden herhangi birini işlerken bir sürücünün Parameters.WMI.BufferSize konumunda arabelleğin boyutunu denetlemesi gerekir:
IRP_MN_QUERY_ALL_DATAIRP_MN_QUERY_SINGLE_INSTANCEIRP_MN_EXECUTE_METHOD Arabellek çıktıyı alamayacak kadar küçükse ancak en az sizeof(WNODE_TOO_SMALL) ise, sürücü IRP'nin başarılı olmasını sağlamalı ve Parameters.WMI.Buffer konumunda arabelleğe WNODE_TOO_SMALL yapısını yazmalıdır. Arabellek sizeof(WNODE_TOO_SMALL) değerinden küçükse, sürücü, NTSTATUS kodu STATUS_BUFFER_TOO_SMALL ile IRP'yi başarısızlıkla sonuçlandırır.
İstek çıktı oluşturuyorsa ve arabellek boyutu yeterliyse Parameters.WMI.Buffer konumunda arabelleğe aşağıdaki çıkışı yazın:
- Bir IRP_MN_QUERY_ALL_DATA isteği için sürücü, belirtilen veri bloğunun tüm örnekleri için veri içeren bir WNODE_ALL_DATA yapısı yazar.
- bir IRP_MN_QUERY_SINGLE_INSTANCE isteği için, sürücü bir veri bloğunun belirtilen örneğine ait verileri içeren bir WNODE_SINGLE_INSTANCE yapısı yazar.
- Yöntem çıkış oluşturuyorsa IRP_MN_EXECUTE_METHOD için sürücü, arabellekteki giriş WNODE_METHOD_ITEM (varsa giriş verilerinin üzerine yazma) ardından sürücü tarafından belirlenen biçimde yöntem çıkışını yazar.
Irp-IoStatus.Information> değerini Parameters.WMI.Buffer konumundaki arabelleğe yazılan bayt sayısına ayarlayın ve Irp-IoStatus.Status> değerini STATUS_SUCCESS olarak ayarlayın.
IRP'yi tamamlamak için IoCompleteRequest'i çağırın.
Daha fazla bilgi için bkz. WMI WNODE_XXX Yapıları.