2009-10-16 3 views
2

파일 복사가 시스템에서 시작될 때마다 알려주고 파일 이름, 복사 또는 이동 대상 및 복사 시간을 얻고 싶습니다.Windows에서 파일 'COPY'작업을 감지하십시오.

이것이 가능합니까? 어떻게 생각하세요? CopyFile API 함수를 후킹해야합니까?

이미이를 수행하는 소프트웨어가 있습니까?

답변

8

Windows에는 모든 I/O 작업을 차단하고 결과적으로 추가 작업을 수행하도록 선택할 수있는 I/O 필터 개념이 있습니다. 이들은 주로 A/V 유형 시나리오에 사용되지만 다양한 작업에 맞게 프로그래밍 할 수 있습니다. 예를 들어 SysInternals Process Monitor는 I/O 필터를 사용하여 파일 수준 액세스를 확인합니다.

당신은 (명령 프롬프트에서 설치된 Fltmc.exe) MS 필터 관리자를 사용하여 현재 필터

, 당신은 드라이버를 얻을 수 있습니다 당신은 필터를 작성하는 데 도움과 자신을 개발하는 키트가를 볼 수 있습니다.

http://www.microsoft.com/whdc/driver/filterdrv/default.mspx 앤드류는 필터 드라이버가 갈 수있는 방법입니다 말한대로 깊이 정보에

1

을 얻을 수있는 출발점이다.

다른 프로그램이 파일을 다른 방법으로 복사하므로 파일 복사를 확실하게 감지 할 수있는 방법은 없습니다 (일부는 CopyFile API를 사용하고 다른 사용자는 하나의 파일을 읽고 다른 사용자에게 내용을 쓸 수 있습니다). 필터 드라이버에서 읽기 용으로 열린 파일의 해시를 계산 한 다음 프로그램이 파일 쓰기를 마친 후에도 해시를 계산할 수 있습니다. 해시가 일치하면 파일 복사본이 있음을 알 수 있습니다. 그러나이 기술은 느릴 수 있습니다. CopyFile API를 연결하기 만하면 해당 API없이 작성된 파일 사본을 놓치게됩니다. Java 프로그램 (이름 만 지정)은 CopyFile API에 액세스 할 수 없습니다.

1

복사/이동을 수행하기위한 보장 된 중앙 방법이 없기 때문에 불가능할 것입니다. 핵심 API (예 : CopyFile)에 연결할 수는 있지만 물론이 API를 사용하지 않으면 모든 응용 프로그램이 수행하는 복사/이동을 놓치게됩니다.

열려있는 파일에 대한 IO 필터를 사용하여 전체 파일 시스템을 볼 수 있고 동일한 이름과 같은 파일 크기를 가진 두 파일이 동시에 열려있는 경우 결론을 내릴 수도 있습니다. 그러나 100 % 해결책도 없습니다.

5

이 질문에 .NET 태그가 있으므로 .NET Framework에있는 System.IO.FileSystemWatcher을 사용하면됩니다. 나는 그것이 the I/O Filters that Andrew mentions in his answer을 사용하여 구현 된 것 같지만 실제로 모르겠다. 그게 당신의 필요에 맞을까요?

+3

아니요, 파일 시스템 필터가 아닌 FindFirstChangeNotification/ReadDirectoryChangesW를 사용합니다. – atomice

+0

@atomice : 나는 그것을 위해 당신의 말을 가져갈 것입니다. 정보 주셔서 감사합니다! – peSHIr

0

앞서 언급 한 것처럼 파일 복사 작업은 다양한 방법으로 구현 될 수 있으며 여러 디스크 및 메모리 전송을 포함 할 수 있으므로 이러한 작업이 발생할 때 시스템에서 간단히 알림을받을 수는 없습니다. 사용자의 경우에도 여러 가지 방법으로 콘텐츠 및 전체 파일을 복제 할 수 있습니다. 명령 복사, 다양한 도구를 사용하여 "다른 이름으로 저장", "보내기", 이동. 후드에서 복사 작업은 읽기/쓰기의 연속이며 특정 매개 변수와 관련됩니다. 그것이 성공적인 감사를 보장하는 유일한 방법입니다. CopyFile에 연결하면 Total Commander의 복사 작업이 수행되지 않습니다. 실제로는 파일 저장 -> 파일 내용 이동 -> 원래 파일 닫기 -> 새 파일 열기와 같은 "다른 이름으로 저장"작업도 제공하지 않습니다. 그런 다음 네트워크를 통한 카피, 파일 핸들 보안 컨텍스트가 프로세스 보안 컨텍스트와 다른 가장 된 복사 작업 등을 처리 할 때 상황이 다릅니다. 나는 위의 모든 것을 성취 할 수있는 직접적인 방법이 없다고 생각합니다.

그러나 일반적인 복사 작업의 대부분 (예 : Windows 탐색기, 총 사령관, 명령 프롬프트 및 기타 응용 프로그램을 통해 수행 할 때)을 알려주는 소프트웨어가 있습니다. 또한 소스 및 대상 파일 이름, 타임 스탬프 및 기타 관련 세부 정보를 제공합니다. 여기에서 찾을 수 있습니다 : http://temasoft.com/products/filemonitor.

참고 :이 제품을 개발하는 회사에서 근무하고 있습니다.