WinXP中如何获取主板Bios的序列号? WinXP中如何获取主板Bios的序列号? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在计算机的BIOS芯片里有一个序列号,即BIOS序列号,据说是每一台计算机都不同的。有些软件就用这个序列号作为一个唯一的标识来使用。而在Windows优化大师中更是可以看到这个序列号,那么,他们是怎么读取的呢? 不同品牌的计算机有不同的BIOS芯片,这给BIOS序列号的读取造成了一些麻烦。但这个序列号都是存储在物理内存的0x000f0000-0x000fffff这个区域里,具体的地址根据BIOS生产厂家有所不同。 常见的BIOS生产厂家有AMI,Award,Phoenix;其中Phoenix一般用在IBM的笔记本电脑中。那么怎么鉴别BIOS的生产厂家呢?其实我也不知道有什么简单的标志,只是采取了搜索法,搜索上述内存区域,一旦发现"AMI"这个字符串就认为是AMI的BIOS,依此类推。 根据试验发现,AMI的序列号地址在0x000ff478,Award的序列号地址在0x000fec71,而Phoenix的序列号不太明确,可能是0x000f6577、0x000f7196、0x000f7550中的一个,而且Windows优化大师也没有给出这种BIOS的序列号。而试验的几种BIOS生产日期都是在0x000ffff5处。 关于如何读取物理内存的问题,在Win9X和WinNT是完全不同的。 Windows 9X 的方法非常简单。...char *pSN=(char *)0x000fec71;printf("%s\n",pSN);...//以下函数用以获得计算机BIOS系统信息。function GetBios(value: integer): String;// 1...Bios Type// 2.. Bios Copyright// 3.. Bios Date// 4.. Bios Extended Info// 5.. Bustype// 6.. MachineTypebeginresult:='(unavailable)';case value of1: result:=String(Pchar(Ptr($FE061)));2: result:=String(Pchar(Ptr($FE091)));3: result:=String(Pchar(Ptr($FFFF5)));4: result:=String(Pchar(Ptr($FEC71)));end;end; Windows 9X 的方法在很多地方都有了,但在WinXP中无法使用啊。 有个WinIO控件可以在NT系统下读取物理内存的不过都是C++接口不知道你能不能用 用ZwOpenSection打开内核对象\Device\PhysicalMemory再用MapViewOfFile将其映射到进程空间即可成功访问物理内存地址中的数据在NT内核的操作系统下,Ring3层访问物理内存的资料很容易搜索到的查查MSDN也能豁然开朗 请问ehom(?!) 具体怎么做啊? 下面的代码是C++做的,不知道行不行。我对C++不熟,哪位高手帮忙一下。 给分的,谢了!!!!!------------------------------------BOOLEAN MainBoardBiosSerialNo(){HANDLE physmem;UNICODE_STRING physmemString;OBJECT_ATTRIBUTES attributes;WCHAR physmemName[] = L"\\Device\\PhysicalMemory";NTSTATUS ntStatus;DWORD RAdd = 0xFEC71;DWORD LAdd = 100;DWORD OAdd;DWORD i;RtlInitUnicodeString( &physmemString, physmemName );InitializeObjectAttributes( &attributes, &physmemString,OBJ_CASE_INSENSITIVE,NULL, NULL);ntStatus = ZwOpenSection( &physmem, SECTION_MAP_READ, &attributes);if( !NT_SUCCESS( ntStatus )){ DbgPrint("ZwOpenSection() is error\n");return FALSE;}DbgPrint("ZwOpenSection() is OK\n");if (!MapView(physmem,&RAdd,&LAdd,&OAdd)){ DbgPrint("MapView() is error\n");return FALSE;}DbgPrint("MapView() is OK\n");for ( i = 0; i < LAdd; i ++){DbgPrint("%x",*(PUCHAR)(OAdd + i));}ntStatus = ZwUnmapViewOfSection( (HANDLE) -1, (PVOID) OAdd );if( !NT_SUCCESS(ntStatus)){DbgPrint("Unable to unmap view");return FALSE;} return TRUE;}BOOLEAN MapView( HANDLE HPMemory,DWORD *dwAddress,DWORD *dwLength,DWORD *dwVAddress ){NTSTATUS Status;PHYSICAL_ADDRESS ViewBaseAddress;*dwVAddress = 0;ViewBaseAddress.QuadPart = (ULONGLONG) (*dwAddress);Status = ZwMapViewOfSection ( HPMemory,(HANDLE) -1,(PVOID)dwVAddress,0,*dwLength,&ViewBaseAddress,dwLength,ViewShare,0,PAGE_READONLY);if( !NT_SUCCESS( Status )){return FALSE;}return TRUE;} 试试以下代码:http://www.cdjiafu.com/pph/dispbbs.asp?boardID=14&ID=1102 流读写文件的问题 IdTCPServer CPU占用率高,只要客户端连接上,占用率就90%左右,断开马上降下来, 用什么办法解决? VC和delphi类型转换的问题,请高手解答,谢谢! 串口问题!!在线等待~~~~急 如何实现键盘的屏蔽? 关于StringGrid中添加控件的问题? 关于数值计算后的显示问题 水货提问 DLL 与quickreport 的关系,立马给分 请指教:如何将string转为pchar? 帮忙看一段代码,告诉我为什么!! 数据类型的转换?
不同品牌的计算机有不同的BIOS芯片,这给BIOS序列号的读取造成了一些麻烦。但这个序列号都是存储在物理内存的0x000f0000-0x000fffff这个区域里,具体的地址根据BIOS生产厂家有所不同。
常见的BIOS生产厂家有AMI,Award,Phoenix;其中Phoenix一般用在IBM的笔记本电脑中。那么怎么鉴别BIOS的生产厂家呢?其实我也不知道有什么简单的标志,只是采取了搜索法,搜索上述内存区域,一旦发现"AMI"这个字符串就认为是AMI的BIOS,依此类推。
根据试验发现,AMI的序列号地址在0x000ff478,Award的序列号地址在0x000fec71,而Phoenix的序列号不太明确,可能是0x000f6577、0x000f7196、0x000f7550中的一个,而且Windows优化大师也没有给出这种BIOS的序列号。而试验的几种BIOS生产日期都是在0x000ffff5处。
关于如何读取物理内存的问题,在Win9X和WinNT是完全不同的。 Windows 9X 的方法非常简单。
...
char *pSN=(char *)0x000fec71;
printf("%s\n",pSN);
...//以下函数用以获得计算机BIOS系统信息。
function GetBios(value: integer): String;
// 1...Bios Type
// 2.. Bios Copyright
// 3.. Bios Date
// 4.. Bios Extended Info
// 5.. Bustype
// 6.. MachineType
begin
result:='(unavailable)';
case value of
1: result:=String(Pchar(Ptr($FE061)));
2: result:=String(Pchar(Ptr($FE091)));
3: result:=String(Pchar(Ptr($FFFF5)));
4: result:=String(Pchar(Ptr($FEC71)));
end;
end;
不过都是C++接口不知道你能不能用
我对C++不熟,哪位高手帮忙一下。
给分的,谢了!!!!!
------------------------------------
BOOLEAN MainBoardBiosSerialNo()
{HANDLE physmem;
UNICODE_STRING physmemString;
OBJECT_ATTRIBUTES attributes;
WCHAR physmemName[] = L"\\Device\\PhysicalMemory";NTSTATUS ntStatus;
DWORD RAdd = 0xFEC71;
DWORD LAdd = 100;
DWORD OAdd;
DWORD i;
RtlInitUnicodeString( &physmemString, physmemName );InitializeObjectAttributes( &attributes,
&physmemString,
OBJ_CASE_INSENSITIVE,
NULL,
NULL
);
ntStatus = ZwOpenSection( &physmem,
SECTION_MAP_READ,
&attributes
);if( !NT_SUCCESS( ntStatus ))
{
DbgPrint("ZwOpenSection() is error\n");
return FALSE;
}DbgPrint("ZwOpenSection() is OK\n");if (!MapView(physmem,&RAdd,&LAdd,&OAdd))
{
DbgPrint("MapView() is error\n");
return FALSE;
}DbgPrint("MapView() is OK\n");for ( i = 0; i < LAdd; i ++)
{
DbgPrint("%x",*(PUCHAR)(OAdd + i));}ntStatus = ZwUnmapViewOfSection( (HANDLE) -1, (PVOID) OAdd );if( !NT_SUCCESS(ntStatus))
{
DbgPrint("Unable to unmap view");
return FALSE;
}
return TRUE;
}
BOOLEAN MapView( HANDLE HPMemory,DWORD *dwAddress,DWORD *dwLength,DWORD *dwVAddress )
{
NTSTATUS Status;
PHYSICAL_ADDRESS ViewBaseAddress;*dwVAddress = 0;
ViewBaseAddress.QuadPart = (ULONGLONG) (*dwAddress);Status = ZwMapViewOfSection ( HPMemory,
(HANDLE) -1,
(PVOID)dwVAddress,
0,
*dwLength,
&ViewBaseAddress,
dwLength,
ViewShare,
0,
PAGE_READONLY
);if( !NT_SUCCESS( Status ))
{
return FALSE;
}return TRUE;
}
http://www.cdjiafu.com/pph/dispbbs.asp?boardID=14&ID=1102