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
 )
{
}