다음을 통해 공유


필터 모듈 일시 중지

실행 중인 필터 모듈을 일시 중지하기 위해 NDIS는 필터 드라이버의 FilterPause 함수를 호출합니다. 필터 모듈은 FilterPause 함수에서 실행이 시작될 때 일시 중지 상태로 들어갑니다.

NDIS는 플러그 앤 플레이 작업의 일부로 필터 모듈을 일시 중지하여 드라이버 스택을 일시 중지합니다. 드라이버 스택 일시 중지에 대한 개요는 드라이버 스택 일시 중지를 참조하세요.

일시 중지 상태에 있는 필터 모듈을 대신하여 필터 드라이버는 다음과 같습니다.

  • 새 수신 표시가 시작되지 않아야 합니다.

    보내기 및 받기 작업에 대한 자세한 내용은 모듈 보내기 및 받기 작업 필터링을 참조하세요.

  • 필터 드라이버가 시작되고 NDIS가 완료되지 않은 수신 작업이 있는 경우 필터 드라이버는 NDIS가 이러한 작업을 완료할 때까지 기다려야 합니다. 일시 중지 작업은 NDIS가 이러한 모든 미해결 수신 표시에 대해 FilterReturnNetBufferLists 함수를 호출할 때까지 완료되지 않습니다.

  • 기본 드라이버가 즉시 NDIS로 시작되었음을 나타내는 미해결 수신 표시를 반환해야 합니다. 드라이버가 이러한 미해결 수신 표시에 대해 NdisFReturnNetBufferLists 함수를 호출할 때까지 일시 중지 작업이 완료되지 않습니다. 드라이버가 기본 드라이버에서 수신하는 버퍼를 큐에 대기하는 경우 이러한 미해결 수신 표시가 존재할 수 있습니다.

  • NdisFReturnNetBufferLists 함수를 호출하여 기본 드라이버가 즉시 NDIS로 시작된다는 새로운 수신 표시를 반환해야 합니다. 필요한 경우 드라이버는 수신 표시를 복사하여 반환하기 전에 큐에 대기할 수 있습니다.

    참고NdisFReturnNetBufferLists 는 해당 FilterReceiveNetBufferLists 호출에 설정된 NDIS_RECEIVE_FLAGS_RESOURCES 플래그로 표시된 NBL에 대해 호출해서는 안 됩니다. 이러한 NCL은 FilterReceiveNetBufferLists 루틴에서 반환하여 동기적으로 NDIS로 반환됩니다.

  • 새 송신 요청이 시작되지 않아야 합니다.

  • 필터 드라이버가 시작되고 NDIS가 완료되지 않은 송신 작업이 있는 경우 필터 드라이버는 NDIS가 이러한 작업을 완료할 때까지 기다려야 합니다. NDIS가 이러한 모든 미해결 송신 요청에 대해 FilterSendNetBufferListsComplete 함수를 호출할 때까지 일시 중지 작업이 완료되지 않습니다.

  • NdisFSendNetBufferListsComplete 함수를 호출하여 FilterSendNetBufferLists 함수에 대한 모든 새 보내기 요청을 즉시 반환해야 합니다. 필터 드라이버는 각 NET_BUFFER_LIST 구조체의 상태 멤버를 NDIS_STATUS_PAUSED 설정해야 합니다.

  • NdisFIndicateStatus 함수를 사용하여 상태 표시를 제공할 수 있습니다.

    상태 표시에 대한 자세한 내용은 필터 모듈 상태 표시를 참조하세요.

  • FilterStatus 함수에서 상태 표시를 처리해야 합니다.

  • FilterOidRequest 함수에서 OID 요청을 처리해야 합니다.

    OID 요청에 대한 자세한 내용은 모듈 OID 요청 필터링을 참조하세요.

  • OID 요청을 시작할 수 있습니다.

  • 연결 작업 중에 드라이버가 할당한 리소스를 해제하면 안 됩니다.

  • 보내기 및 수신 작업을 중지해야 하는 경우 타이머를 취소해야 합니다.

    타이머에 대한 자세한 내용은 NDIS 6.0 타이머 서비스를 참조하세요.

필터 드라이버가 송신 및 수신 작업을 성공적으로 일시 중지한 후에는 일시 중지 작업을 완료해야 합니다. 필터 드라이버는 FilterPause에서 각각 NDIS_STATUS_SUCCESS 또는 NDIS_STATUS_PENDING 반환하여 일시 중지 작업을 동기적으로 또는 비동기적으로 완료할 수 있습니다.

드라이버가 NDIS_STATUS_PENDING 반환하는 경우 일시 중지 작업을 완료한 후 NdisFPauseComplete 함수를 호출해야 합니다.

일시 중지됨 상태에 있는 필터 모듈을 대신하여 필터 드라이버는 다음과 같습니다.

  • 새 수신 표시가 시작되지 않아야 합니다.

  • NdisFReturnNetBufferLists 함수를 호출하여 기본 드라이버가 즉시 NDIS로 시작된다는 새로운 수신 표시를 반환해야 합니다. 필요한 경우 드라이버는 수신 표시를 복사하여 반환하기 전에 큐에 대기할 수 있습니다.

  • 새 송신 요청이 시작되지 않아야 합니다.

  • NdisFSendNetBufferListsComplete 함수를 호출하여 FilterSendNetBufferLists 함수에 대한 모든 새 보내기 요청을 즉시 반환해야 합니다. 필터 드라이버는 각 NET_BUFFER_LIST 구조체의 상태 멤버를 NDIS_STATUS_PAUSED 설정해야 합니다.

  • NdisFIndicateStatus 함수를 사용하여 상태 표시를 제공할 수 있습니다.

  • FilterStatus 함수에서 상태 표시를 처리해야 합니다.

  • FilterOidRequest 함수에서 OID 요청을 처리해야 합니다.

  • OID 요청을 시작할 수 있습니다.

필터 드라이버가 일시 중지 상태에 있는 동안 NDIS는 연결, 분리 또는 다시 시작 요청과 같은 다른 플러그 앤 플레이 작업을 시작하지 않습니다. NDIS는 필터 드라이버가 일시 중지 됨 상태인 후 분리 또는 다시 시작 요청을 시작할 수 있습니다. 필터 모듈을 분리하는 방법에 대한 자세한 내용은 필터 모 듈 분리를 참조하세요. 필터 모듈을 다시 시작하는 방법에 대한 자세한 내용은 필터 모듈 시작을 참조하세요.