2016-12-24 3 views
0

사용자가 시작한 I/O 작업 만 감지해야합니다. 내가 사용자라고 말하면 실제로 사용자를 의미합니다 (파일을 열려면 두 번 클릭하십시오, 등을 입력하십시오).MiniFilter - 사용자가 시작한 I/O 활동 만 감지하는 방법?

데이터 -> 요청자 모드 == 1은 사용자 모드 만 인쇄하고 사용자가 시작한 작업이 필요합니다.

그래서 사용자 자신이 만든 거래 만 인쇄하는 방법을 알아야합니다. (열기 파일, 더블 클릭, 입력 등 ... 이전에 말한 것처럼)

어떤 제안 사항이 있습니까?

감사합니다.

답변

0

파일을 두 번 클릭하면 Explorer에서 사용자를 대신하여 작업을 수행하도록 요청합니다. 익스플로러는 파일의 확장자를 검사하고, 해당 확장자와 연결된 응용 프로그램을 찾고 파일을 여는 지시 사항을 사용하여 실행합니다.

Windows 로더는 응용 프로그램을 메모리에로드하고 실행되도록 설정합니다. 그렇게하기 위해서는 적어도 실행 파일과 대개 하나 이상의 DLL을 열어야합니다. 응용 프로그램이 시작되면 사용자가 요청한 파일을 열기 전에 일부 구성 파일을 열 수도 있습니다.

이러한 모든 열기 작업은 동일한 컨텍스트에서 수행됩니다. 커널은 파일을 시작한 프로세스를 알지만 Windows 로더에서 열 었는지 또는 응용 프로그램 자체에서 열 었는지 알 수 없거나 구성 파일과 사용자가 두 번 클릭 한 파일을 구별 할 수있는 방법이 없습니다. 따라서 파일 시스템 필터 드라이버에서 사용자가 시작한 파일 열기 작업을 감지 할 수는 없습니다.

Windows 탐색기 확장 프로그램을 사용할 수도 있지만 탐색기 나 표준 대화 상자 중 하나를 사용하여 열리는 파일 (모든 응용 프로그램은 아니지만)에 대해서만 작동합니다.

0

데이터 -> RequestorMode == 1, 인쇄 만 사용자 모드

그래서

if (Data->RequestorMode == UserMode) DbgPrint("%x\n", Data->RequestorMode);

만 인쇄 UserMode

또는 내가 더 잘 말할 수 - if UserMode print UserMode - 인쇄 단지 UserMode ..

+0

나 자신을 더 잘 설명 할 수있는 예제를 제공 할 것입니다. abc.txt 파일을 열어 보겠습니다. 사용자 모드 호출은 다음과 같습니다. dll 파일을 열고 메모장을 열고 abc.txt를 엽니 다. 이것을 필터링하여 abc.txt (또는 사용자가 열어 본 다른 모든 것) 만 잡으려고합니다. 사용자 (사람)가 열어 놓은 것만 잡는 방법은 무엇입니까? 더블 클릭과 엔터 키처럼) – user3449011

+0

@ user3449011 : 할 수 없습니다. Windows는 프로그램이 파일을 여는 것을 알고 있습니다. 사용자가 명시 적으로 또는 다른 이유로 파일을 여는 지 여부를 알 수있는 방법이 없습니다. –

+0

@HarryJohnston - 정말 OP는 사용자 또는 커널 모드에서 찾았습니다. 요청했습니다. 그는 무엇인지 이해할 수 없다. - 'FLT_CALLBACK_DATA.RequestorMode' - http://stackoverflow.com/questions/41292697/minispy-driver-user-mode-call – RbMm

관련 문제