获取CPUID

来源:互联网 发布:淘宝漏洞刷q币 编辑:程序博客网 时间:2024/05/16 11:39

type
   TCPUID = array[1..4] of Longint;

function GetCPUID: TCPUID; assembler; register;
asm
  PUSH    EBX         {Save affected register}
  PUSH    EDI
  MOV     EDI,EAX    
{@Resukt}
  MOV     EAX,1
  DW      $A20F       {CPUID Command}
  STOSD                {CPUID[1]}
  MOV     EAX,EBX
  STOSD               {CPUID[2]}
  MOV     EAX,ECX
  STOSD               {CPUID[3]}
  MOV     EAX,EDX
  STOSD               {CPUID[4]}
  POP     EDI         {Restore registers}
  POP     EBX
end;

function GetComputerSeries: string;
var
  //I: Integer;
  //nNum: Longint;
  CPUID: TCPUID;
begin
  Result := '';
  CPUID := GetCPUID;
  Result := IntToHex(CPUID[1] , 8) + IntToHex(CPUID[2] , 8) + IntToHex(CPUID[3]
  , 8) + IntToHex(CPUID[4] , 8);
end;

procedure SetCPU(h: THandle;CpuNo: Integer);
//CpuNo:决定了获得第几个cpu内核的第几个序列号。
var
  ProcessAffinity: Cardinal;
  _SystemAffinity: Cardinal;
begin
    GetProcessAffinityMask(h, ProcessAffinity, _SystemAffinity) ;
    ProcessAffinity := CpuNo; //this sets the process to only run on CPU 0
                              //for CPU 1 only use 2 and for CPUs 1 & 2 use 3
    SetProcessAffinityMask(h, ProcessAffinity)
end;

 

//调用

var s:string;

begin

SetCPU(GetCurrentProcess,1);//取第一个核的cpuID,没这句会随机取得到的结果有误差
s:=GetComputerSeries;

end;

原创粉丝点击