又遇到难题了。
我现在想搜索HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options下所有包含DisableHeapLookAside这个Value的项,并将该项删除。删除项的递归函数已经写好了。就是不知道该怎么搜索。请大家帮帮忙啊!

解决方案 »

  1.   

    RegEnumKeyEx
    RegOpenKeyEx
    RegEnumValue
      

  2.   

    能给个RegEnumKeyEx 和RegEnumValue的例子吗?
    枚举后又怎样匹配DisableHeapLookAside这个Value啊?
      

  3.   

    RegEnumValue可以得到值名称和数据,再用字符串比较就可以。
    MSDN中RegEnumKeyEx的例子:
    // QueryKey - Enumerates the subkeys of key and its associated values.
    //     hKey - Key whose subkeys and values are to be enumerated.#include <windows.h>
    #include <stdio.h>
    #include <tchar.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; 
     
        // Get the class name and the value count. 
        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 subkeys, until RegEnumKeyEx fails.
        
        if (cSubKeys)
        {
            printf( "\nNumber of subkeys: %d\n", cSubKeys);        for (i=0; i<cSubKeys; i++) 
            { 
                cbName = MAX_KEY_LENGTH;
                retCode = RegEnumKeyEx(hKey, i,
                         achKey, 
                         &cbName, 
                         NULL, 
                         NULL, 
                         NULL, 
                         &ftLastWriteTime); 
                if (retCode == ERROR_SUCCESS) 
                {
                    _tprintf(TEXT("(%d) %s\n"), i+1, achKey);
                }
            }
        } 
     
        // 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 _tmain(void)
    {
       HKEY hTestKey;   if( RegOpenKeyEx( HKEY_CURRENT_USER,
            TEXT("SOFTWARE\\Microsoft"),
            0,
            KEY_READ,
            &hTestKey) == ERROR_SUCCESS
          )
       {
          QueryKey(hTestKey);
       }
    }