当我试图访问c中的Windows系统注册表时,键值不会被打印

时间:2014-10-17 23:39:46

标签: c operating-system

我试图在Windows系统注册表中打印密钥的值,下面提到的是代码。它只是显示一个空白屏幕, 我的想法是计算注册表中每个键值的数据类型并打印。任何帮助将不胜感激!

   #include <windows.h>
   #include <stdio.h>
   #include <tchar.h>
   #include <conio.h>
   #define MAX_KEY_LENGTH 255
   #define MAX_VALUE_NAME 16383

  void QueryKey(HKEY hKey) 
   { 
     TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name
     DWORD    cbName;                   // size of name string 
     TCHAR    achClass[MAX_PATH] = TEXT("");  // buffer for class name 
     DWORD    cchClassName = MAX_PATH;  // size of class string 
     DWORD    cSubKeys=0;               // number of subkeys 
     DWORD    cbMaxSubKey;              // longest subkey size 
     DWORD    cchMaxClass;              // longest class string 
     DWORD    cValues;              // number of values for key 
     DWORD    cchMaxValue;          // longest value name 
     DWORD    cbMaxValueData;       // longest value data 
     DWORD    cbSecurityDescriptor; // size of security descriptor 
     FILETIME ftLastWriteTime;      // last write time 

     DWORD i, retCode; 

    TCHAR  achValue[MAX_VALUE_NAME]; 
    DWORD cchValue = MAX_VALUE_NAME; 

    retCode = RegQueryInfoKey(
      hKey,                    // key handle 
      achClass,                // buffer for class name 
      &cchClassName,           // size of class string 
      NULL,                    // reserved 
      &cSubKeys,               // number of subkeys 
      &cbMaxSubKey,            // longest subkey size 
      &cchMaxClass,            // longest class string 
      &cValues,                // number of values for this key 
      &cchMaxValue,            // longest value name 
      &cbMaxValueData,         // longest value data 
      &cbSecurityDescriptor,   // security descriptor 
      &ftLastWriteTime);       // last write time 


// Enumerate the key values. 

   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'; 
        retCode = RegEnumValue(hKey, i, 
            achValue, 
            &cchValue, 
            NULL, 
            NULL,
            NULL,
            NULL);

        if (retCode == ERROR_SUCCESS ) 
        { 
            _tprintf(TEXT("(%d) %s\n"), i+1, achValue); 
        } 
        } 
        }
        }

   void __cdecl _tmain(void)
    {
         HKEY hTestKey;


      if( RegOpenKeyEx( HKEY_LOCAL_MACHINE,TEXT("SOFTWARE\\Microsoft"),0,KEY_READ,&hTestKey)   

       ==ERROR_SUCCESS
             )
        {
      QueryKey(hTestKey);
      }

     RegCloseKey(hTestKey);


        getch();
     }

0 个答案:

没有答案