gpt4 book ai didi

c++ - RegOpenKeyEx 返回错误 87 又名 "INVALID_PARAMETER"

转载 作者:可可西里 更新时间:2023-11-01 09:34:56 30 4
gpt4 key购买 nike

我正在使用 RegOpenKeyEx、RegDeleteKey 和 RegEnumKey 实现递归注册表删除。

问题::虽然代码在 Vista x86/x64 和 Win 7 x86/x64 上工作得很好,但在 XP 上对于 HKCR 中的某些键失败

问题区域:: HKCR\Installer\Products\SomeKey

错误代码:87 (INVALID_PARAMETER)

怪异行为:: 在我使用 REGEDIT 打开 key 时删除 key 。

代码::

static BOOL RcrsvRegDel( HKEY hKey, LPTSTR lpszSub )
{
BOOL bRet = TRUE ;
LONG lRet ;
DWORD dwSize = MAX_PATH ;
TCHAR szName[MAX_PATH] ;
TCHAR szFullKey[MAX_PATH * 2] ;
HKEY hKeySub = NULL ;
HRESULT hr = NULL ;

do{
lRet = RegOpenKeyEx( hKey, lpszSub, 0, KEY_ENUMERATE_SUB_KEYS | DELETE, &hKeySub ) ;
printf("RegOpenKey:: %S :: lRet = %ld\n", lpszSub, lRet) ;
if( lRet != ERROR_SUCCESS )
{
if( lRet == ERROR_FILE_NOT_FOUND )
{
bRet = TRUE ;
break ;
}
else
{
bRet = FALSE ;
break ;
}
}

while( ERROR_NO_MORE_ITEMS != (lRet = RegEnumKeyEx(hKeySub, 0, szName, &dwSize, NULL, NULL, NULL, NULL)) )
{
bRet = RcrsvRegDel( hKeySub, szName) ;
if( bRet == FALSE )
break ;
}

if( hKeySub != NULL )
{
RegCloseKey(hKeySub) ;
hKeySub = NULL ;
}

lRet = RegDeleteKey( hKey, lpszSub ) ;
printf("RegDelKey:: %S :: lRet = %ld\n", lpszSub, lRet) ;
if( lRet == ERROR_SUCCESS )
{
bRet = TRUE ;
break ;
}
}while(0) ;
return bRet ;
}

知道发生了什么事吗?

更新::

我还尝试了带有以下标志的 samDesired 参数

-KEY_READ

-KEY_READ |键写

-KEY_ENUMERATE_SUB_KEYS

-KEY_ENUMERATE_SUB_KEYS |删除

以上标志均无效:-(

最佳答案

因为您不能使用带有标志 KEY_WOW64_32KEY 打开句柄的 RegDeleteKey。见http://msdn.microsoft.com/en-us/library/aa384129(v=vs.85).aspx获取信息。您必须对相同的键使用 RegDeleteKeyEx。

关于c++ - RegOpenKeyEx 返回错误 87 又名 "INVALID_PARAMETER",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12580418/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com