우리는 현재 WriteFile
(또는 CFile :: Write - 대신 내부적으로 WriteFile을 호출)이라는 문제에 직면하여 Win32 오류 5
ERROR_ACCESS_DENIED
을 발생시킵니다.WriteFile이 ERROR_ACCESS_DENIED를 반환하게하는 원인은 무엇입니까?
(편집 :.! 우리가 행동을 repro 수 수 없습니다 우리는 순간에이 모든이 개의 cfile :: 쓰기이었다 소스 라인을 나타내는 오류 ERROR_ACCESS_DENIED로 포함하는 로그 파일입니다)
(EDIT :이 파일은 지역 드라이브에 그것은 실제로 파일이 아닌 디렉토리)
이제 WriteFiles's documentation 정말 도움이되지 않으며, 간단한 테스트 응용 프로그램과 함께 실험을하면 다음과 같은 결과를 얻을 :.
- WriteFile 이 일 때 쓰기를 위해 열리지 않은 파일 핸들 (예 : 파일 핸들)에 대해 호출되면 ERROR_ACCESS_DENIED가됩니다. 읽기 전용으로 열림). 핸들이 유효하지 않거나 파일이 파일에 대한 모든
- 액세스 권리, 또는 쓰기 보호 플래그 열려 있지
- 경우
- 이 은 하지 원인은 ERROR_ACCESS_DENIED합니다 이후에 을 수정하면 해당 프로세스에서 파일을 연 것입니다. (파일을 여는 것이 실패 때문이이 전에 을 수정하는 경우 파일을 열, 우리는의 WriteFile에 도착하지 않습니다.)
- 을 파일은 어떻게 든 (다른 프로세스/핸들이 것입니다 최상의 결과에 오류가
32
ERROR_SHARING_VIOLATION 잠겨). 실제로 파일이 읽기 플래그 대신 쓰기 플래그를 연 경우 분명히이 호출에 대한 유일한 가능성은 실패 할 상황으로 우리를 잎
. 그러나 코드를 살펴보면 이럴 가능성이 매우 낮습니다. (인해 우리의 추적,
에 우리는
의 WriteFile이 실패했음을 확신 할 수 이러한 밖으로 추적하지 않기 때문에
우리는 오류가 ERROR_ACCESS_DENIED 것을 확신 할 수 있습니다, 우리는 개방 플래그의 100.1 % 확신 할 수 없다.)
WriteFile (CFile :: Write)로 인해 ERROR_ACCESS_DENIED가 발생하는 다른 알려진 상황이 있습니까?
주는 :
가- 파일이 내가 수행
- 모든 테스트는 그 동안 표시 따라서이 디렉토리가 또는 somesuch 수 없습니다 개방되었다 : 추가로이 질문의 맥락을 명확히하기 위해 파일을 열 수 없으므로 삭제할 수 없습니다. 따라서 파일은 여전히 WriteFile 호출에 있어야합니다.
- 파일은 네트워크 드라이브가 아닌 로컬 드라이브에 있습니다.
나는 우리가 WINDOWS XP SP3을 실행하고 당신이 그것을 디버깅 할 수 있습니다, 당신이해야하는 경우 응용 프로그램이 비주얼 스튜디오 2005
왜 오프닝 플래그를 추적 할 수 있습니까? 코드를 편집하고 싶지 않으면 프로세스 모니터를 사용하여 코드를 검사하면됩니다. –
물론 추적을 추가 할 수 있습니다. 이는 고객 사이트에서 한 번만 발생합니다. 거기에 디버거를 추가 할 수있는 방법은 없습니다. –
파일 시스템 필터 드라이버로 인해 바이러스 방지 스캐너가 가장 확실한 예가 될 수 있습니다 (암호화 등의 다른 기능이 있지만). – Luke