다음을 통해 공유


메모리 사용 규칙 집합(NDIS)

이러한 규칙을 사용하여 드라이버가 NDIS 함수를 올바르게 호출하여 메모리를 할당하고 해제했는지 확인합니다.

이 부분에서는

주제 설명

NdisAllocateGenericObject

NdisAllocateGenericObject 규칙은 NdisAllocateGenericObjectNdisFreeGenericObject가 대체 순서로 호출되도록 지정합니다. 궁극적인 목표는 MiniportHaltEx 가 종료되면 모든 제네릭 개체가 해제되도록 하는 것입니다.

NdisAllocateMdl

NdisAllocateMdl 규칙은 NdisAllocateMdlNdisFreeMdl이 대체 순서로 호출되도록 지정합니다. 궁극적인 목표는 MiniportHaltEx 가 종료되면 모든 MDL이 해제되도록 하는 것입니다.

NdisAllocateMemoryWithTagPriority

NdisAllocateMemoryWithTagPriority 규칙은 드라이버가 태그를 제공하지 않고 NdisAllocateMemoryWithTagPriority를 호출하지 않도록 지정합니다.

모든 메모리 할당은 고유한 풀 태그를 사용하여 커널 디버거와 드라이버 검증 도구가 할당된 고유한 메모리 블록을 식별할 수 있도록 해야 합니다.

NdisAllocateNetBuffer

NdisAllocateNetBuffer 규칙은 NdisAllocateNetBufferNdisFreeNetBuffer가 대체 순서로 호출되도록 지정합니다. 궁극적인 목표는 MiniportHaltEx가 종료되면 NET_BUFFER 모든 인스턴스가 해제되도록 하는 것입니다.

NdisMFreeSharedMemory

MiniportShutdownEx 함수에서는 NdisMFreeSharedMemory를 호출할 수 없습니다.

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의 정적 드라이버 검증 도구 명령"을 참조하세요.