Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Чтобы включить SDV для анализа драйвера KMDF, необходимо объявить функции, используя объявления типов ролей для функций KMDF. Типы ролей функции определяются в Wdf.h и в других файлах заголовков KMDF, включенных в Wdf.h. Список типов ролей функций и соответствующих функций обратного вызова событий см. в объявлениях функций статического драйвера проверки KMDF.
Каждая функция обратного вызова событий в драйвере KMDF должна быть объявлена путем указания соответствующего типа роли.
Например, в следующем примере кода показано объявление типа роли функции для функции обратного вызова EvtDriverDeviceAdd . В этом примере функция обратного вызова вызывается myDriver_EvtDriverDeviceAdd. Тип роли функции — EVT_WDF_DRIVER_DEVICE_ADD.
EVT_WDF_DRIVER_DEVICE_ADD myDriver_EvtDriverDeviceAdd;
Если функция обратного вызова имеет объявление прототипа функции, необходимо заменить прототип функции объявлением типа роли функции.
Ниже приведен список из файла заголовка Fail_Driver6.h. Связанные функции объявляются в FailDriver6.c.
/*++
Copyright (C) Microsoft. All rights reserved.
Module Name:
fail_driver6.h
Environment:
Kernel mode
--*/
#include <NTDDK.h>
#include <wdf.h>
#include "fail_library6.h"
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd;
EVT_WDF_IO_QUEUE_IO_READ EvtIoRead;
EVT_WDF_IO_QUEUE_IO_WRITE EvtIoWrite;
EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtIoDeviceControl;
EVT_WDF_DEVICE_CONTEXT_CLEANUP DeviceContextCleanUp;
EVT_WDF_DEVICE_CONTEXT_DESTROY DeviceContextDestroy;
EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK QueueCleanup;
EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK QueueDestroy;
EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK FileContextCleanup;
EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK FileContextDestroy;
После объявления функций обратного вызова драйвера с помощью объявлений типов ролей можно сканировать драйвер. При сканировании драйвера создается файл Sdv-map.h, который можно проверить, чтобы определить правильность определения точек входа.
Выполнение анализа кода драйверов с целью проверки объявлений функций
Чтобы определить, подготовлен ли исходный код, запустите анализ кода для драйверов. Анализ кода для драйверов проверяет объявления типов ролей функции и может помочь определить объявления функций, которые могли быть пропущены или предупреждать вас, если параметры определения функции не соответствуют значениям в типе роли функции.
Параметры функции и типы ролей функций
По мере необходимости в языке программирования C типы параметров, используемые в определении функции, должны соответствовать типам параметров прототипа функции или в данном случае типу роли функции. SDV зависит от подписей функции для анализа и игнорирует функции, подписи которых не совпадают.
Например, следует объявить подпрограмму EvtDriverDeviceAdd с помощью типа роли функции EVT_WDF_DRIVER_DEVICE_ADD.
EVT_WDF_DRIVER_DEVICE_ADD myEvtDriverDeviceAdd;
При реализации функции myEvtDriverDeviceAdd типы параметров должны соответствовать типам параметров, используемым EVT_WDF_DRIVER_DEVICE_ADD, а именно WDFDRIVER и PWDFDEVICE_INIT (см. подпрограмму EvtDriverDeviceAdd для синтаксиса ).
NTSTATUS
myEvtDriverDeviceAdd (
WDFDRIVER Driver,
PWDFDEVICE_INIT DeviceInit
)
{
}