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

델파이 Q&A
Delphi Programming Q&A
[15905] Re:GPU-Z이라는 프로그램과 같이 그래픽카드의 정보와 현제 상태를 구하는 방법 좀 알려주세요.
빌더(TWx) [builder] 251 읽음    2017-07-25 23:57
첫눈 님이 쓰신 글 :
: 첨부파일은 GPU-Z이라는 프로그램입니다.
:
: 이 프로그램을 실행하면 장착되어 있는 내장그래픽카드는 물론이고 추가로 장착된 그래픽카드의 모든 정보를 확인할 수 있습니다.
:
: 제가 이 기능을 구현해야 하는데요.
:
: 구글링을 해 보니 NVidia그래픽카드는 nvcpl.dll을 이용해야 하고, AMD제품은 AMD에서 제공하는 API 를 이용해야 한다고 하더군요.
:
: 하지만 Intel과 같은 내장그래픽카드에 대한 정보는 전혀 없습니다.
:
: 그밖에 다른 제조사의 그래픽카드에 대한 정보도 전혀 없구요.
:
: 하지만 GPU-Z에서 보면 어떤 제품이든 관계 없이 모든 정보를 다 보여주는 것을 보면 제조사에서 제공하는 API를 이용하지 않고
: 공통으로 사용할 수 있는 어떤 방법이 있을듯 한데 혹시 도움을 주시면 감사하겠습니다.



답변:


칩 마다 하드웨어 구조가 다 다르므로 GPU 로우레벨을 공통적으로 사용할 수 있는 방법이 있지는 않아요.
유저모드에서 사용할 수 있는 API를 제조사에서 제공해주면 그걸 이용할 수 있고
그렇지 않으면 디바이스 드라이버를 만들어서 커널모드에서 칩을 직접 액세스 할 수 밖에 없습니다.

GPU-Z라는 프로그램을 잠깐 리버스 엔지니어링으로 분석해 보니까...

GPU-Z.exe 라는 프로그램이 인스톨 된 상태에서 실행파일 크기가 4메가 정도이지만
사실 이 놈은 실행파일 크기를 줄이기 위해서 Pack 되어 있고, 이걸 끄집어 내보면
실제 실행파일의 크기는 14 MB에 이릅니다.



리버스 엔지니어링으로 분석해 본 결과, GPU-Z 프로그램은...
실행파일 안에 GPU-Z.sys라는 커널모드 디바이스 드라이버를 갖고있다가
사용자계정의 AppData/Local/Temp 디렉토리에 풀어놓고 로드하는 구조를 갖고 있습니다.

C:\\Users\\사용자계정\\AppData\\Local\\Temp\\\\GPU-Z.sys"

<Visual Studio 2017을 이용해서 GPU-Z.exe를 인젝션>






디바이스 드라이버 뿐만 아니라, 실행파일 안에 몇개의 별개의 프로그램도 같이 Embedded 되어 있는 상태인데
아마도 Intel Platform Analysis Library를 이용해서 만든 별개의 프로그램으로 보이는데, 이 놈도 같이 Temp 디렉토리에서
실행시킵니다. (캡쳐한 그림에선 가려져서 잘 안보이지만, Query_External_xxxxxxxx.exe 라는 네임 데코레이션으로)

nvidia GPU일 경우에는 일전에 답변했던 대로.. 제조사에서 제공하는 dll을 로드해서
nvapi_QueryInterface 주소를 GetProcAddress로 얻어서 유저모드 dll API를 호출해서 사용하는 구조로
GPU-Z.exe도 마찬가지로 nvidia에서 제공하는 dll을 이용하도록 만들어져 있습니다.

결국, 칩 데이타 시트를 참고해서 디바이스 드라이버를 만들어야 하는 경우도 있다는 걸 인식하고 있어야 하죠.

전체를 다 분석해 본 건 아니지만... 30분 정도 리버스엔지니어링으로 살펴본 결론은 그러네요.

+ -

관련 글 리스트
15902 GPU-Z이라는 프로그램과 같이 그래픽카드의 정보와 현제 상태를 구하는 방법 좀 알려주세요. 첫눈 206 2017-07-25
15905     Re:GPU-Z이라는 프로그램과 같이 그래픽카드의 정보와 현제 상태를 구하는 방법 좀 알려주세요. 빌더(TWx) 251 2017-07-25
15907         Re:Re:이렇게까지.... 감사합니다.. 첫눈 205 2017-07-26
15908             Re:Re:Re:이렇게까지.... 감사합니다.. 145 2017-07-27
15909                 Re: D3DKMTQueryStatistics() 라는 Undocumented API 빌더(TWx) 196 2017-07-27
15910                     Re:Re: D3DKMTQueryStatistics() 라는 Undocumented API 171 2017-07-27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.