Sdílet prostřednictvím


Volání WmiSystemControl pro zpracování WMI IRPs

Rutiny knihovny WMI zjednodušují zpracování požadavků rozhraní WMI, protože místo zpracování každého takového požadavku ovladač volá WmiSystemControl. Ve volání WmiSystemControl ovladač předá inicializovanou WMILIB_CONTEXT strukturu, která obsahuje vstupní body do rutin zpětného volání knihovny WMI ovladače (Rutiny DpWmiXxx) a informace o datových blocích a blocích událostí ovladače.

Vzhledem k tomu, že knihovna WMI neposkytuje žádný mechanismus pro předávání dynamických názvů instancí nebo seznamu názvů statických instancí, může ovladač použít knihovnu WMI ke zpracování požadavků zahrnujících pouze datové bloky s názvy statických instancí na základě primárního názvu nebo řetězce s jedním základním názvem. Další informace o statických a dynamických názvech instancí naleznete v tématu Definování názvů instancí rozhraní WMI. Nic nebrání ovladači v používání knihovny WMI ke zpracování požadavků na takové bloky a zpracování požadavků na jiné bloky v rutině DispatchSystemControl . Další informace naleznete v kapitole Zpracování I/O požadavkových balíčků (IRPs) v rutině DispatchSystemControl.

Aby ovladač mohl zpracovávat IRP WMI voláním WmiSystemControl, musí implementovat určité potřebné rutiny zpětného volání DpWmiXxx a může implementovat další volitelné rutiny zpětného volání DpWmiXxx:

Rutiny DpWmiXxx ovladače můžou mít názvy zvolené autorem ovladače.

Před voláním WmiSystemControl musí ovladač inicializovat strukturu WMILIB_CONTEXT s vstupními body na své rutiny DpWmiXxx a informace o svých datových blocích a blocích událostí.

Když ovladač obdrží požadavek rozhraní WMI:

  1. Ovladač volá WmiSystemControl s ukazatelem na jeho inicializovanou WMILIB_CONTEXT strukturu, ukazatel na objekt zařízení a ukazatel na IRP.

  2. Rozhraní WMI ověří parametry protokolu IRP a zavolá rutinu DpWmiXxx ovladače, která požadavek zpracuje. Pokud ovladač ve svém WMILIB_CONTEXT pro volitelnou rutinu DpWmiXxx nenastavil žádný vstupní bod, služba WMI dokončí IRP s výchozími hodnotami a stavem.

  3. V rutině DpWmiXxx ovladač zpracuje požadavek a zapíše veškerý výstup do bufferu dodaného volajícím. Například rutina ovladače DpWmiQueryDataBlock by zapsala požadovanou(a) instanci(e) zadaného bloku do vyrovnávací paměti.

  4. Ve všech rutinách DpWmiXxx s výjimkou DpWmiQueryReginfo ovladač volá WmiCompleteRequest k dokončení požadavku nebo vrací STATUS_PENDING pro odložení dokončení, stejně jako u jakéhokoli IRP.

  5. Rozhraní WMI provede veškeré nezbytné postprocesování, zabalí jakýkoli výstup v příslušné struktuře WNODE_XXX a předá výstup a stav příjemci dat.