Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Подпрограммы библиотекИ WMI упрощают обработку запросов WMI, так как вместо обработки каждого такого запроса драйвер вызывает WmiSystemControl. В вызове WmiSystemControl драйвер передает инициализированную WMILIB_CONTEXT структуру, содержащую точки входа в подпрограммы обратного вызова библиотеки WMI драйвера (подпрограммыDpWmiXxxx ) и сведения о блоках данных и блоках событий драйвера.
Так как библиотека WMI не предоставляет механизма передачи имен динамических экземпляров или списка имен статических экземпляров, драйвер может использовать библиотеку WMI для обработки запросов, использующих только блоки данных со статическими именами экземпляров на основе PDO или одной строки базового имени. Дополнительные сведения о статических и динамических именах экземпляров см. в разделе "Определение имен экземпляров WMI". Ничто не мешает драйверу использовать библиотеку WMI для обработки запросов таких блоков и обработки запросов для других блоков в подпрограмме DispatchSystemControl. Дополнительные сведения см. в разделе Об обработке IRPs WMI в подпрограмме DispatchSystemControl.
Для обработки IRPs WMI путем вызова WmiSystemControl драйвер должен реализовать определенные необходимые процедуры обратного вызова DpWmiXxx и может реализовать дополнительные процедуры обратного вызова DpWmiXxx.
DpWmiQueryReginfo (обязательно) Предоставляет сведения о блоках данных и событий, зарегистрированных драйвером. WMI вызывает подпрограмму DpWmiQueryReginfo драйвера для обработки запроса IRP_MN_REGINFO или IRP_MN_REGINFO_EX . Дополнительные сведения см. в разделе "Использование библиотеки WMI для регистрации блоков".
DpWmiQueryDataBlock (Обязательный) Возвращает один экземпляр или все экземпляры блока данных. WMI вызывает подпрограмму DpWmiQueryDataBlock драйвера для обработки запроса IRP_MN_QUERY_SINGLE_INSTANCE или IRP_MN_QUERY_ALL_DATA .
DpWmiSetDataBlock (необязательно) Изменяет все элементы данных в одном экземпляре блока данных. WMI вызывает подпрограмму DpWmiSetDataBlock драйвера для обработки запроса IRP_MN_CHANGE_SINGLE_INSTANCE .
DpWmiSetDataItem (необязательно) Изменяет один элемент данных в экземпляре блока данных. WMI вызывает подпрограмму DpWmiSetDataItem драйвера для обработки запроса IRP_MN_CHANGE_SINGLE_ITEM .
DpWmiFunctionControl (необязательно) Включает и отключает уведомления о событиях и сбор данных для блоков, зарегистрированных как дорогостоящие для сбора. WMI вызывает подпрограмму DpWmiFunctionControl драйвера для обработки запроса IRP_MN_ENABLE_COLLECTION, IRP_MN_DISABLE_COLLECTION, IRP_MN_ENABLE_EVENTS или IRP_MN_DISABLE_EVENTS.
DpWmiExecuteMethod (необязательно) Выполняет метод, связанный с блоком данных. WMI вызывает подпрограмму DpWmiExecuteMethod драйвера для обработки запроса IRP_MN_EXECUTE_METHOD .
Подпрограммы DpWmiXxxx драйвера могут иметь любые имена, выбранные автором драйвера.
Перед вызовом WmiSystemControl драйвер должен инициализировать структуру WMILIB_CONTEXT с точками входа в подпрограммы DpWmiXxx и сведения о его блоках данных и блоках событий.
Когда драйвер получает запрос WMI:
Драйвер вызывает WmiSystemControl с указателем на инициализированную WMILIB_CONTEXT структуру, указатель на объект устройства и указатель на IRP.
WMI проверяет параметры IRP и вызывает подпрограмму DpWmiXxx драйвера, обрабатывающую запрос. Если драйвер не задал точку входа в WMILIB_CONTEXT для необязательной подпрограммы DpWmiXxx, WMI завершает IRP со значениями и статусом по умолчанию.
В своей подпрограмме DpWmiXxx драйвер обрабатывает запрос и записывает все выходные данные в предоставленный вызывающим буфер. Например, подпрограмма DpWmiQueryDataBlock драйвера записывает запрошенные экземпляры указанного блока в буфер.
Во всех подпрограммах DpWmiXxx, кроме DpWmiQueryReginfo, драйвер вызывает WmiCompleteRequest для завершения запроса или возвращает STATUS_PENDING, чтобы отложить завершение, как и для любого IRP.
WMI выполняет любую необходимую постобработку, упаковывает все выходные данные в соответствующую структуру WNODE_XXX и передает выходные данные и состояние потребителю данных.