我正在尝试寻找HIVE中某个键的子键的子键。下面是我的代码,我能够在注册表中获取所有子键。但是,我无法获取该键的子键。注册表中的子项。我编写了一个递归代码来做到这一点!但是,它没有给我任何输出!任何帮助将不胜感激!
#include <stdio.h>
#include <windows.h>
#include <tchar.h>
#define MAX_KEY_LENGTH 255
#define MAX_VALUE_NAME 16383
void QueryKey(HKEY hkey)
{
TCHAR achKey[MAX_KEY_LENGTH];
DWORD cbName;
TCHAR achClass[MAX_PATH] = TEXT("");
DWORD cchClassName = MAX_PATH;
LPBYTE data = (LPBYTE)malloc(512);
DWORD cSubKeys=0;
DWORD dataType,cbMaxSubKey,cchMaxClass,cValues,retcode2,valueType,dataSize;
long lResult;
DWORD cchMaxValue,cbMaxValueData;
int y;
DWORD cbSecurityDescriptor;
char buffer[255]= {0};
DWORD dwbuffersize = sizeof(buffer);
FILETIME ftLastWriteTime;
DWORD i, retCode,retCode2;
TCHAR achValue[MAX_VALUE_NAME];
DWORD cchValue = MAX_VALUE_NAME;
retCode = RegQueryInfoKey(hkey,
(LPWSTR)achClass, &cchClassName,NULL, &cSubKeys,&cbMaxSubKey, &cchMaxClass,
&cValues,&cchMaxValue, &cbMaxValueData, &cbSecurityDescriptor,
&ftLastWriteTime);
if(cSubKeys)
{
printf("\n Subkey Names:");
for(i=0; i<cSubKeys; i++)
{
cbName = MAX_KEY_LENGTH;
retCode = RegEnumKeyEx(hkey, i,(LPWSTR)achKey,&cbName,
NULL,NULL,NULL,&ftLastWriteTime);
if(retCode == ERROR_SUCCESS)
{
printf("\n(%d) %S", i+1, achKey);
QueryKey((HKEY)subkey);
}
}
printf("\n Number of subkeys: %d\n\n", cSubKeys);
}
else
printf("\n there is no subkey");
if (cValues)
{
printf( "\nNumber of values: %d\n", cValues);
for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++)
{
cchValue = MAX_VALUE_NAME;
achValue[0] = '\0';
retCode2 = RegEnumValue(hkey, i, achValue, &cchValue, NULL,
&dataType, data, &dataSize);
if(retCode2==ERROR_SUCCESS)
printf("\n%u",&dataType);
else
printf("no");
if (retCode == ERROR_SUCCESS )
_tprintf(TEXT("\n(%d) %s"), i+1,achValue);
}
}
else
printf("bye");
}
int main(int argc , char *argv[])
{
HKEY hTestKey;
TCHAR buffer[260];
DWORD bufferSize = sizeof(buffer);
if(RegOpenKeyEx( HKEY_LOCAL_MACHINE, NULL, 0, KEY_READ, &hTestKey) == ERROR_SUCCESS)
{
printf("\n-------Registry Information----------");
printf("\n HIVE_NAME : HKEY_LOCAL_MACHINE");
QueryKey(hTestKey);
}
else
printf("bye");
RegCloseKey(hTestKey);
return 0;
}
您不能只是将子键的字符串名称传递HKEY
给QueryKey
。您需要传递一个real HKEY
,您可以通过打开密钥来获得:
HKEY subkey;
LONG r = RegOpenKeyEx(hkey, achKey, 0, KEY_ALL_ACCESS, &subkey);
if (r == ERROR_SUCCESS) {
QueryKey(subkey);
RegCloseKey(subkey);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句