使用 KMDF 驅動程式的函式角色類型宣告函式

若要讓 SDV 分析 KMDF 驅動程式,您必須使用 KMDF 的函式角色類型宣告來宣告函式。 函式角色類型定義于 Wdf.h 和其他包含在 Wdf.h 中的 KMDF 標頭檔中。 如需函式角色類型和其對應事件回呼函式的清單,請參閱 靜態驅動程式驗證程式 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 取決於函式簽章進行分析,並忽略簽章不相符的函式。

例如,您應該使用EVT_WDF_DRIVER_DEVICE_ADD函式角色類型來宣告 EvtDriverDeviceAdd 常式。

EVT_WDF_DRIVER_DEVICE_ADD myEvtDriverDeviceAdd;

當您實作 myEvtDriverDeviceAdd函式時,參數類型必須符合EVT_WDF_DRIVER_DEVICE_ADD所使用的類型,也就是 WDFDRIVER 和 PWDFDEVICE_INIT (請參閱 EvtDriverDeviceAdd 常式以取得語法) 。

NTSTATUS
 myEvtDriverDeviceAdd (
  WDFDRIVER Driver,
 PWDFDEVICE_INIT DeviceInit
 )
{
}