2017. 2. 22. 09:16ㆍIT-개발/winapi 및 MFC
모르고 있었네요~ ㅠㅠ.. 이런 중요한 정보를..
그래서 msdn에서 가져온 좋은 예제도 곁들입니다.
(펌) : system32폴더와 syswow64폴더
64비트 윈도우즈에서 GetSystemDirectory 함수를 호출하면 어떤 결과가 나올까.
만약 32비트 프로세스에서 실행을 한다면 c:\windows\system32 가 나오게 된다.
그리고, 64비트 프로세스에서도 마찬가지로 c:\windows\system32 가 나오게 된다.
하지만 이건 같은것이 아니다.
32비트 프로세스에서 c:\windows\system32 폴더에 뭔가를 쓰게 되면 실질적으로는 c:\windows\syswow64 폴더에 써지게 된다. 즉, 내부적으로 저렇게 리다이렉트가 되는 것이다.
경로를 코드상에 c:\windows\system32 로 하드코딩한 경우도 있을 것이고 GetSystemDirectory 같은 거로 구했을 수도 있을 것이다.
두 경우 다 보이기에는 c:\windows\system32 로 보이지만, 운영체제 내부적으로 syswow64 폴더로 리다이렉트를 해주게 된다. 이렇게 64비트 운영체제에서 32비트 프로세스가 호환되도록 해놓은 것이다.
64비트 프로세스에서는 c:\windows\system32 가 코드상으로나 물리적으로나 시스템폴더가 된다.
용어상으로는 32비트 프로세스는 system32, 64비트 프로세스는 syswow64 일거 같으나, 위와 같이 전혀 그렇지가 않은 것이다.
SysWow64 폴더는 32비트 프로세스를 위한 폴더인 것이다.
간단한 테스트로, 탐색기로 c:\windows\system32에 있는 cmd.exe 와 c:\windows\syswow64 에 있는 cmd.exe 를 실행시킨다.
작업 관리자로 보면 system32에 있는 cmd.exe는 64비트로 실행되고 있고, syswow64에 있는 cmd.exe는 32비트로 실행된다.
syswow64에 있는 cmd.exe 에서 경로를 cd c:\windows\system32 로 옮겨 본다.
그런 후 그 폴더로 파일을 하나 복사해본다.
탐색기로 그 복사된 파일을 찾아보면 c:\windows\system32 폴더에는 없고, syswow64 폴더에 복사된 것을 확인할 수 있다.
물론, syswow64의 cmd.exe 에서는 system32 에 파일이 복사된 것으로 나온다... 즉, 리다이렉트가 된 것이어서 프로세스에서는 자신이 system32에 있는것으로 판단하지 syswow64 경로에 있다고 판단을 못하는 것이다.
마찬가지로 system32에 있는 cmd.exe로 꼭같은 작업을 해보면 정상적으로 c:\windows\system32에 파일이 복사됨을 알 수가 있다.
(msdn 추가 예제)
https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms724426(v=vs.85).aspx
[출처] system32폴더와 syswow64폴더|작성자 김기용
'IT-개발 > winapi 및 MFC' 카테고리의 다른 글
MFC Class 이름 변경 (0) | 2017.03.10 |
---|---|
파일이동 - sample - SHFileOperation (0) | 2017.03.03 |
Window Version 구하기 (0) | 2017.02.16 |
COM DLL만으로 tlb파일 생성및 COM사용하기 (펌) (0) | 2016.08.24 |
[Sample] 파일크기 구하기... (0) | 2016.06.16 |