Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы включить 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
)
{
}