NIC의 서프라이즈 제거 처리

사용자가 UI(사용자 인터페이스)를 통해 시스템에 미리 알리지 않고 실행 중인 시스템에서 NIC(네트워크 인터페이스 카드)를 제거할 때 깜짝 제거가 발생합니다.

Windows Vista 이상 버전의 운영 체제용 미니포트 드라이버는 깜짝 제거를 처리할 수 있어야 합니다. 특히 WDM(Windows 드라이버 모델) 아래쪽 가장자리가 있는 NDIS 미니포트 드라이버는 이러한 이벤트를 처리할 수 있어야 합니다. NDIS-WDM 미니포트 드라이버가 기습 제거를 처리하지 않는 경우 미니포트 드라이버가 기본 버스 드라이버로 보낸 보류 중인 IRP는 기습 제거를 완료할 수 없습니다.

Windows Vista 이상 버전의 경우 하드웨어를 직접 제어하지 않는 미니포트 드라이버(예: WDM 아래쪽 가장자리가 있는 미니포트 드라이버)는 NdisMSetMiniportAttributes를 호출할 때 NDIS_MINIPORT_ATTRIBUTES_SURPRISE_REMOVE_OK 특성 플래그를 설정해야 합니다. 이 플래그를 설정하면 사용자가 NIC를 깜짝 제거할 때 경고가 표시되지 않습니다. 기습 제거를 처리할 수 없는 미니포트 드라이버는 이 플래그를 설정해서는 안 됩니다.

MiniportDevicePnPEventNotify의 컨텍스트 외부에서 정상적인 작업 중에 기습 제거를 감지하려고 하면 놀라운 제거를 지원하는 미니포트 드라이버입니다. NIC가 제거된 후 NIC의 I/O 포트를 읽으려고 하면 일반적으로 모든 비트가 1로 설정된 반환 값이 생성됩니다. 미니포트 드라이버가 이러한 값을 읽는 경우 더 결정적인 테스트를 통해 하드웨어가 있는지 검사 합니다. 예를 들어 미니포트 드라이버는 I/O 포트에 값을 쓴 다음 해당 포트에서 값을 읽으려고 할 수 있습니다. 미니포트 드라이버는 NIC의 I/O 레지스터에서 유효한 값을 검사 수도 있습니다. 이러한 방식으로 깜짝 제거를 감지하면 미니포트 드라이버가 인터럽트 DPC에서 제거된 NIC의 레지스터를 읽으려고 할 때 무한 루프에 매달려 있지 않습니다. 이러한 방식으로 응답을 중지하는 미니포트 드라이버는 NDIS가 드라이버의 MiniportDevicePnPEventNotify 함수를 호출하지 못하도록 합니다.