NDIS ドライバーの関数役割型を使用した関数の宣言
SDV で NDIS ドライバーを分析できるようにするには、KMDF の関数ロール型宣言を使用して関数を宣言する必要があります。 関数の役割の種類は Ndis.h で定義されています。
関数ロールの種類とそれに対応するイベント コールバック関数の一覧については、「 静的ドライバー検証ツール NDIS 関数宣言」を参照してください。
NDIS ドライバーの各イベント コールバック関数は、対応するロールの種類を指定して宣言する必要があります。
次のコード例は、 MiniportInitializeEx コールバック関数の関数ロール型宣言です。 この例では、コールバック関数は myMiniportPauseです。 関数ロールの種類がMINIPORT_PAU Standard Edition。
MINIPORT_PAUSE myMiniportPause;
コールバック関数に関数プロトタイプ宣言がある場合は、関数プロトタイプを関数ロール型宣言に置き換える必要があります。
次の例は、WDK の SDV fail_drivers サブディレクトリにあるヘッダー ファイル MP.h からの NDIS 関数宣言を示しています。 関連する関数は 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 で使用されるものと一致する必要があります (構文については、 ミニポートInterrupt 関数を参照してください)。
BOOLEAN
myMPIsr(
__in NDIS_HANDLE MiniportInterruptContext,
__out PBOOLEAN QueueMiniportInterruptDpcHandler,
__out PULONG TargetProcessors
) {
}
ドライバーのコード分析を実行して関数の宣言を確認する
ソース コードが準備されているかどうかを判断するには、ドライバーのコード分析を実行 します。 ドライバーのコード分析は、関数ロールの型宣言のチェックし、関数定義のパラメーターが関数ロール型のパラメーターと一致しない場合に、見落とされた可能性がある関数宣言を識別したり警告したりするのに役立ちます。