2014-02-14 2 views
1

특정 상황에서 파일/디렉터리 액세스를 허용하지 않을 파일 필터 드라이버가 있습니다. IoRegisterFsRegistrationChange을 사용하여 파일 시스템 변경에 대한 알림을 받고 적절한 볼륨 장치 개체에 연결합니다.파일 필터 드라이버 intereres 페이지 파일

일반적으로 통과 필터입니다. 그것이 처리하는 유일한 것은 IRP_MJ_CREATE입니다 (실제로 파일/디렉토리 액세스의 일부 유형을 허용하지 않습니다). 다른 모든 IRP 및 빠른 I/O 요청은 기본 장치로 전달됩니다.

한 가지를 제외하고는 정상적으로 작동합니다. 시스템 시작 중에 드라이버가로드 된 경우 (SERVICE_SYSTEM_START) - 필자는 시스템 페이징 파일을 사용할 수 없다는 것을 잘 모른다. 사용자 로그인 후 "성능 옵션"팝업 대화 상자가 표시됩니다. 가상 메모리 페이징 파일을 사용할 수 없습니다 (이 대화 상자 팝업 IMHO 트리거하는 것입니다).

나중에 드라이버를 동적으로로드하면 눈에 띄는 문제는 없으며 모든 것이 정상적으로 작동합니다.

나는 다른 모든 요청과 마찬가지로 IRP_MJ_CREATE의 처리를 비활성화하려고 시도했지만 아무 것도 변경되지 않았습니다.

나는 코드를 보지 않고 문제가 어디에 있는지 일반적으로 말하기 어렵다는 것을 알고 있습니다. 그러나 어쨌든, 이것은 알려진 문제입니까? 무엇을 확인해야합니까? 이것은 적절한 방법으로 일부 요청을 통과시키지 못하는 증상입니까, 아니면 장치 개체를 볼륨 장치 개체에 연결 한 경우에도 이러한 문제가 발생할 수 있습니까?

가능한 모든 아이디어를 환영합니다. 미리 감사드립니다.

답변

1

문제의 원인을 찾았습니다. Fast-I/O 요청을 처리하는 데 문제가 없었으며 장치가 대상 장치에 연결되는 방식도 문제가 아닙니다.

결국 드라이버 디스패치 테이블에 하나의 I/O 디스패치 처리기가 포함되지 않았습니다. 즉, 내 코드이었다 :

for (UINT i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) 
    pDriverObject->MajorFunction[i] = Dispatch; 

가있다한다 반면 : 내가 놓친

for (UINT i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++) 
    pDriverObject->MajorFunction[i] = Dispatch; 

기능은 IRP_MJ_PNP이었다 - 플러그 앤 플레이 관리자 요청 처리기. 어떤 파일 시스템 드라이버가 필요합니다. 코드를 수정 한 후에 문제가 사라졌습니다.

누구나 감사합니다.