대부분 바이오스에서 시리얼 번호에 대한 기능이 꺼져있다고 합니다. 바이오스에서 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가 나오네요.ㅜ
:
: 저는 어디가 잘못되었는지 잘 모르겠어요ㅠㅠ
:
: 도움 주시면 감사하겠습니다.