Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.68 KB | None | 0 0
  1. // ConsoleApplication1.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5.  
  6. // QueryKey - Enumerates the subkeys of key and its associated values.
  7. // hKey - Key whose subkeys and values are to be enumerated.
  8.  
  9. #include <windows.h>
  10. #include <stdio.h>
  11. #include <tchar.h>
  12.  
  13. #define MAX_KEY_LENGTH 255
  14. #define MAX_VALUE_NAME 16383
  15.  
  16. void QueryKey(HKEY hKey)
  17. {
  18.  
  19. TCHAR achKey[MAX_KEY_LENGTH]; // buffer for subkey name
  20. DWORD cbName; // size of name string
  21. TCHAR achClass[MAX_PATH] = TEXT(""); // buffer for class name
  22. DWORD cchClassName = MAX_PATH; // size of class string
  23. DWORD cSubKeys = 0; // number of subkeys
  24. DWORD cbMaxSubKey; // longest subkey size
  25. DWORD cchMaxClass; // longest class string
  26. DWORD cValues; // number of values for key
  27. DWORD cchMaxValue; // longest value name
  28. DWORD cbMaxValueData; // longest value data
  29. DWORD cbSecurityDescriptor; // size of security descriptor
  30. FILETIME ftLastWriteTime; // last write time
  31. DWORD i, retCode, retCode1, dw = 300, retCodeType, dwType = 300;
  32. LPDWORD pcbData = &dw, pcbDataType = &dwType;
  33. PVOID pvData = malloc(300);
  34. PVOID pvDataType = malloc(300);
  35. TCHAR achValue[MAX_VALUE_NAME];
  36. DWORD cchValue = MAX_VALUE_NAME;
  37.  
  38. // Get the class name and the value count.
  39. retCode = RegQueryInfoKey(
  40. hKey, // key handle
  41. achClass, // buffer for class name
  42. &cchClassName, // size of class string
  43. NULL, // reserved
  44. &cSubKeys, // number of subkeys
  45. &cbMaxSubKey, // longest subkey size
  46. &cchMaxClass, // longest class string
  47. &cValues, // number of values for this key
  48. &cchMaxValue, // longest value name
  49. &cbMaxValueData, // longest value data
  50. &cbSecurityDescriptor, // security descriptor
  51. &ftLastWriteTime); // last write time
  52.  
  53. // Enumerate the subkeys, until RegEnumKeyEx fails.
  54.  
  55. if (cSubKeys)
  56. {
  57. printf("\nNumber of subkeys: %d\n", cSubKeys);
  58.  
  59. for (i = 0; i<cSubKeys; i++)
  60. {
  61. cbName = MAX_KEY_LENGTH;
  62. retCode = RegEnumKeyEx(hKey, i,
  63. achKey,
  64. &cbName,
  65. NULL,
  66. NULL,
  67. NULL,
  68. &ftLastWriteTime);
  69.  
  70. if (retCode == ERROR_SUCCESS)
  71. {
  72. //_tprintf(TEXT("(%d) %s\n"), i + 1, achKey);
  73. retCode1 = RegGetValue(
  74. hKey,
  75. achKey,
  76. _T("ImagePath"),
  77. RRF_RT_ANY,
  78. NULL,
  79. pvData,
  80. pcbData
  81. );
  82.  
  83. retCodeType = RegGetValue(
  84. hKey,
  85. achKey,
  86. _T("Type"),
  87. RRF_RT_ANY,
  88. NULL,
  89. pvDataType,
  90. pcbDataType
  91. );
  92.  
  93.  
  94.  
  95. if (retCode1 == ERROR_SUCCESS && retCodeType == ERROR_SUCCESS && (int)pvDataType <= 2 ){
  96. _tprintf(TEXT("(%d) %s\n"), i + 1, pvData);
  97. }
  98. else {
  99. _tprintf(TEXT(" %d\n"), retCode1);
  100. }
  101. }
  102. else _tprintf(TEXT(" %s\n"), retCode);
  103.  
  104. }
  105. }
  106.  
  107. // Enumerate the key values.
  108.  
  109. if (cValues)
  110. {
  111. printf("\nNumber of values: %d\n", cValues);
  112.  
  113. for (i = 0, retCode = ERROR_SUCCESS; i<cValues; i++)
  114. {
  115. cchValue = MAX_VALUE_NAME;
  116. achValue[0] = '\0';
  117. retCode = RegEnumValue(hKey, i,
  118. achValue,
  119. &cchValue,
  120. NULL,
  121. NULL,
  122. NULL,
  123. NULL);
  124.  
  125. if (retCode == ERROR_SUCCESS)
  126. {
  127. _tprintf(TEXT("(%d) %s\n"), i + 1, achValue);
  128. }
  129. }
  130. }
  131. }
  132.  
  133. void __cdecl _tmain(void)
  134. {
  135. HKEY hTestKey;
  136.  
  137. if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
  138. TEXT("SYSTEM\\CurrentControlSet\\Services"),
  139. 0,
  140. KEY_READ,
  141. &hTestKey) == ERROR_SUCCESS
  142. )
  143. {
  144. QueryKey(hTestKey);
  145. }
  146.  
  147. RegCloseKey(hTestKey);
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement