C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[73504] Re:Windows 10에서 Registry Key를 읽어오지 못하는 이유는?
빌더(TWx) [builder] 4532 읽음    2016-04-03 22:48
예성곤 님이 쓰신 글 :
: Windows 10 64비트에서 XE4 사용 중입니다.
:
: 아래 레지스트리 찾는 코드입니다.
: 실행 파일을 관리자 권한으로 설정하여 실행시켰지만 경로명이 올라오지 않습니다.
:
: WIndows 7 32비트에서는 잘되는 코드입니다만....

:
:     String RGSKey = "\\SOFTWARE\\GPL Ghostscript\\9.15";
:
:     TRegistry *TReg = new TRegistry;
:     TReg->RootKey = HKEY_LOCAL_MACHINE;
:     bool sResult = TReg->OpenKey(RGSKey,true);
:     if (!sResult) {
:        MessageDlg("Ghost Script 9.15가 설치되어 있지 않습니다.", mtError, TMsgDlgButtons() << mbOK, 0);
:        return;
:     }
:     String FGSPath = ExtractFilePath(TReg->ReadString("GS_DLL"));
:     TReg->CloseKey();
:     delete TReg;
:
:

답변:


64bit OS에서 프로그램을 64bit로 컴파일해서 만들었다면 위의 코드는 아무런 문제가 없을 겁니다.

64bit OS 에선 커널, 디바이스 드라이버 및 시스템 dll 들 또한 64bit로 구성되어 있고... 64bit OS에서 32bit Application들은
별도의 32bit 포션들이 존재하지만 Thunk 레이어를 통해서 32bit와 64bit간에 프로세스 모드를 전환하면서 결국은 64bit 서비스
코드들을 호출하게 됩니다.

64bit OS에선 시스템 디렉토리 액세스, 레지스트리 하이브 액세스 등과 관련해서 Redirection 을 이용한 Virtualization이
이용되는데 (http://www.borlandforum.com/impboard/impboard.dll?action=read&db=free&no=25126 참고)

64bit OS 에서 32bit 애플리케이션이 위와 같은 레지스트리 하이브를 액세스 하려면 아래와 같이 명시적으로 지정을 하므로써
Redirection Virtualization을 바이패쓰 할 수 있습니다.

    TRegistry *reg = new TRegistry(KEY_READ|KEY_WOW64_64KEY);


64bit OS의 가장 기본적인 특성을 간과 하고 있는 듯...




+ -

관련 글 리스트
73503 Windows 10에서 Registry Key를 읽어오지 못하는 이유는? 예성곤 4440 2016/04/02
73504     Re:Windows 10에서 Registry Key를 읽어오지 못하는 이유는? 빌더(TWx) 4532 2016/04/03
73506         Re:Re:Windows 10에서 Registry Key를 읽어오지 못하는 이유는? 예성곤 4961 2016/04/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.