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
[69027] CPU Serial 번호(어셈블리어)
LeeD [] 2254 읽음    2013-01-21 15:30
안녕하세요.^^

//---------------------------------------------------------------------------
#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 번호(어셈블리어) 김도완 1809 2013/01/21
69029         Re:Re:CPU Serial 번호(어셈블리어) LeeD 2048 2013/01/21
69032             Re:Re:Re:CPU Serial 번호(어셈블리어) (자답 및 재질문) LeeD 1909 2013/01/21
69036                 Re:Re:Re:Re:CPU Serial 번호(어셈블리어) (자답 및 재질문) 김도완 2876 2013/01/22
69037                     Re:Re:Re:Re:Re:감사합니당^^(내용무) LeeD 2150 2013/01/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.