RegEnumValue 使应用程序崩溃
RegEnumValue crashes application
我目前正在学习如何使用 c++ 使用注册表。我创建了一个应用程序,应该查看某个键中的某个值是否存在。但是,应用程序在到达RegEnumValue()时立即崩溃。对问题可能是什么有什么想法吗?
法典:
#include <iostream>
#include <windows.h>
#include <Psapi.h>
using namespace std;
bool registerKeyExists(char* key, char* subkey);
int main()
{
while(true){
if(registerKeyExists("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "SynTPEnh")){
return 0;
}
}
return 0;
}
bool registerKeyExists(char* key, char* subkey){
HKEY keyEnum;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, key, 0, KEY_READ, &keyEnum) == ERROR_SUCCESS){
char* valueName;
DWORD valueSize = 100;
DWORD cbName;
FILETIME lastFiletime;
DWORD i = 0;
DWORD returnCode = ERROR_SUCCESS;
while(returnCode == ERROR_SUCCESS){
cout << "This show!" << endl;
returnCode = RegEnumValue(keyEnum, i, valueName, &valueSize, NULL, NULL, NULL, NULL);
cout << "This doesn't show!" << endl;
if(valueName == subkey)
return true;
i++;
}
}
return false;
}
您没有为值的名称提供任何空间。您正在传递一个未初始化的指针valueName
RegEnumValue()
,它拒绝(显然,通过使您的应用程序崩溃)。请尝试以下操作:
char valueName[100];
DWORD valueSize = sizeof(valueName);
这将为返回值名称保留 100 个字符。
您还需要使用 strcmp()
而不是 ==
来测试字符串值:
if (strcmp(valueName, subkey) == 0) ...
来自 RegEnumValue() 的 SDK 文档:
LONG WINAPI RegEnumValue(
__in HKEY hKey,
__in DWORD dwIndex,
__out LPTSTR lpValueName, // <=== here
__inout LPDWORD lpcchValueName,
__reserved LPDWORD lpReserved,
__out_opt LPDWORD lpType,
__out_opt LPBYTE lpData,
__inout_opt LPDWORD lpcbData
);
请注意 lpValueName 参数上的__out
SAL 批注。 这意味着"将通过您提供的指针写入"。 特别是,按照 SDK 文章的其余部分所述编写值的名称。
问题是,您没有传递指向可以写入的内存的初始化指针。 一个足够大的 TCHAR[] 数组来接收字符串,如下一个参数 lpcchValueName 所示。 您将其保留为未初始化状态。 并说您为数组分配了 100 个字符。
卡布姆。
相关文章:
- 使用调试/崩溃报告将应用程序部署到客户端
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 如何找出应用程序崩溃的原因 - Win 10 LTSB
- 操纵安卓相机的深度图导致应用程序崩溃
- 为什么从文件获取图标时应用程序有时会崩溃?
- 在 Ubuntu 服务器上运行 QT 应用程序时崩溃
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- Qt应用程序找不到第三方DLL并崩溃
- 由于____chkstk_darwin,在Catalina上使用部署10.10编译的MacOS应用程序在HighSierra版本<崩溃
- QCompleter set模型使应用程序崩溃
- Qt 5 应用程序崩溃并出现"qLineEdit::setText"
- 切换NvAPI_Stereo_Deactivate/NvAPI_Stereo_activate会使unity应用程序崩溃
- Opencv在2013年第5季度不起作用.应用程序总是在窗口中崩溃
- eglSwapBuffers上的应用程序崩溃
- C 多线程崩溃应用程序
- 加载的 obj 模型闪烁并崩溃应用程序
- strcats func 崩溃应用程序
- 生成的Protobuf代码崩溃应用程序
- C++字符串::查找崩溃应用程序
- av_free随机崩溃应用程序-FFMPEG C++