16,473
社区成员
发帖
与我相关
我的任务
分享
HKEY hKEY1=NULL;
LPCTSTR data_bios = _T("HARDWARE\\DESCRIPTION\\System\\");
long ret_bios0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_bios, 0, KEY_READ, &hKEY1));
if (ret_bios0 != ERROR_SUCCESS)
{
AfxMessageBox(_T("无法打开有关的hKEY1"));
return;
}
LPBYTE bios1_Data = new BYTE[80]; //定义用户姓名 owner_Data
DWORD type_bios1 = REG_MULTI_SZ; //定义数据类型
DWORD cbData_bios1 = 100; //定义数据长度
long ret_bios1 = ::RegQueryValueEx(hKEY1, _T("SystemBiosVersion"), 0, &type_bios1, bios1_Data, &cbData_bios1);
if (ret_bios1 != ERROR_SUCCESS)
{
AfxMessageBox(_T("无法查询注册表BIOS信息"));
OnCancel();
//return;
}
问题:1、 _T("SystemBiosVersion")这个是 REG_MULTI_SZ类型对应的值,执行以上代码,会弹出"无法查询注册表BIOS信息"的错误信息。#include <stdio.h>
#include <tchar.h>
#include <windows.h>
void DisplayMultiString(
PCTSTR pszInfo
)
{
if (pszInfo != NULL)
{
while (*pszInfo != _T('\0'))
{
_ftprintf(stdout, _T("%s\n"), pszInfo);
do {
pszInfo++;
} while (*pszInfo);
pszInfo++;
}
}
}
int main(int argc, char *argv[])
{
HKEY hKey = NULL;
TCHAR szSubKey[] = _T("HARDWARE\\DESCRIPTION\\System");
DWORD dwError = RegOpenKeyEx(HKEY_LOCAL_MACHINE, szSubKey, 0, KEY_READ, &hKey);
if (dwError == NO_ERROR)
{
DWORD dwType = 0;
DWORD cbData = 0;
TCHAR szValue[] = _T("SystemBiosVersion");
dwError = RegQueryValueEx(hKey, szValue, NULL, &dwType, NULL, &cbData);
if ((dwError == NO_ERROR) && (dwType == REG_MULTI_SZ))
{
BYTE *lpResult = new BYTE[cbData]()
dwError = RegQueryValueEx(hKey, szValue, NULL, NULL, (BYTE *)lpResult, &cbData);
switch (dwError) {
case NO_ERROR:
AfxMessageBox(_T("操作成功!"));
DisplayMultiString((PCTSTR)lpResult);
break;
case ERROR_MORE_DATA:
AfxMessageBox(_T("空间不足!"));
break;
case ERROR_FILE_NOT_FOUND:
AfxMessageBox(_T("值不存在!"));
break;
default:
break;
}
delete[] lpResult;
}
RegCloseKey(hKey);
}
return 0;
}
DWORD dwType;
DWORD cbData = 1024;
LPBYTE lpData = new BYTE[cbData];
DWORD dwError = RegQueryValueEx(hKey, _T("SystemBiosVersion"), 0, &dwType, lpData, &cbData);
switch (dwError) {
case ERROR_SUCCESS:
AfxMessageBox(_T("操作成功!"));
break;
case ERROR_MORE_DATA:
AfxMessageBox(_T("空间不足!"));
break;
case ERROR_FILE_NOT_FOUND:
AfxMessageBox(_T("值不存在!"));
break;
default:
break;
}
TCHAR* bios1_Data = NULL;
DWORD type_bios1 = REG_MULTI_SZ;
DWORD cbData_bios1 = 0;
long ret_bios1 = ::RegQueryValueEx(hKEY1, _T("SystemBiosVersion"), 0, &type_bios1, NULL, &cbData_bios1);
bios1_Data = new TCHAR[ret_bios1];
memset(bios1_Data, 0, ret_bios1);
ret_bios1 = ::RegQueryValueEx(hKEY1, _T("SystemBiosVersion"), 0, &type_bios1, (LPBYTE)bios1_Data, &cbData_bios1);
if (ret_bios1 != ERROR_SUCCESS)
{
AfxMessageBox(_T("无法查询注册表BIOS信息"));
OnCancel();
}