다음을 통해 공유


미니포트 드라이버 종료 처리기

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

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

  • 무료 포트. (자세한 내용은 NDIS 포트해제를 참조하세요.)

  • MiniportInitializeEx에서 할당한 모든 하드웨어 리소스를 해제합니다.

  • NdisMDeregisterInterruptEx호출하여 인터럽트 리소스를 해제합니다.

  • MiniportInitializeEx에서 이 할당한 메모리를 해제하십시오.

  • MiniportShutdownEx 함수가 이미 NIC를 초기 상태로 복원하지 않는 한 NIC를 중지합니다.

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

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

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 포트 해제하기

미니포트 어댑터 중지

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

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