열린 파일의 공유 권한을 어떻게 감지합니까? 카드 인쇄 소프트웨어가 있습니다. 둘 다 인쇄

파일을 여는 방법에 대한 세부 정보 (특히 다른 프로세스에 대한 권한)를 탐지하기 위해 어떤 소프트웨어를 사용할 수 있습니까?

CardFive와 CardFive를 획득하고 기존 소프트웨어를 유지 관리하는 Zebra Card Studio의 두 가지 버전의 카드 인쇄 소프트웨어가 있습니다.

둘 다 인쇄 지침을 위해 CSV 파일을 엽니 다. 이전 버전을 사용하면 소프트웨어의 후속 인스턴스에서 해당 지침을 수정할 수 있습니다. 새 버전은 수정하지 않습니다. 수정을 거부합니다.

문제는 파일 잠금 권한, 즉 이전 소프트웨어가 OF_SHARE_DENY_NONE (.NET FileShare Enumeration 의 ReadWrite )으로 열려 있고 새 소프트웨어가 더 큰 공유 제한으로 열립니다.

네트워크 파일이 어떻게 잠겨 있는지 정확히 어떻게 알 수 있습니까? Process Explorer에서 두 응용 프로그램 버전의 여러 인스턴스를 살펴 보았지만 열린 방법이 아닌 파일이 열린 프로세스 만 표시합니다.
여기에 이미지 설명을 입력하십시오

동시 쓰기 액세스로 인해 데이터 무결성 문제가 발생할 수 있음을 알고 있습니다. 이 특정 경우에는 문제가 될 것으로 예상되지 않습니다.



답변

Windows의 파일 잠금은 두 가지 수준에서 발생합니다. 프로그램은 전체 파일 ( CreateFile API) 또는 파일 영역 ( LockFileEx API)을 잠글 수 있습니다 . Windows API (Win32)는 파일을 여는 방법을 파악하는 표준 방법을 제공하지 않습니다. API NtQueryObject 는 파일을 여는 방법에 대한 정보를 제공 할 수 있지만 공유 요구 사항을 포함하지 않으며 언제든지 변경 될 수있는 내부 API입니다.

그러나 응용 프로그램은 열려있는 파일을 열려고 시도하고 액세스 거부로 인해 여는 데 실패한 경우를 확인하여 열린 파일의 공유 의미를 근사 할 수 있습니다. 이러한 프로그램은 (1) 액세스 금지, (2) 읽기 액세스, (3) 쓰기 액세스를 위해 파일을 열려고 시도합니다. 그런 다음 응용 프로그램은 파일의 영역을 잠그려고 시도하여 파일의 영역이 잠겨 있는지 확인할 수 있습니다.

이 방법의 문제점은 문제의 파일을 적극적으로 사용하는 응용 프로그램을 방해하여 파일이 실패 할 수 있다는 것입니다.