함수 역할 형식에 대한 중복 진입점
대부분의 함수 역할 형식에서 SDV는 드라이버에 각 진입점에 대해 최대 하나의 콜백 함수가 있다고 가정합니다. 그러나 여러 이벤트 콜백 함수를 연결할 수 있는 몇 가지 함수 역할 형식이 있습니다. 예를 들어 KMDF 드라이버에는 여러 EvtTimerFunc 또는 EvtDpcFunc 콜백 함수(EVT_WDF_TIMER 및 EVT_WDF_DPC 역할 형식 주석 사용)가 있을 수 있습니다. 이 경우 SDV는 Sdv-map.h의 함수 형식에 정수를 추가합니다. 예를 들어 드라이버에 두 개의 DPC 콜백 함수가 있는 경우 SDV는 fun_WDF_DPC_1 매핑하고 fun_WDF_DPC_2.
드라이버가 역할 유형에 대한 최대 콜백 함수 수를 초과하는 경우 SDV는 다음 메시지를 표시합니다.
Static Driver Verifier found more than one entry point for '[role type]'
함수 역할 형식에 SDV가 지원하는 것보다 더 많은 진입점이 있는 경우 드라이버에 문제가 있는 것은 아닙니다. 그러나 정확한 확인 결과를 얻으려면 중복 항목을 제거하려면 Sdv.-map.h 파일을 편집해야 합니다.
예를 들어 다음 Sdv-map.h 파일은 EVT_WDF_REQUEST_COMPLETION_ROUTINE 역할 형식을 사용하여 주석이 추가된 두 개의 CompletionRoutine 함수가 있음을 보여 줍니다. Sdv-map.h 파일에서 SDV는 EvtRequestReadCompletionRoutine 과 EvtRequestWriteCompletionRoutine 을 모두 fun_WDF_REQUEST_COMPLETION_ROUTINE 정의합니다.
//Approved=false
#define fun_WDF_DRIVER_DEVICE_ADD OsrFxEvtDeviceAdd
#define fun_WDF_IO_QUEUE_IO_READ OsrFxEvtIoRead
#define fun_WDF_IO_QUEUE_IO_STOP OsrFxEvtIoStop
#define fun_WDF_DEVICE_D0_EXIT OsrFxEvtDeviceD0Exit
#define fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestReadCompletionRoutine
#define fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestWriteCompletionRoutine
#define fun_WDF_OBJECT_CONTEXT_CLEANUP OsrFxEvtDriverContextCleanup
#define fun_WDF_DEVICE_D0_ENTRY OsrFxEvtDeviceD0Entry
#define fun_WDF_DEVICE_PREPARE_HARDWARE OsrFxEvtDevicePrepareHardware
#define fun_WDF_IO_QUEUE_IO_WRITE OsrFxEvtIoWrite
#define fun_WDF_IO_QUEUE_IO_DEVICE_CONTROL OsrFxEvtIoDeviceControl
중복을 제거하려면 두 번째 완료 루틴을 주석으로 처리합니다( #define #d 두 개의 주석 구분 기호(//)로 바꿉니다. 그런 다음 Approved=true를 설정하고 확인을 실행합니다.
#define fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestReadCompletionRoutine
//efine fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestWriteCompletionRoutine
하나의 완료 루틴으로 확인 결과를 본 후 Sdv-map.h 파일을 다시 편집하지만, 이번에는 방금 확인된 완료 루틴을 주석으로 처리하고 확인되지 않은 완료 루틴에서 주석(#d 대체//)을 제거합니다. 그런 다음 SDV를 다시 실행합니다.
여러 진입점을 지원하는 함수 역할 형식
일부 함수 역할 형식은 여러 항목을 지원합니다. 항목 수가 지원되는 최대값을 초과하면 SDV는 이러한 항목도 중복 항목으로 보고합니다. 이러한 추가 항목은 Sdv-map.h 파일의 콜백 루틴에 대한 #define 문을 선택적으로 주석 처리하고 별도의 확인을 수행하여 중복 항목을 처리하는 것과 동일한 방식으로 처리할 수 있습니다. 예를 들어 드라이버에 EVT_WDF_DPC 역할 유형을 사용하는 8개의 DPC 콜백 함수가 있는 경우 다음을 수행할 수 있습니다.
Sdv-map.h를 편집하고 fun_WDF_DPC_8 통해 fun_WDF_DPC_5 대한 정의 문을 주석으로 처리합니다.
드라이버에서 SDV를 실행합니다.
그런 다음 Sdv-map.h를 다시 편집하여 fun_WDF_DPC_8 통해 fun_WDF_DPC_5 정의하고 fun_WDF_DPC_4 통해 fun_WDF_DPC_1 대한 정의 문을 주석 처리합니다.
드라이버에서 SDV를 실행합니다.
둘 이상의 콜백 함수를 포함할 수 있는 함수 역할 형식 목록은 정적 드라이버 검증 도구 KMDF 주석 을 참조하세요. 이 목록에는 SDV가 해당 역할 유형에 대해 지원하는 콜백 함수의 최대 수가 표시됩니다.