다음을 통해 공유


필터 드라이버 초기화

필터 드라이버 초기화는 시스템이 드라이버를 로드한 직후에 발생합니다. 드라이버 로드를 시스템 서비스로 필터링합니다. 시스템은 미니포트 드라이버가 로드되기 전, 도중 또는 후에 언제든지 필터 드라이버를 로드할 수 있습니다. NDIS는 필터 드라이버에서 지원하는 유형의 미니포트 어댑터를 사용할 수 있게 되고 필터 드라이버 초기화가 완료된 후 필터 모듈을 미니포트 어댑터에 연결할 수 있습니다.

드라이버 스택이 시작되는 동안 시스템이 아직 로드되지 않은 경우 필터 드라이버를 로드합니다. 필터 모듈을 포함하는 드라이버 스택을 시작하는 방법에 대한 자세한 내용은 드라이버 스택 시작을 참조하세요.

필터 드라이버가 로드되면 시스템은 드라이버의 DriverEntry 루틴을 호출합니다.

시스템은 DriverEntry에 다음 두 인수를 전달합니다.

  • I/O 시스템에서 만든 드라이버 개체에 대한 포인터입니다.

  • 드라이버별 매개 변수가 저장되는 위치를 지정하는 레지스트리 경로에 대한 포인터입니다.

드라이버가 NDIS 필터 드라이버로 성공적으로 등록되면 DriverEntry는 STATUS_SUCCESS 또는 해당 NDIS_STATUS_SUCCESS 반환합니다. NdisXxx 함수 또는 커널 모드 지원 루틴에서 반환된 오류 상태 전파하여 DriverEntry가 초기화에 실패하면 드라이버가 로드된 상태로 유지되지 않습니다. DriverEntry 는 동기적으로 실행되어야 합니다. 즉, STATUS_PENDING 또는 해당 NDIS_STATUS_PENDING 반환할 수 없습니다.

필터 드라이버는 NDIS에 필터 드라이버로 등록할 때 드라이버 개체를 NdisFRegisterFilterDriver 함수에 전달합니다. 드라이버는 레지스트리 경로를 사용하여 구성 정보를 가져올 수 있습니다. 필터 드라이버 구성 정보에 액세스하는 방법에 대한 자세한 내용은 필터 드라이버에 대한 구성 정보 액세스를 참조하세요.

필터 드라이버는 DriverEntry 루틴에서 NdisFRegisterFilterDriver를 호출합니다. 필터 드라이버는 FilterCharacteristics 매개 변수의 NdisFRegisterFilterDriverNDIS_FILTER_DRIVER_CHARACTERISTICS 구조를 전달하여 FilterXxx 함수 집합을 내보냅니다.

NDIS_FILTER_DRIVER_CHARACTERISTICS 구조체는 필수 및 선택적 FilterXxx 함수의 진입점을 지정합니다. 일부 선택적 함수는 무시할 수 있습니다. 함수 우회에 대한 자세한 내용은 데이터 바이패스 모드를 참조하세요.

NdisFRegisterFilterDriver를 호출하는 드라이버는 FilterXxx 함수를 즉시 호출할 수 있도록 준비해야 합니다.

NDIS_FILTER_DRIVER_CHARACTERISTICS 구조체는 이러한 필수 FilterXxx 함수의 진입점을 지정합니다.

FilterAttach

FilterDetach

FilterRestart

FilterPause

NDIS_FILTER_DRIVER_CHARACTERISTICS 구조체는 이러한 선택 사항의 진입점을 지정하며 런타임에 변경할 수 없는 FilterXxx 함수는 다음과 같습니다.

FilterSetOptions

FilterSetModuleOptions

FilterOidRequest

FilterOidRequestComplete

FilterStatus

FilterNetPnPEvent

FilterDevicePnPEventNotify

FilterCancelSendNetBufferLists

NDIS_FILTER_DRIVER_CHARACTERISTICS 구조체는 이러한 선택 사항인 FilterXxx 함수의 기본 진입점을 런타임에 변경할 수 있는 기본 진입점을 지정합니다.

FilterSendNetBufferLists

FilterSendNetBufferListsComplete

FilterReturnNetBufferLists

FilterReceiveNetBufferLists

앞의 네 가지 함수도 NDIS_FILTER_PARTIAL_CHARACTERISTICS 구조체에 정의됩니다. 이 구조체는 FilterSetModuleOptions 함수에서 NdisSetOptionalHandlers 함수를 호출하여 런타임에 변경할 수 있는 함수를 지정합니다. 필터 드라이버가 런타임에 이러한 부분 특성을 변경하는 경우 FilterSetModuleOptions에 대한 진입점을 제공해야 합니다. 부분 특성은 각 필터 모듈마다 다를 수 있습니다. 자세한 내용은 필터 모듈 시작을 참조하세요.

NDIS는 NdisFRegisterFilterDriver 호출 컨텍스트 내에서 FilterSetOptions 함수를 호출합니다. FilterSetOptions는 선택적 서비스를 NDIS에 등록합니다. 자세한 내용은 선택적 필터 드라이버 서비스 구성을 참조하세요.

NdisFRegisterFilterDriver에 대한 호출이 성공하면 NDIS는 NdisFilterDriverHandle의 변수를 필터 드라이버 핸들로 채웁니다. 필터 드라이버는 이 핸들을 저장하고 나중에 이 핸들을 입력 매개 변수로 필터 드라이버 핸들이 필요한 NdisFDeregisterFilterDriver와 같은 NDIS 함수에 전달합니다. 드라이버가 언로드되면 NdisFDeregisterFilterDriver 함수를 호출하여 NdisFRegisterFilterDriver에서 할당한 드라이버 리소스를 해제해야 합니다.

FilterSetOptions가 반환되면 필터 모듈은 분리된 상태입니다. NDIS는 FilterSetOptions 호출이 반환된 후 언제든지 필터 드라이버의 FilterAttach 함수를 호출할 수 있습니다. 드라이버는 FilterAttach 함수에서 필터 모듈별 초기화를 수행합니다. 드라이버 스택에 필터 모듈을 연결하는 방법에 대한 자세한 내용은 필터 모듈 연결을 참조하세요.

필터 드라이버는 DriverEntry에 필요한 다른 드라이버별 초기화도 수행합니다. 필터 드라이버는 FilterDriverUnload 루틴에서 할당하는 드라이버별 리소스를 해제해야 합니다. 자세한 내용은 필터 드라이버 언로드를 참조하세요.