다음을 통해 공유


미니포트 드라이버 중지 처리기

NDIS 미니포트 드라이버는 MiniportHaltEx 함수를 NdisMRegisterMiniportDriver에 제공해야 합니다.

MiniportHaltEx는MiniportInitializeEx 가 한 모든 것을 실행 취소해야 합니다. 예를 들어 NDIS 미니포트 드라이버는 다음을 수행할 수 있습니다.

다음 다이어그램에서는 미니포트 드라이버를 언로드하는 것을 보여 줍니다.

미니포트 드라이버를 언로드하는 프로세스를 보여 주는 다이어그램

MiniportHaltEx 는 반환하기 전에 드라이버를 언로드하는 데 필요한 작업을 완료해야 합니다. 미니포트 드라이버에 미해결 수신 표시(즉, NDIS까지 표시했지만 NDIS가 아직 반환되지 않은 수신된 네트워크 데이터)가 있는 경우 MiniportHaltEx 는 이러한 데이터가 미니포트 드라이버의 MiniportReturnNetBufferLists 함수로 반환될 때까지 반환하지 않아야 합니다.

앞의 그림은 MiniportHaltEx 함수에서 만들 수 있는 호출 집합을 보여 주는 그림입니다. 이러한 호출은 만들 수 있는 호출의 하위 집합일 뿐입니다. 실제 호출 집합은 미니포트 드라이버의 이전 작업에 따라 달라집니다. 미니포트 드라이버는 하드웨어 문제로 인해 네트워크 어댑터를 성공적으로 초기화할 수 없거나 필요한 리소스를 획득할 수 없기 때문에 MiniportInitializeEx 에서 이와 동일한 호출을 수행할 수 있습니다. 이러한 경우 MiniportInitializeEx 는 이전 작업을 실행 취소하여 드라이버를 언로드해야 합니다. 그렇지 않으면 MiniportHaltExMiniportInitializeEx의 작업을 실행 취소합니다.

다음 목록에서는 미니포트 드라이버가 수행할 수 있는 특정 작업을 되돌리는 데 필요한 호출에 대해 설명합니다.

  • 미니포트 드라이버가 인터럽트를 등록한 경우 NdisMDeregisterInterruptEx를 호출해야 합니다.

  • 미니포트 드라이버가 타이머 또는 타이머를 설정하는 경우 만든 각 타이머에 대해 NdisCancelTimerObject 를 호출해야 합니다. NdisCancelTimerObject에 대한 호출이 실패하면 타이머가 이미 실행되었을 수 있습니다. 이 경우 미니포트 드라이버는 MiniportHaltEx에서 반환하기 전에 타이머 처리기가 완료되기를 기다려야 합니다.

  • 미니포트 드라이버가 NdisAllocateMemoryWithTagPriority를 사용하여 메모리를 할당한 경우 해당 메모리를 해제하려면 NdisFreeMemory 를 호출해야 합니다.

  • 미니포트 드라이버가 NdisMAllocateSharedMemory 또는 NdisMAllocateSharedMemoryAsyncEx를 사용하여 메모리를 할당한 경우 해당 메모리를 해제하려면 NdisMFreeSharedMemory 를 호출해야 합니다.

  • 미니포트 드라이버가 NdisAllocateNetBufferPool을 사용하여 패킷 설명자 풀에 대한 스토리지를 할당하고 초기화한 경우 해당 스토리지를 해제하려면 NdisFreeNetBufferPool 을 호출해야 합니다.

  • 미니포트 드라이버가 하드웨어 리소스를 할당하거나 예약한 경우 이러한 리소스를 반환해야 합니다. 예를 들어 미니포트 드라이버가 NIC에서 I/O 포트 범위를 매핑한 경우 NdisMDeregisterIoPortRange를 호출하여 포트를 해제해야 합니다.

미니포트 드라이버의 어댑터 상태

NDIS 포트 해제

미니포트 어댑터 중지

미니포트 어댑터 상태 및 작업

미니포트 드라이버 다시 설정 및 중지 함수