#include "StdAfxh"
#include "\puiddiskh"
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdefh>
#include <Wbemidlh># pragma comment(lib, "wbemuuidlib")
CpuIDDisk::CpuIDDisk(void)
{
GetInfomation();
}CpuIDDisk::~CpuIDDisk(void)
{
}
int CpuIDDisk::GetInfomation(void)
{
HRESULT hres;
//步骤1:不是必须的,COM只须也只能初始化一次
hres = CoInitializeEx(0, COINIT_MULTITHREADED );
if (FAILED(hres))
{
return 1; //初始化COM异常:注意,COM只须也只能初始化一次
}
//步骤2:不是必须的,COM只须也只能设置一次
//Set general COM security levels
hres = CoInitializeSecurity(
NULL,
-1, // COM authentication
NULL, // Authentication services
NULL, // Reserved
RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication
RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation
NULL, // Authentication info
EOAC_NONE, // Additional capabilities
NULL // Reserved
);
if (FAILED(hres))
{
CoUninitialize();
return 1; // Program has failed
}
//以上不是必须的,若已有“::COMInit();”,则要跳过
//步骤3: Obtain the initial locator to WMI
IWbemLocator pLoc = NULL;
hres = CoCreateInstance(
CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (LPVOID ) &pLoc);
if (FAILED(hres))
{
CoUninitialize();
return 1;//Failed to create IWbemLocator object
} //步骤4:Connect to WMI through the IWbemLocator::ConnectServer method
IWbemServices pSvc = NULL;
hres = pLoc->ConnectServer(
_bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace
NULL, // User name NULL = current user
NULL, // User password NULL = current
0, // Locale NULL indicates current
NULL, // Security flags
0, // Authority (eg Kerberos)
0, // Context object
&pSvc // pointer to IWbemServices proxy
);
if (FAILED(hres))
{
pLoc->Release();
CoUninitialize();
return 1; // Program has failed
}
// 步骤5: Set security levels on the proxy
hres = CoSetProxyBlanket(
pSvc, // Indicates the proxy to set
RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx
RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx
NULL, // Server principal name
RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx
RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
NULL, // client identity
EOAC_NONE // proxy capabilities
); if (FAILED(hres))
{
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1;
} // 步骤6:Use the IWbemServices pointer to make requests of WMI ----
IEnumWbemClassObject pEnumerator = NULL;
//计算CPUID
hres = pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT FROM Win32_Processor"),//Win32_OperatingSystem
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
if (FAILED(hres))
{
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1;
}
// 步骤7:Get the data from the query
IWbemClassObject pclsObj;
ULONG uReturn = 0;
while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,
&pclsObj, &uReturn); if(0 == uReturn)
{
break;
}
VARIANT vtProp;
VariantInit(&vtProp);
hr = pclsObj->Get(L"ProcessorId", 0, &vtProp, 0, 0);
strProcessID=_com_util::ConvertBSTRToString(vtPropbstrVal);//strProcessID:类级变量
} //计算硬盘系列号
hres = pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT FROM Win32_DiskDrive"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator); if (FAILED(hres))
{
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1;
}
while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,
&pclsObj, &uReturn); if(0 == uReturn)
{
break;
} VARIANT vtProp;
VariantInit(&vtProp);
hr = pclsObj->Get(L"PNPDeviceID", 0, &vtProp, 0, 0);
strDisk=_com_util::ConvertBSTRToString(vtPropbstrVal);
} pSvc->Release();
pLoc->Release();
pEnumerator->Release();
pclsObj->Release();
CoUninitialize(); return 0;
你说的机器码是电脑的CPUID还是硬盘序列号啊,你用的是正版软件的话可以找软件公司的客服去咨询,让他们给你解决,如果你的软件是从网上直接下载的,那下载的压缩包里应该有详细的说明,你仔细阅读一下,看看能否解决。
一由硬件原因引起的死机
1电脑过热损耗显示器电源和CPU在工作中发热量非常大因此保持良好的通风
27
状况非常重要如果显示器过热将会导致色彩图像失真甚至缩短显示器寿命工作时间太长也会导致电源或显示器 散热不畅而造成电脑死机不妨给CPU加装个高性能的散热器
2移动不当在电脑移动过程中受到很大振动常常会使机器内部器件松动从而导致接触不良引起电脑死机所以移动 电脑时应当避免震动
3灰尘杀手机器内元件如果沾染过多的尘粒如磁头从而导致读写错误严重的会引起电脑死机甚至使元器件损坏所 以要保持空气洁净如果电脑中灰尘太多就要吹管和小毛刷除尘
4设备不匹配如主板和CPU不匹配主频太高和太你都可能导致频繁死机这时我们可根据情况更换相应硬件设备
5软硬件不兼容如运行PhotoshopAutoCAD三维动画平面设计软件时不同型号的硬件设备效果就会有所不同可能会 造成死机我们可以根据实际情况选用相应的硬件设备或软件
6内存条故障主要是内存条松动虚焊或内存芯片本笛质量所致根据具体情况排除内存条接触故障如是内存条质量 存在问题则要更换
7硬盘故障主要是硬盘老化或由于使用不当造成坏道坏扇区这样机器在运行是就很容易发生死机情节较轻的可以 用专用工具软件排除较严重的就只能更换硬盘了
8CPU超频超频提高了CPU的工作频率同时也使其性能变得不稳定究其有所因CPU在内存RAM存取数据的速度本来就 快于内存与硬盘交换数据的数据超频使之种矛盾更加突出加剧了在内存或虚拟内存中找不到需要数据的情况这 样就会出现异常错误解决办法当然也比较简单就是让CPU工作在规定的正常频率
9硬件资源冲突是由于声卡或显示卡的设置冲突引起异常错误此外其它设备的中断DMA或端口出现冲突的话可能 导致少数驱动程序产生异常以致死机解决的方法以安全模式启动在控制面板系统设备管理中进行适当调整一般 可以解决对于在驱动程序中产生异常错误的情况可以修改注册表选开始/运行键入REGEDIT进入注册表编辑器通 过菜单下的查找功能找到并删除与驱动程序前缀字符串相关的所有主键和键值重新启动
10内存容量不够内存容量越大越好应不小于硬盘容量的05~1%所以应该换上容量尽可能大的内存条
11使用劣质元件少数不法商人在给顾客组装兼容机时使用质量低劣的板卡内存有的甚至出售冒牌主板和REMARK 过的CPU内存这样的机器在运行时很不稳定发生死机在所难免因此用户购机时应擦亮自己的眼睛最好带个内行参 谋并用一些较新的工具软件如HWINF0NORTON等测试电脑长时间连续考机如72小时以及争取尽量长的保修时间等
二由软件原因引起的死机
1病毒感染病毒可以使计算机工作效率急剧下降造成频繁死机这时我们需用杀毒软件如KV3000金山毒霸瑞星等来 进行全面查毒杀毒并做到定时升级杀毒软件
2CMOS设置不当该故障现象很普遍如硬盘参数设置模式设置内存参数设置不当从而导致计算机无法启动如将无 ECC功能的内存设置为具有ECC功能这样就会因内存错误而造成死机
3系统文件的误删除或错误由于Windows 9X启动需要有CommandcomIosysMsdossys和Drvspacebin四个文件如 果这些文件遭破坏或被误删除即使在CMOS中各种硬件设置正确无误也无济于事解决方法使用同版本 *** 作系统的 启动盘启动计算机然后键入然后键入SYS C即可
4初始化文件遭破坏由于Windows 9X启动需要读取SysteminiWinini和注册表
28
文件如果存在ConfigsysAutoexecbat文件当然也会读取的只要这些文件中存在错误信息都可以出现死机特别 是SysteminiWininiUserdatSystemdat这四个文件尤为重要
5动态链接库文件DLL丢失在Windows *** 作系统中还有一类文件也相当重要这就是扩展名为DLL的动态链接库文件 这些文件上性质上来讲是属于共享类文件也就是说可以一个DLL文件会有多个软件在运行时需要调用它如果我们 在删除一个应用软件的时候该软件的么安装程序会记录它曾经安装过的文件并准备将其逐一删去这时候就容易 出现删掉的动态链接库文件也是其他软件运行时需要调用的情况由此而产生了软件错误如果丢失的链接库文件 是比较重要的核心链接文件的话那么系统就会死机甚至崩溃我们可工具软件如超级兔子对无用的DLL文件进行删 除这样会避免误删除
6硬剩余空间太少或碎片太多如果硬盘的剩余空间太少由于一些应用程序运行需要大量的内存这样就需要虚拟内 存而虚拟内存则是由硬盘提供的因此硬盘要有足够的剩余空间以满足虚拟内存需求同时还要养成定期整理硬盘 清除硬盘中垃圾文件的良好习惯
7BIOS升级失败备份BIOS以防不测如果你的系统需要对BIOS进行升级的话那么在升级之前最好确定你所使用BIOS 版本是否与你的PC相符合如果BIOS升级不正确或者在升级的过程中出现意外断电那么你的系统可能无法启动所 以在升级BIOS前千万要搞清楚BIOS的型号如果你所使用的BIOS升级工具可以对当前BIOS进行备份那么请把以前 的BIOS在磁盘中拷贝一份同时看系统是否支持BIOS恢复并且还要懂得如何恢复
8软件升级不当大多数人认为软件升级是不会有问题的事实上在升级过程中都会对其中共享的一些组件也进行升 级但是其他程序可能不支持升级后的组件从而导致各种问题
9滥用测试版软件最好少用软件的测试版因为测试软件通常带有一些BUG或者是某方面不够稳定在使用后出现数 据丢失的程序错误死机或者是系统无法启动
10非法卸载软件在卸载软件时不要删除共享文件因为某些共享文件可能被系统或者被系统或者其他程序使用一 旦删除这些文件会使应有软件无法启动而死机或者出现系统运行死机不要把软件安装所在的目录直接删掉如果 直接删掉的话注册表以及Windows目录中会有很多垃圾存在久而久之系统也会变不稳定而引起死机
11使用盗版软件因为这些软件是隐藏着大量病毒一旦执行会自动修改你的系统使系统在运行中出现死机
12应用软件本身存在缺陷或与系统软件不兼容这种情况是常见的如在Windows 98中运行那些在DOS或Windows 3X中运行良好的16位应用软件Windows 98是32位的尽管它号称兼容但是有许多地方是无法与16位应用程序协调 的微软是不会花大力气去研究它准备放弃的东西的因此如果不是必须的最好不要使用16位应用软件
13启动的程序太多这使系统资源消耗殆尽使这个别程序需要的数据在内存或虚拟内存中找不到了民会出现异常 错误解决方法不要同时启动过多的程序万一因此发生异常错误只需重新启动系统就正常了
14非法 *** 作如用非法格式或参数非法打开或释放有关程序对此要牢记正确格式和相关参数不随意打开和释放不 熟悉的程序
15非政党关闭计算机不要直接使用机箱中的电源按钮否则会造成系统文件损坏或丢失引起自动启动或者运行中 死机对于Windows 98/2000/NT等系统来说这点非常重要否则严重的话会引起系统崩溃或是硬盘损坏的严重后果
16有时候运行各种软件都正常但是却忽然间莫名其妙地死机重机关报启动后运行这些应用程序又十分正常这是 一种假死机现象出现的原因多是Windows 98的内存资源
29
冲突大家知道应用软件是在内存中运行的而关闭应用软件后即可释放内存空间但是有些应用软件由于设计的原 因即使在关闭后也无法彻底释放内存的当下一软件需要使用这一块内存地址时就会出现冲突
总之Windows发生死机的原因的确是多种多机关报其解决方法也要有针对性正如电脑千奇百怪的故障一样各自的 解决办法也有所不同说了这么多种电脑死机的原因和方式目的是让大家了解当你的电脑死机时到底发生了什么 这样你就不必惊慌根据不同的现象采取不同的解决方法目的只有一个让我们的电脑更好的工作
以上就是关于如何用PB得到CPU或硬盘的号全部的内容,包括:如何用PB得到CPU或硬盘的号、怎样才能获取本电脑的机器码呢、无法找到cpuid driver等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)