다음을 통해 공유


함수 역할 형식에 대한 중복 진입점

대부분의 함수 역할 형식에서 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는 EvtRequestReadCompletionRoutineEvtRequestWriteCompletionRoutine 을 모두 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 주석 구분 기호 2개(//)로 바꿉니다. 그런 다음 , 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 문을 선택적으로 주석 처리하고 별도의 확인을 수행하여 중복 항목을 처리하는 것과 동일한 방식으로 이러한 추가 항목을 처리할 수 있습니다. 예를 들어 드라이버에 8개의 DPC 콜백 함수(EVT_WDF_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가 해당 역할 유형에 대해 지원하는 최대 콜백 함수 수가 표시됩니다.