2014-03-26 1 views
0

: http://code.msdn.microsoft.com/windowshardware/Delete-File-System-b904651d타당성 검사 I이 (가)에있는 MSDN에서 미니 필터 예를 삭제 사용하고

내가 달성하기 위해 필요한 것은 :

  1. 삭제 후보에 대한 핸들을 얻기 DfPreCleanupCallback.
  2. DfPostCleanupCallback에서 - 파일을 얻은 핸들이 아닌 경우 삭제되어야한다고 결정.
  3. 또한 DfPostCleanupCallback에서 - 삭제 된 파일에 대한 일부 작업을 수행하고 핸들을 해제합니다. 무한 루프를 피하기 위해 다음에 IRP_MJ_CLEANUP을 입력 할 때 삭제를 보장합니다.

저는 미니 필터와 필터 관리자에 대해 매우 모호한 이해가 있습니다. 따라서 미니 필터 세계를 깊이 파고 들기 전에 이것이 원칙적으로 가능한지 알고 싶습니다.

짧은 버전 - 내가 의심 할 여지없이 삭제됩니다 파일을 결정하고 해당 파일에 일부 작업을 수행하는 방법이 필요합니다.

답변

1

모든 콜백 관련 정보는 정리시 FCB로 승격되기 때문에 모든 처리를 수행해야합니다.

DfPreCleanupCallback에서 삭제 후보를 처리합니다.

정리 경로에서 핸들을 얻는 것은 좋지 않은 생각입니다. 파일 개체의 카운트 증가분, 즉 정리 과정에서 핸들 수가 증가하기 때문입니다. 대신 FILE_OBJECT를 사용하는 대신 pre 콜백 (예 : FltReadFile을 사용한 작업)에 제공했습니다. 정리 요청 도달 FS 후

을했을 것이다 파일에 일부 작업을 수행

, 그것은 FILE_OBJECT에 FO_CLEANUP_COMPLETE를 설정하고 당신은 매우 당신이 그것으로 무엇을 할 수 제한. 또한 사전 콜백에서만 파일 삭제를 보장 할 수 있습니다.

+0

내가 알고있는 것처럼 삭제 작업을 취소하는 사전 정리 콜백 (삭제 처리 상태를 변경하는 경쟁 조건) 후에 발생할 수있는 몇 가지 사항이 있습니다. 즉, 전 콜백에서 파일이 100 % 확실하게 삭제 될 것임을 알 수 없습니다. 내 생각은 pre 콜백에서 발생하는 정리를 멈추고 포스트 콜백에서 삭제되었는지 결정하기위한 핸들을 얻는 것이 었습니다. 이렇게하면 파일을 필요로하지 않을 것입니다. – ollo

+0

그냥하지 마세요. 이것은 설계 상 부러진다. 청소 후에도 확신 할 수 없습니다. 이 FILE_OBJECT를 닫은 후에도. 하나의 파일에 대해 많은 FILE_OBJECT가있을 수 있습니다. –

0

@izlesa가 주석을 달았으므로 의심의 여지없이 파일이 모든 상황에서 삭제됩니다. 주로 파일이 캐쉬 관리 프로그램을 사용하여 열린 경우 파일에 대한 참조를 유지할 수 있습니다.

우려 사항이 있다면 콘텐츠를 삭제하려고 시도하기 전에 크기를 0으로 설정할 수 있습니다. 아니면 닦아. 아니면 그 일을하고 다른 숨겨진 곳으로 이사하십시오.

관련 문제