共用方式為


使用 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
    ) {
}

執行驅動程式的程式代碼分析以驗證函式宣告

若要協助您判斷原始程式碼是否已備妥,請執行 驅動程式的程式代碼分析。 驅動程式的程式代碼分析會檢查函式角色類型宣告,並有助於識別函式宣告,當函式定義的參數不符合函式角色類型的參數時,可能會遺漏或警告您。