RegEnumValue 错误代码 87
Error code 87 with RegEnumValue
我正在尝试使用 RegEnumValue 显示单个值的名称(我可以使用 RegGetValue,但我正在尝试学习如何使用 RegEnumValue 函数),但我收到错误代码 87,"The parameter is incorrect".
这是我的代码:
int wmain()
{
//RegOpenKeyEx
HKEY hKey = HKEY_CURRENT_USER;
LPCWSTR subKey = L"WinSide";
DWORD options = 0;
REGSAM samDesired = KEY_QUERY_VALUE;
HKEY pkOpenResult;
//RegEnumValue
DWORD index = 0;
WCHAR valueName[16383];
LPWSTR pValueName = valueName;
DWORD size=sizeof(valueName);
DWORD reserved = NULL;
DWORD type;
WCHAR data[255];
LPWSTR pData=data;
DWORD sizeData = sizeof(data);
LONG openKey = RegOpenKeyEx(hKey, subKey, options, samDesired, &pkOpenResult);
if (openKey != ERROR_SUCCESS)
{
wprintf(L"Error opening the key. Code: %li\n");
}
else
{
wprintf(L"Key opened!\n");
LONG enumValue = RegEnumValue(pkOpenResult, index, pValueName, &size,
&reserved, &type, pData, &sizeData);
if (enumValue != ERROR_SUCCESS)
wprintf(L"Error code: %li\n", enumValue);
else
{
wprintf(L"Going to show the value's name here!");
}
RegCloseKey(pkOpenResult);
}
return 0;
}
我做错了什么?
如有任何错误,我们深表歉意。
lpReserved
必须是文档中所述的 NULL
。您传递了一个非空值。这就是失败的原因。删除 reserved
变量并简单地为 lpReserved
传递 NULL
。
lpcchValueName
参数指定字符而不是字节。您传递错误的字节数。这个错误现在不一定会伤害你,但在制作过程中会出现缓冲区溢出错误,所以你需要修复它。
我正在尝试使用 RegEnumValue 显示单个值的名称(我可以使用 RegGetValue,但我正在尝试学习如何使用 RegEnumValue 函数),但我收到错误代码 87,"The parameter is incorrect".
这是我的代码:
int wmain()
{
//RegOpenKeyEx
HKEY hKey = HKEY_CURRENT_USER;
LPCWSTR subKey = L"WinSide";
DWORD options = 0;
REGSAM samDesired = KEY_QUERY_VALUE;
HKEY pkOpenResult;
//RegEnumValue
DWORD index = 0;
WCHAR valueName[16383];
LPWSTR pValueName = valueName;
DWORD size=sizeof(valueName);
DWORD reserved = NULL;
DWORD type;
WCHAR data[255];
LPWSTR pData=data;
DWORD sizeData = sizeof(data);
LONG openKey = RegOpenKeyEx(hKey, subKey, options, samDesired, &pkOpenResult);
if (openKey != ERROR_SUCCESS)
{
wprintf(L"Error opening the key. Code: %li\n");
}
else
{
wprintf(L"Key opened!\n");
LONG enumValue = RegEnumValue(pkOpenResult, index, pValueName, &size,
&reserved, &type, pData, &sizeData);
if (enumValue != ERROR_SUCCESS)
wprintf(L"Error code: %li\n", enumValue);
else
{
wprintf(L"Going to show the value's name here!");
}
RegCloseKey(pkOpenResult);
}
return 0;
}
我做错了什么?
如有任何错误,我们深表歉意。
lpReserved
必须是文档中所述的 NULL
。您传递了一个非空值。这就是失败的原因。删除 reserved
变量并简单地为 lpReserved
传递 NULL
。
lpcchValueName
参数指定字符而不是字节。您传递错误的字节数。这个错误现在不一定会伤害你,但在制作过程中会出现缓冲区溢出错误,所以你需要修复它。