Объявление функций с помощью типов ролей функций для драйверов NDIS
Чтобы sdv мог анализировать драйвер NDIS, необходимо объявить функции с помощью объявлений типов роли функции для NDIS. Типы ролей функций определены в Ndis.h.
Список типов ролей функций и соответствующих им функций обратного вызова событий см. в разделе Объявления функций NDIS средства проверки статических драйверов.
Каждая функция обратного вызова в драйвере NDIS должна быть объявлена путем указания соответствующего типа роли.
В следующем примере кода показано объявление типа роли функции для функции обратного вызова MiniportPause . В этом примере функция обратного вызова называется myMiniportPause. Тип роли функции — MINIPORT_PAUSE.
MINIPORT_PAUSE myMiniportPause;
Если функция обратного вызова имеет объявление прототипа функции, необходимо заменить прототип функции объявлением типа роли функции.
В следующем примере показаны объявления функций NDIS из файла заголовка MP.h, который находится в подкаталоге SDV fail_drivers WDK. Связанные функции объявляются в Main.c.
\tools\sdv\samples\fail_drivers\NDIS\fail_driver1.
/--------------------------------------
// Miniport routines in MAIN.C
//--------------------------------------
NDIS_STATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE MPAllocateComplete;
MINIPORT_HALT MPHalt;
MINIPORT_SET_OPTIONS MPSetOptions;
MINIPORT_INITIALIZE MPInitialize;
MINIPORT_PAUSE MPPause;
MINIPORT_RESTART MPRestart;
MINIPORT_OID_REQUEST MPOidRequest;
MINIPORT_INTERRUPT_DPC MPHandleInterrupt;
MINIPORT_ISR MPIsr;
MINIPORT_RESET MPReset;
MINIPORT_RETURN_NET_BUFFER_LISTS MPReturnNetBufferLists;
MINIPORT_CANCEL_OID_REQUEST MPCancelOidRequest;
MINIPORT_SHUTDOWN MPShutdown;
MINIPORT_SEND_NET_BUFFER_LISTS MPSendNetBufferLists;
MINIPORT_CANCEL_SEND MPCancelSendNetBufferLists;
MINIPORT_DEVICE_PNP_EVENT_NOTIFY MPPnPEventNotify;
MINIPORT_UNLOAD MPUnload;
MINIPORT_CHECK_FOR_HANG MPCheckForHang;
MINIPORT_ENABLE_INTERRUPT MpEnableInterrupt;
MINIPORT_DISABLE_INTERRUPT MpDisableInterrupt;
MINIPORT_SYNCHRONIZE_INTERRUPT MPSynchronizeInterrupt;
MINIPORT_PROCESS_SG_LIST MPProcessSGList;
NDIS_TIMER_FUNCTION MpDemonstrationTimer;
NDIS_IO_WORKITEM MPQueuedWorkItem;
Параметры функции и типы ролей функций
В соответствии с требованиями языка программирования C типы параметров, используемые в определении функции, должны соответствовать типам параметров прототипа функции или, в данном случае, типу роли функции. SDV зависит от сигнатур функций для анализа и игнорирует функции, сигнатуры которых не совпадают.
Например, следует объявить функцию MiniportInterrupt с помощью типа роли функции MINIPORT_ISR:
MINIPORT_ISR myMPIsr;
При реализации подпрограммы прерываний myMPIsr типы параметров должны соответствовать тем, которые используются MINIPORT_ISR, а именно NDIS_HANDLE, PBOOLEAN и PULONG (синтаксис см. в функции MiniportInterrupt ).
BOOLEAN
myMPIsr(
__in NDIS_HANDLE MiniportInterruptContext,
__out PBOOLEAN QueueMiniportInterruptDpcHandler,
__out PULONG TargetProcessors
) {
}
Выполнение анализа кода для драйверов для проверки объявлений функций
Чтобы определить, подготовлен ли исходный код, выполните анализ кода для драйверов. Анализ кода для драйверов проверяет наличие объявлений типа роли функции и может помочь определить объявления функций, которые могли быть пропущены, или предупредить вас, если параметры определения функции не совпадают с параметрами в типе роли функции.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по