필터 드라이버 예제

Compartir

2/08/2019

Por

Categoría: Sin categoría

Comentarios: 0

FilterUnloadCallback 루틴에는 NULL 또는 FLTFL_FILTER_UNLOAD_필수일 수 있는 하나의 입력 매개 변수인 플래그가 있습니다. 필터 관리자는 이 매개 변수를 FLTFL_FILTER_UNLOAD_필수로 설정하여 언로드 작업이 필수임을 나타냅니다. 이 매개 변수에 대한 자세한 내용은 PFLT_FILTER_UNLOAD_CALLBACK 을 참조하십시오. DriverEntry 루틴이 성공하지 못한 상태 값을 반환하는 경우 NTSTATUS 값은 미니필터 드라이버를 언로드하여 응답합니다. 미니 필터 드라이버의 FilterUnload호출 루틴이 호출되지 않습니다. 이러한 이유로 DriverEntry 루틴은 성공하지 못하는 상태 값을 반환하기 전에 시스템 리소스에 할당된 메모리를 해제해야 합니다. 샘플 드라이버에는 새로 도착한 볼륨에 연결하는 데 일반적으로 필요한 기능이 없습니다. 운전자가 가능한 한 쉽게 이해할 수 있도록 하기 위해 수행됩니다. 새로 도착한 볼륨을 추적하기 위해 IRP_MJ_FILE_SYSTEM_CONTROL 핸들러를 직접 작성할 수 있습니다. 첫째, 파일 시스템 필터 드라이버를 개발하려면 Microsoft 웹 사이트에서 IFS 또는 WDK 키트가 필요합니다. 또한 WDK/IFS 키트를 설치한 경로에 %WINDDK% 환경 변수를 설정해야 합니다.

분리 장치는 다음 드라이버를 호출하지 않고 처리해야 하는 특정 빠른 I/O 요청입니다. 파일 시스템 장치 스택에서 분리 한 후 필터 장치를 삭제해야합니다. 아래에서 이 요청을 쉽게 관리하는 방법을 보여 주는 예제 코드를 찾을 수 있습니다. Minifilter 모델은 파일 시스템 필터 드라이버 개발을 위한 우수한 조직 및 지원 프레임워크를 제공하기 때문에 이는 좋은 이유입니다. 합리적으로 좋은 문서와 GitHub의 중요한 예제 집합을 통해 많은 개발자는 파일 시스템 Minifilter를 작성하는 것이 자신의 능력 내에 있다고 생각합니다. 그리고 그들은 맞아요… 특정 경계 내에 머무르십시오. FltCancelFileOpen의 호출자는 IRQL <= APC_LEVEL에서 실행중이어야 합니다. 그러나 minifilter 드라이버는 IRP_MJ_CREATE 작업의 경우 CREATE를 시작된 스레드의 컨텍스트에서 IRQL = PASSIVE_LEVEL에서 사후 작업 콜백 루틴이 호출되므로 사후 생성 콜백 루틴에서 이 루틴을 안전하게 호출할 수 있습니다. 작업. 이제 파일 시스템 필터의 작동 방식을 보여 드리겠습니다. 이를 위해 Sysinternals DebugView for Windows를 사용하여 디버그 출력과 OSR 장치 트리를 모니터링하여 장치 및 드라이버를 봅니다.

Windows 파일 시스템 필터 드라이버는 각 파일 시스템 I/O 작업(생성, 읽기, 쓰기, 이름 바꾸기 등)중에 호출됩니다. 따라서 파일 시스템의 동작을 수정할 수 있습니다. 파일 시스템 필터 드라이버는 몇 가지 특별한 개발 단계가 필요하지만 레거시 드라이버와 비슷합니다. 보안, 백업, 스냅샷 및 바이러스 백신 소프트웨어는 이러한 드라이버를 사용합니다. DriverObject – 예를 들어, 변경 사항 추적 및 버전 관리 격리 미니 필터를 고려하여 시스템에서 만든 드라이버 개체에 대한 포인터입니다. Word 의 한 복사본은 파일의 최신 버전을 적극적으로 편집하는 반면 다른 Word 인스턴스(다른 사용자가 실행중인 경우)는 이전 버전의 파일을 적극적으로 편집할 수 있습니다. 들어오는 모든 I/O 작업을 모두 펜딩해야 하는 미니 필터 드라이버는 이 루틴을 호출하면 시스템 작업 큐가 침수될 수 있으므로 FltQueueDeferredIoWorkItem과 같은 루틴을 사용하여 작업을 중단해서는 안 됩니다. 대신 이러한 미니필터 드라이버는 취소 안전 큐를 사용해야 합니다.

취소 안전 큐 사용에 대한 자세한 내용은 FltCbdq초기화를 참조하십시오. 이 명령은 서비스 관리자에게 FsFilter라는 이름으로 서비스 항목을 제거하도록 지시합니다. 미니필터 드라이버의 사전 작업 콜백 루틴이 FLT_PREOP_SUCCESS_NO_CALLBACK을 반환하는 경우 CompleteContext 출력 매개 변수에서 NULL을 반환해야 합니다.