미니포트 드라이버 중지 처리기
NDIS 미니포트 드라이버는 MiniportHaltEx 함수를 NdisMRegisterMiniportDriver에 제공해야 합니다.
MiniportHaltEx는MiniportInitializeEx 가 한 모든 것을 실행 취소해야 합니다. 예를 들어 NDIS 미니포트 드라이버는 다음을 수행할 수 있습니다.
무료 포트. (자세한 내용은 NDIS 포트 해제를 참조하세요.)
MiniportInitializeEx에서 주장한 모든 하드웨어 리소스를 해제합니다.
NdisMDeregisterInterruptEx를 호출하여 인터럽트 리소스를 해제합니다.
MiniportInitializeEx에서 할당한 메모리를 해제합니다.
MiniportShutdownEx 함수가 이미 NIC를 초기 상태로 복원하지 않은 경우 NIC를 중지합니다.
다음 다이어그램에서는 미니포트 드라이버를 언로드하는 것을 보여 줍니다.
MiniportHaltEx 는 반환하기 전에 드라이버를 언로드하는 데 필요한 작업을 완료해야 합니다. 미니포트 드라이버에 미해결 수신 표시(즉, NDIS까지 표시했지만 NDIS가 아직 반환되지 않은 수신된 네트워크 데이터)가 있는 경우 MiniportHaltEx 는 이러한 데이터가 미니포트 드라이버의 MiniportReturnNetBufferLists 함수로 반환될 때까지 반환하지 않아야 합니다.
앞의 그림은 MiniportHaltEx 함수에서 만들 수 있는 호출 집합을 보여 주는 그림입니다. 이러한 호출은 만들 수 있는 호출의 하위 집합일 뿐입니다. 실제 호출 집합은 미니포트 드라이버의 이전 작업에 따라 달라집니다. 미니포트 드라이버는 하드웨어 문제로 인해 네트워크 어댑터를 성공적으로 초기화할 수 없거나 필요한 리소스를 획득할 수 없기 때문에 MiniportInitializeEx 에서 이와 동일한 호출을 수행할 수 있습니다. 이러한 경우 MiniportInitializeEx 는 이전 작업을 실행 취소하여 드라이버를 언로드해야 합니다. 그렇지 않으면 MiniportHaltEx 는 MiniportInitializeEx의 작업을 실행 취소합니다.
다음 목록에서는 미니포트 드라이버가 수행할 수 있는 특정 작업을 되돌리는 데 필요한 호출에 대해 설명합니다.
미니포트 드라이버가 인터럽트를 등록한 경우 NdisMDeregisterInterruptEx를 호출해야 합니다.
미니포트 드라이버가 타이머 또는 타이머를 설정하는 경우 만든 각 타이머에 대해 NdisCancelTimerObject 를 호출해야 합니다. NdisCancelTimerObject에 대한 호출이 실패하면 타이머가 이미 실행되었을 수 있습니다. 이 경우 미니포트 드라이버는 MiniportHaltEx에서 반환하기 전에 타이머 처리기가 완료되기를 기다려야 합니다.
미니포트 드라이버가 NdisAllocateMemoryWithTagPriority를 사용하여 메모리를 할당한 경우 해당 메모리를 해제하려면 NdisFreeMemory 를 호출해야 합니다.
미니포트 드라이버가 NdisMAllocateSharedMemory 또는 NdisMAllocateSharedMemoryAsyncEx를 사용하여 메모리를 할당한 경우 해당 메모리를 해제하려면 NdisMFreeSharedMemory 를 호출해야 합니다.
미니포트 드라이버가 NdisAllocateNetBufferPool을 사용하여 패킷 설명자 풀에 대한 스토리지를 할당하고 초기화한 경우 해당 스토리지를 해제하려면 NdisFreeNetBufferPool 을 호출해야 합니다.
미니포트 드라이버가 하드웨어 리소스를 할당하거나 예약한 경우 이러한 리소스를 반환해야 합니다. 예를 들어 미니포트 드라이버가 NIC에서 I/O 포트 범위를 매핑한 경우 NdisMDeregisterIoPortRange를 호출하여 포트를 해제해야 합니다.