NIC 중지
PnP 관리자는 NIC에 할당된 하드웨어 리소스를 다시 구성하거나 균형을 조정할 수 있도록 NIC를 중지합니다. 다음 단계에서는 NDIS가 NIC 중지에 참여하는 방법을 설명합니다.
PnP 관리자가 IRP_MN_QUERY_STOP_DEVICE 요청을 실행합니다.
NDIS가 이 IRP를 수신하면 드라이버 스택의 NIC에 연결된 가장 낮은 필터 드라이버의 FilterNetPnPEvent 함수를 호출합니다. 이 호출에서 NDIS는 NetEventQueryRemoveDevice의 이벤트 코드를 지정합니다.
참고 NDIS는 FilterNetPnPEvent 함수의 진입점을 보급하는 필터 드라이버에 대해서만 이 단계를 수행합니다. 필터 드라이버는 NdisFRegisterFilterDriver 함수를 호출할 때 이 진입점을 보급합니다.
FilterNetPnPEvent 함수에 대한 호출 컨텍스트 내에서 필터 드라이버는 NdisFNetPnPEvent를 호출하여 NetEventQueryRemoveDevice 이벤트를 드라이버 스택의 다음 필터 드라이버로 전달해야 합니다. 이로 인해 NDIS는 NetEventQueryRemoveDevice의 이벤트 코드를 사용하여 해당 필터 드라이버의 FilterNetPnPEvent 함수를 호출합니다.
참고 NDIS는 FilterNetPnPEvent 함수의 진입점을 보급하는 드라이버 스택의 다음 필터 드라이버에 대해서만 이 단계를 수행합니다.
드라이버 스택의 각 필터 드라이버는 스택에서 가장 높은 필터 드라이버가 NetEventQueryRemoveDevice 이벤트를 전달할 때까지 이전 단계를 반복합니다.
이 경우 NDIS는 NIC에 바인딩된 모든 프로토콜 드라이버의 ProtocolNetPnPEvent 함수를 호출합니다. 이 호출에서 NDIS는 NetEventQueryRemoveDevice의 이벤트 코드를 지정합니다.
프로토콜 드라이버가 ProtocolNetPnPEvent, NDIS 또는 PnP 관리자에서 오류 코드를 반환하여 NetEventQueryRemoveDevice 이벤트에 실패하는 경우 오류를 무시하고 이후에 IRP_MN_QUERY_STOP_DEVICE 요청을 성공시킬 수 있습니다. 따라서 프로토콜 드라이버가 NetEventQueryRemoveDevice 이벤트에 실패하더라도 프로토콜 드라이버는 NIC 제거를 처리할 준비가 되어 있어야 합니다.
PnP 관리자는 디바이스를 중지하라는 IRP_MN_STOP_DEVICE 요청 또는 보류 중인 중지를 취소하는 IRP_MN_CANCEL_STOP_DEVICE 요청을 실행합니다.
PnP 관리자가 IRP_MN_CANCEL_STOP_DEVICE 요청을 발급하는 경우 NDIS는 드라이버 스택의 NIC에 연결된 가장 낮은 필터 드라이버의 FilterNetPnPEvent 함수를 호출합니다. 이 호출에서 NDIS는 NetEventCancelRemoveDevice의 이벤트 코드를 지정합니다.
참고 NDIS는 FilterNetPnPEvent 함수의 진입점을 보급하는 필터 드라이버에 대해서만 이 단계를 수행합니다.
FilterNetPnPEvent 함수에 대한 호출 컨텍스트 내에서 필터 드라이버는 NdisFNetPnPEvent를 호출하여 NetEventCancelRemoveDevice 이벤트를 드라이버 스택의 다음 필터 드라이버로 전달해야 합니다. 이로 인해 NDIS는 NetEventCancelRemoveDevice의 이벤트 코드를 사용하여 해당 필터 드라이버의 FilterNetPnPEvent 함수를 호출합니다.
참고 NDIS는 FilterNetPnPEvent 함수의 진입점을 보급하는 드라이버 스택의 다음 필터 드라이버에 대해서만 이 단계를 수행합니다.
드라이버 스택의 각 필터 드라이버는 스택에서 가장 높은 필터 드라이버가 NetEventCancelRemoveDevice 이벤트를 전달할 때까지 이전 단계를 반복합니다.
이 경우 NDIS는 NIC에 바인딩된 모든 프로토콜 드라이버의 ProtocolNetPnPEvent 함수를 호출합니다. 이 호출에서 NDIS는 NetEventCancelRemoveDevice의 이벤트 코드를 지정합니다.
PnP 관리자가 IRP_MN_STOP_DEVICE 요청을 발급하는 경우 NDIS는 다음 단계를 수행합니다.
NIC에 바인딩된 모든 프로토콜 드라이버를 일시 중지합니다.
NIC에 연결된 모든 필터 드라이버를 일시 중지합니다.
NIC에 대한 미니포트 드라이버를 일시 중지합니다.
NIC에 바인딩된 모든 프로토콜 드라이버의 ProtocolUnbindAdapterEx 함수를 호출합니다.
NIC에 연결된 모든 필터 모듈의 FilterDetach 함수를 호출합니다.
모든 프로토콜 및 필터 드라이버가 NIC에서 바인딩되지 않고 분리되면 NDIS는 미니포트 드라이버의 MiniportHaltEx 함수를 호출합니다. NDIS는 MiniportHaltEx의 HaltAction 매개 변수를 NdisHaltDeviceStopped로 설정합니다.
IRP_MN_STOP_DEVICE 요청을 처리할 때 NDIS는 AddDevice 루틴이 호출되었을 때 NIC에 대해 만든 FDO(기능 디바이스 개체)를 삭제하지 않습니다. NDIS는 NIC에 대한 IRP_MN_REMOVE_DEVICE 요청을 받은 후에만 디바이스 개체를 삭제합니다.
PnP 관리자가 NIC를 다시 시작하는 IRP_MN_START_DEVICE 발급하는 경우 NDIS는 이전에 NIC에 대해 만든 FDO를 다시 사용합니다. 그러면 NDIS가 NIC를 다시 시작합니다. 이 절차에 대한 자세한 내용은 NIC 시작을 참조하세요.