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
[69028] Re:CPU Serial 번호(어셈블리어)
김도완 [purplecofe2] 1808 읽음    2013-01-21 15:47
대부분 바이오스에서 시리얼 번호에 대한 기능이 꺼져있다고 합니다. 바이오스에서 enable시킨 후 테스트해보시고,

다른 방법으로 WMI를 이용하는 방법이 있습니다.

대충보니 UniqueID라는게 맞는 것 같네요.

http://msdn.microsoft.com/en-us/library/aa394373.aspx

참고하시길~


LeeD 님이 쓰신 글 :
: 안녕하세요.^^
:
: //---------------------------------------------------------------------------
: #include <vcl.h>
: #pragma hdrstop
:
: #include "Unit1.h"
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
: #pragma resource "*.dfm"
: TMain *Main;
: //---------------------------------------------------------------------------
: __fastcall TMain::TMain(TComponent* Owner)
:     : TForm(Owner)
: {
: }
: //---------------------------------------------------------------------------
: #pragma pack(push, 1)
: struct TCPUID
: {
: DWORD Version;
: DWORD Other;
: DWORD ExtendedFeatures;
: DWORD Features;
: };
: #pragma pack(pop)
:
: #pragma option push -w-
:
: void __fastcall CPU_ID(TCPUID* CpuID)
: {
:     __asm
:     {
:         PUSH EBX
:         PUSH EDI
:         MOV EDI, EAX
:         MOV EAX,1
:         DW 0xA20F
:         STOSD
:         MOV EAX, EBX
:         STOSD
:         MOV EAX, ECX
:         STOSD
:         MOV EAX, EDX
:         STOSD
:         POP EDI
:         POP EBX
:     }
: }
:
: void __fastcall CPU_Serial(unsigned __int64* SerialNumber)
: {
:     __asm
:     {
:         PUSH EBX
:         PUSH EDI
:         MOV EDI, EAX
:         MOV EAX, 3
:         DW 0xA20F
:         MOV EAX, ECX
:         STOSD
:         MOV EAX, EDX
:         STOSD
:         POP EDI
:         POP EBX
:     }
: }
:
: bool IsCPUIDAvailable(void)
: {
:     __asm
:     {
:         PUSHFD
:         POP EAX
:         MOV EDX, EAX
:         XOR EAX, 0x00200000
:         PUSH EAX
:         POPFD
:         PUSHFD
:         POP EAX
:         XOR EAX, EDX
:         SHR EAX, 21
:     }
: }
:
: bool GetCPUSerialNumber(unsigned __int64 *SerialNumber)
: {
:     *SerialNumber = 0;
:     if( IsCPUIDAvailable() )
:     {
:         TCPUID CpuID;
:         memset(&CpuID, 0, sizeof(TCPUID));
:         CPU_ID(&CpuID);
:         if( CpuID.Features & 0x00040000 )
:         {
:             CPU_Serial(SerialNumber);
:             return true;
:         }
:     }
:     return false;
: }
:
: #pragma option pop
:
: void __fastcall TMain::Button1Click(TObject *Sender)
: {
:     unsigned __int64 SerialNumber = 0;
:     if( GetCPUSerialNumber(&SerialNumber))
:     {
:         ShowMessage(SerialNumber);
:     }
: }
: //---------------------------------------------------------------------------
:
: 제가 CPU Serial번호를 가져오기 위하여 위와 같이 코딩하였는데요.
:
: GetCPUSerialNumber(&SerialNumber)의 리턴값이 false가 나오네요.ㅜ
:
: 저는 어디가 잘못되었는지 잘 모르겠어요ㅠㅠ
:
: 도움 주시면 감사하겠습니다.

+ -

관련 글 리스트
69027 CPU Serial 번호(어셈블리어) LeeD 2254 2013/01/21
69028     Re:CPU Serial 번호(어셈블리어) 김도완 1808 2013/01/21
69029         Re:Re:CPU Serial 번호(어셈블리어) LeeD 2048 2013/01/21
69032             Re:Re:Re:CPU Serial 번호(어셈블리어) (자답 및 재질문) LeeD 1908 2013/01/21
69036                 Re:Re:Re:Re:CPU Serial 번호(어셈블리어) (자답 및 재질문) 김도완 2875 2013/01/22
69037                     Re:Re:Re:Re:Re:감사합니당^^(내용무) LeeD 2149 2013/01/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.