2009-05-20 4 views
0

CreateFile 함수의 경로 매개 변수가 \Windows\System32\ 인 경우 다음 오류 코드 이 표시되면서 통화가 실패한 것으로 나타났습니다.Windows7에서 CreateFile 오류

파일 경로가 맞습니다. 폴더의 소유자이므로 전화가 끊기는 이유는 무엇입니까? MS가 폴더 액세스를 금지하는 특별 정책을 추가 했습니까?

샘플 코드 :

TCHAR szFile[MAX_PATH]; 
PathCombine(szFile, g_szSystemDirectory, "settings.ini"); 

HANDLE hFile = CreateFile(szFile, 
          GENERIC_READ, 
          0, 
          NULL, 
          OPEN_EXISTING, 
          0, 
          NULL); 

if (hFile == INVALID_HANDLE_VALUE) 
{ 
    printf("INVALID FILE: %i", GetLastError()); 
    return FALSE; 
} 

답변

2
  1. 몇 가지 예제 코드를 볼 수 있습니까?
  2. 드라이브를 지정 했습니까? "C : \ Windows \ System32 \"
  3. system32에서 파일을 열려고합니까?
  4. Windows 7에서만 발생합니까? 및
  5. 왜 처음부터 system32 내부의 내용을 수정해야합니까?

Billy3

+0

1) 초 단위로 추가하겠습니다. 2) 예. 3) 예. 4) 예, XP에서 잘 작동합니다. 5) 설정 파일을로드해야합니다. – arul

+0

구성 파일이 system32에있는 이유는 무엇입니까? % appdata %에 그 값을 넣으면 안됩니까? –

+0

아,이 64 비트 OS입니까? –

0

당신은 프로그램이 아마 관리자 권한으로 실행하는 데 필요한입니다. 관리자 인 경우에도 권한을 에스컬레이션해야합니다. 프로그램을 실행할 때 마우스 오른쪽 단추를 클릭하고 "관리자 권한으로 실행"을 클릭하거나 속성을 편집하고 항상 관리자 권한으로 실행을 선택하십시오.

+0

그래도 같은 오류가 발생했습니다. – arul

2

는 32 비트 응용 프로그램이에서 읽를 CreateFile에 전화하기 전에 Wow64DisableWow64FsRedirection()를 호출 한 후, 64 비트 OS에서 실행중인 경우 : ""C \ WINDOWS \ system32를 "대신 C : \ Windows \ Syswow64 "로 변경 될 수 있습니다.

+0

잘 고맙습니다. 감사합니다. – arul

2

Windows XP를 사용하면 관리자/표준 계정 모두에서 장치 권한을 얻기 위해 관리자 권한이 필요하지 않습니다.

Windows Vista (Windows 7 (UAC))에서 장치 핸들을 얻으려면 관리자 권한이 있어야하는이 기능이 변경되었습니다.

일부 솔루션은 다음과 같습니다

  1. 를 사용하여 COM 고도 모니 커
  2. 사용 매니페스트

참고 서비스를 사용 : 한 장치이 아무튼에게에서 통계 정보를 조회해야하는 경우 관리 권한이 필요합니다. CreateFile()을 사용할 경우 dwDesiredAccess 매개 변수에 0을 지정하십시오.