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 하위 키; LONG r = RegOpenKeyEx (hkey, achKey, 0, KEY_ALL_ACCESS, & subkey); (r = ERROR_SUCCESS) { QueryKey (하위 키); RegCloseKey (하위 키); }이 작업을 수행 할 때 하이브의 모든 하위 키 옆에 0이 표시됩니다! 그것에 관한 어떤 생각? –
@ramuranga 지금은 테스트 할 수 없습니다. 위의 'if'대신'=='대신'='를 사용하여 오류를 수정했습니다. – ooga