Windows 2000 下通过访问物理地址取主机唯一信息
2006-10-28 21:14
507 查看
Windows 2000 下通过访问物理地址取主机唯一信息
Author: sinister
Email: sinister@whitecell.org
Homepage:http://www.whitecell.org
在9x下取得主版序列号非常简单,但此方法在NT/2K下行不通。还好NT/2K下
提供了 /Device/PhysicalMemory 设备,通过它可以得到物理地址。在9x下
通过访问地址 FEC71H 可以得到主板序列号。NT/2K下虽不保证是主板序列号,
但经过多台机器反复测试,此地址的值是不变且唯一的。下面是我 DRIVE 中
取主机唯一信息的代码,错误之处还望各位指正。
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://topic.csdn.net/t/20030415/07/1661170.html如何使用VC获取CPU序列号
Author: sinister
Email: sinister@whitecell.org
Homepage:http://www.whitecell.org
在9x下取得主版序列号非常简单,但此方法在NT/2K下行不通。还好NT/2K下
提供了 /Device/PhysicalMemory 设备,通过它可以得到物理地址。在9x下
通过访问地址 FEC71H 可以得到主板序列号。NT/2K下虽不保证是主板序列号,
但经过多台机器反复测试,此地址的值是不变且唯一的。下面是我 DRIVE 中
取主机唯一信息的代码,错误之处还望各位指正。
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://topic.csdn.net/t/20030415/07/1661170.html如何使用VC获取CPU序列号
相关文章推荐
- 使用gethostbyaddr,通过ip地址,得到该ip地址的主机的信息
- 通过WMI访问Windows系统信息
- 在局域网内中 通过IP地址得到对应的主机名及MAC物理地址
- (转载)Linux网络编程-使用gethostbyaddr,通过ip地址,得到该ip地址的主机的信息
- 内网主机通过公网地址访问内部服务器配置案例
- 使用JAVA代码通过SSH访问远程windows,获取磁盘信息
- java获取当前主机的物理地址(windows和linux均可)
- 使用gethostbyaddr,通过ip地址,得到该ip地址的主机的信息
- 如何在Windows、Linux中获取主机的网络信息和公网地址
- Windows中通过 \\+IP 访问局域网中其它主机的共享资源
- 物理地址扩展 (PAE) :Windows Server 2003 和 Windows 2000 提供大内存支持
- javascript有个特殊的对象ActiveXObject,通过它可以访问windows的本地文件系统和应用程序
- 如何在Windows 2000下修改MAC地址
- 通过virtualbox的数据空间在linux虚拟机与windows主机之间共享文件
- virtualbox windows 主机 安装ubuntu系统 共享文件夹 没有权限访问
- zabbix 通过gateway 获取远程主机的JMX信息
- 通过地址重写访问动态Web
- J2SE5.0新特性之windows下读取网卡的物理地址
- Windows 98/Me/2000/2003 计算器【怀旧】【附下载地址】