使用 NDIS 驅動程式的函式角色類型宣告函式
若要讓 SDV 分析 NDIS 驅動程式,您必須使用 NDIS 的函式角色類型宣告來宣告函式。 函式角色類型定義於 Ndis.h 中。
如需函式角色類型及其對應事件回呼函式的清單,請參閱 靜態驅動程序驗證器 NDIS 函式宣告。
NDIS 驅動程式中的每個回呼函式都必須藉由指定對應的角色類型來宣告。
下列程式代碼範例顯示 MiniportPause 回呼函式的函式角色類型宣告。 在此範例中,回呼函式稱為 myMiniportPause。 函式角色類型MINIPORT_PAUSE。
MINIPORT_PAUSE myMiniportPause;
如果回調函式具有函式原型宣告,您必須將函式原型取代為函式角色類型宣告。
下列範例顯示來自頭檔 MP.h 的 NDIS 函數宣告,其位於 WDK 的 SDV fail_drivers子目錄中。 相關函式會在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 取決於函式簽章進行分析,並忽略簽章不相符的函式。
例如,您應該使用 MINIPORT_ISR 函式角色類型來宣告 MiniportInterrupt 函式:
MINIPORT_ISR myMPIsr;
當您實作插斷例程 myMPIsr 時,參數類型必須符合MINIPORT_ISR所使用的類型,也就是NDIS_HANDLE、PBOOLEAN 和 PULONG(如需語法,請參閱 MiniportInterrupt 函 式)。
BOOLEAN
myMPIsr(
__in NDIS_HANDLE MiniportInterruptContext,
__out PBOOLEAN QueueMiniportInterruptDpcHandler,
__out PULONG TargetProcessors
) {
}
執行驅動程式的程式代碼分析以驗證函式宣告
若要協助您判斷原始程式碼是否已備妥,請執行 驅動程式的程式代碼分析。 驅動程式的程式代碼分析會檢查函式角色類型宣告,並有助於識別函式宣告,當函式定義的參數不符合函式角色類型的參數時,可能會遺漏或警告您。