Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Para a maioria dos tipos de papéis de função, o SDV assume que o driver tem, no máximo, uma função de retorno de chamada para cada ponto de entrada. No entanto, existem alguns tipos de função que podem ter várias funções de retorno de chamada de evento associadas a eles. Por exemplo, um driver do KMDF pode ter várias funções de retorno de chamada do tipo EvtTimerFunc ou EvtDpcFunc, que utilizam as anotações de tipo de função EVT_WDF_TIMER e EVT_WDF_DPC. Nesse caso, o SDV acrescenta um inteiro ao tipo de função em Sdv-map.h. Por exemplo, se o driver tiver duas funções de retorno de chamada DPC, o SDV as mapeia para fun_WDF_DPC_1 e fun_WDF_DPC_2.
Se um driver exceder o número máximo de funções de retorno de chamada para um tipo de função, o SDV exibirá a seguinte mensagem.
Static Driver Verifier found more than one entry point for '[role type]'
Se um tipo de função tiver mais pontos de entrada do que o SDV suporta, não há necessariamente algo errado com o driver. No entanto, para obter resultados de verificação precisos, você deve editar o arquivo Sdv.-map.h para remover as entradas duplicadas.
Por exemplo, o seguinte arquivo Sdv-map.h mostra que há duas funções CompletionRoutine que foram anotadas usando o tipo de função EVT_WDF_REQUEST_COMPLETION_ROUTINE. No arquivo Sdv-map.h, o SDV define EvtRequestReadCompletionRoutine e EvtRequestWriteCompletionRoutine como 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
Para remover a duplicação, comente a segunda rotina de conclusão (substitua o #d no #define por dois delimitadores de comentários (//). Em seguida, defina Approved=true e execute uma verificação.
#define fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestReadCompletionRoutine
//efine fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestWriteCompletionRoutine
Depois de visualizar os resultados da verificação com uma rotina de conclusão, edite o arquivo Sdv-map.h novamente, mas desta vez comente a rotina de conclusão que acabou de ser verificada e remova o comentário (substitua o // por #d) da rotina de conclusão que não foi verificada. Em seguida, execute o SDV novamente.
Tipos de função que suportam vários pontos de entrada
Alguns tipos de função suportam várias entradas. Quando o número de entradas excede o máximo suportado, o SDV também as relata como entradas duplicadas. Você pode tratar essas entradas adicionais da mesma forma que lida com entradas duplicadas, comentando seletivamente as instruções #define para as rotinas de retorno de chamada no arquivo Sdv-map.h e fazendo verificações separadas. Por exemplo, se o driver tiver oito funções de retorno de chamada DPC (que usam o tipo de função EVT_WDF_DPC), você poderá fazer o seguinte:
Edite Sdv-map.h e comente as declarações de definição para fun_WDF_DPC_5 a fun_WDF_DPC_8.
Corra o SDV no driver.
Em seguida, edite Sdv-map.h novamente para definir fun_WDF_DPC_5 a fun_WDF_DPC_8 e comente as instruções de definição para fun_WDF_DPC_1 a fun_WDF_DPC_4.
Executar SDV no driver.
Consulte Anotações KMDF do Verificador de Driver Estático para obter uma lista de tipos de função que podem ter mais de uma função de retorno de chamada. A lista mostra o número máximo de funções de retorno de chamada que o SDV suporta para esses tipos de funções.