易截截图软件、单文件、免安装、纯绿色、仅160KB

如何用 DELPHI 获取 CPU 的序列号

      在多CPU或多核CPU中,会随机的获得不同的序列号.这就为我们根据CPU序列号来制作注册机带来了很大的麻烦。
Windows 2000/XP允许设置进程和线程的关系。换句话说,可以控制哪个 CPU 能够运行某些线程。这称为Affinity Mask。Windows提供了设置相似性的函数SetProcessAffinityMask ,使用它可控制获取指定CPU的序列号。
1、如何获得cpu的序列号。
使用cpuid指令来获取。
在调用CPUID之前,EAX中存放的是功能代码。在调用CPUID之后,EAX,EBX,ECX,EDX存放的是CPU的各种特征信息。这些信息也就是我们通常所说的CPU序列号。
1、如何获得cpu的序列号?
     我们可以使用使用CPUID指令来获取。
     在调用CPUID之前,EAX中存放的是功能代码。在调用CPUID之后,EAX,EBX,ECX,EDX存放的是CPU的各种特征信息。这些信息也就是我们通常所说的CPU序列号。
   MOV   EAX, 0   //获取制造商信息
   CPUID
   Mov   EAX,   1 //获得CPU的序列号
   CPUID
下面将提供三个函数供参考:
function NewCPUID: string;
const
CPUINFO = 'CPU制造商: %S 序列号: %x';
var
s: array[0..19] of Char;
MyCpuID: Integer;
begin
FillChar(s, 20, 0);
asm
push ebx
push ecx
push edx
mov eax, 0
cpuid
mov dword ptr s[0], ebx
mov dword ptr s[4], edx
mov dword ptr s[8], ecx
mov eax, 1
cpuid
mov MyCpuID, edx
pop edx
pop ecx
pop ebx
end;
Result := Format(CPUINFO, [s, MyCpuID]);
end;
function GetCPUID: TCPUID; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI, EAX [email={@Resukt]{@Resukt[/email]}
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


相关文档:

Delphi多线程学习(3):线程同步的原因

在使用多线程的时候,如果多线程对某个特定的公共数据或资源进行访问,需要对多线程进行协调操作,叫做线程同步。
     例如:三个线程分别循环地向ListBox中写入数据。没有进行同步时,写入的顺序是不确定的。
{主窗体代码}
unit Unit2;

interface

uses
Windows, Messages, SysUtils, V ......

delphi 動態安裝服務


unit winntService;
interface
uses
Windows,WinSvc,WinSvcEx;
function InstallService(const strServiceName,strDisplayName,strDescription,strFilename: string):Boolean;
procedure UninstallService(strServiceName:string);
implementation
function StrLCopy(Dest: PChar; const Source: PChar; MaxLen: C ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号