이 블로그 검색

2014년 6월 19일 목요일

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에 파일이 복사됨을 알 수가 있다.



댓글 없음:

댓글 쓰기