星五博客

Delphi下GetCPUID实现(x86和x64)

以下方法还是通过汇编实现,不过针对x64做了调整,以支持x86和x64两种环境,代码如下:

// 获取cpu序列号
type
  TCPUID = array [1 .. 4] of Longint;

function GetCPUID: TCPUID;
asm
  {$IF Defined(CPUX86)}
  push  ebx
  push  edi
  mov   edi, eax
  mov   eax, 1
  dw    $A20F
  stosd
  mov   eax, ebx
  stosd
  mov   eax, ecx
  stosd
  mov   eax, edx
  stosd
  pop   edi
  pop   ebx
  {$ELSEIF Defined(CPUX64)}
  PUSH    RBX
  PUSH    RDI
  MOV     RDI,RCX
  MOV     EAX,1
  CPUID
  mov    [rdi], eax;
  mov    [rdi+4], ebx;
  mov    [rdi+8], ecx;
  mov    [rdi+12], edx;
  POP     RDI
  POP     RBX
  {$IFEND}
  (* 调用示例
  var id: TCPUID;
  id := GetCPUID;
  ShowMessage(IntToHex(id[4], 8) + IntToHex(id[1], 8));
   *)
end;

最后注释里是使用示例,在d10.1up2中测试通过。

Delphi