次の方法で共有


メモリ使用の規則セット (NDIS)

これらの規則を使用して、ドライバーが NDIS 関数を正しく呼び出してメモリを割り当てて解放することを確認します。

このセクションの内容

裁判官 説明

NdisAllocateGenericObject

NdisAllocateGenericObject ルールでは、 NdisAllocateGenericObject および NdisFreeGenericObject が別の順序で呼び出される必要があります。 最終的な目標は、 MiniportHaltEx が終了時に、すべての凡用オブジェクトが解放されていることを確認することです。

NdisAllocateMdl

NdisAllocateMdl ルールでは、 NdisAllocateMdl および NdisFreeMdl が別の順序で呼び出される必要があります。 最終的な目標は、 MiniportHaltEx が終了時に、すべての MDL が解放されていることを確認することです。

NdisAllocateMemoryWithTagPriority

NdisAllocateMemoryWithTagPriority ルールでは、ドライバーが タグを提供せずに NdisAllocateMemoryWithTagPriority を呼び出すことはできません。

すべてのメモリ割り当てで、カーネル デバッガーとドライバー検証ツールが割り当てられた個別のメモリ ブロックを識別できるよう、一意のプール タグを使用する必要があります。

NdisAllocateNetBuffer

NdisAllocateNetBuffer ルールでは、 NdisAllocateNetBufferNdisFreeNetBuffer が別の順序で呼び出されます。 最終的な目標は、 MiniportHaltEx が終了時に、すべての NET_BUFFER のインスタンスが解放されていることを確認することです。

NdisMFreeSharedMemory

NdisMFreeSharedMemory は、 MiniportShutdownEx 関数から呼び出されることはできません。

NdisMIndicateStatusEx

ドライバーは、 MiniportHaltEx 関数から戻った後に NdisMIndicateStatusEx を呼び出すことはできません。

NdisMMapIoSpace

NdisMMapIoSpace 関数は、 MiniportInitializeEx のコンテキストでのみ呼び出す必要があります。

NdisMRegisterIoPortRange

ミニポート ドライバーは、その MiniportInitializeEx または MINIPORT_ADD_DEVICE 関数 から NdisMRegisterIoPortRange を呼び出します。 MiniportInitializeEx または MINIPORT_ADD_DEVICE は、 NdisMRegisterIoPortRange を呼び出す前に NdisMSetMiniportAttributes を呼び出す必要があります。

メモリ使用量ルール セットを選択するには

  1. Microsoft Visual Studio でドライバー プロジェクト (.vcxProj) を選択します。 [ドライバー] メニューから [静的ドライバー検証ツールの起動...] をクリックします。

  2. [ルール] タブをクリックします。 [ルール セット] で、 [MemoryUsage] を選択します。

    Visual Studio の開発者コマンド プロンプト ウィンドウから既定のルール セットを選択するには、 /check オプションで MemoryUsage.sdv を指定します。 次に例を示します。

    msbuild /t:sdv /p:Inputs="/check:MemoryUsage.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
    

    詳細については、「静的ドライバー検証ツールを使用して、ドライバーの欠陥を検出する」と「静的ドライバー検証ツールコマンド (MSBuild)」を参照してください。