HKEY hKey;
    RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\ODBC\\ODBC.INI",0,KEY_READ,&hKey);
    
    DWORD dwSubKeyCount,dwMaxSubKeyNameLength;
    RegQueryInfoKey(hKey,NULL,NULL,NULL,
&dwSubKeyCount,&dwMaxSubKeyNameLength,NULL,NULL,NULL,NULL,NULL,NULL);
    
    
long index = 0;

    
char* szSubKeyName = new char[dwMaxSubKeyNameLength+1];
    DWORD dwSubKeyName;
    
for (index=0;index<(long)dwSubKeyCount;index++)
    
{
        RegEnumKeyEx(hKey,index,szSubKeyName,
&dwSubKeyName,NULL,NULL,NULL,NULL);
    }

    RegCloseKey(hKey);

    RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources",0,KEY_READ,&hKey);
    
    DWORD dwValueCount,dwMaxValueNameLength;
    RegQueryInfoKey(hKey,NULL,NULL,NULL,NULL,NULL,NULL,
&dwValueCount,&dwMaxValueNameLength,NULL,NULL,NULL);    
    
    
char* szValueName = new char[dwMaxValueNameLength+1];
    DWORD dwValueName;

    
for (index=0;index<(long)dwValueCount;index++)
    
{
        RegEnumValue(hKey,index,szValueName,
&dwValueName,NULL,NULL,NULL,NULL);
    }


    RegCloseKey(hKey);


    hKey 
    当前打开键的句柄或下列预定义保留的句柄值: 
    HKEY_CLASSES_ROOT
    HKEY_CURRENT_CONFIG
    HKEY_CURRENT_USER
    HKEY_LOCAL_MACHINE
    HKEY_USERS

    samDesired 
    制定一个访问标记以描述访问新键的安全性
    此参数可以是下列值的一个联合 
    KEY_ALL_ACCESS
    KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, KEY_CREATE_SUB_KEY, KEY_CREATE_LINK, 和 KEY_SET_VALUE 访问的联合. 
    KEY_CREATE_LINK
    允许创建严格符号的链接. 
    KEY_CREATE_SUB_KEY
    允许创建子键. 
    KEY_ENUMERATE_SUB_KEYS
    允许枚举子键. 
    KEY_EXECUTE
    允许读访问. 
    KEY_NOTIFY
    允许改变通知. 
    KEY_QUERY_VALUE
    允许查询子键的数据. 
    KEY_READ
    KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, 和 KEY_NOTIFY 访问的联合. 
    KEY_SET_VALUE
    允许设置子键的数据. 
    KEY_WRITE
    KEY_SET_VALUE 和 KEY_CREATE_SUB_KEY 访问的联合. 


    LONG RegOpenKeyEx(
    HKEY hKey,                        
// 待打开的键的句柄
    LPCTSTR lpSubKey,                // 待打开的子键名称的地址
    DWORD ulOptions,                // 保留的,必须为0. 
    REGSAM samDesired,                // 安全访问标记
    PHKEY phkResult                    // 待打开的键的句柄的地址
    );

    LONG RegQueryInfoKey(
    HKEY hKey,                        
// 待查询的键的句柄
    LPTSTR lpClass,                    // 类字符串缓冲器地址
    LPDWORD lpcbClass,                // 类字符串缓冲器大小的地址
    LPDWORD lpReserved,                // 保留的,必须为 NULL.
    LPDWORD lpcSubKeys,                // 子键数目缓冲器的地址
    LPDWORD lpcbMaxSubKeyLen,        // 最长的子键名称长度缓冲器的地址
    LPDWORD lpcbMaxClassLen,        // 最长的类字符串长度缓冲器的地址
    LPDWORD lpcValues,                // 值项数目缓冲器的地址
    LPDWORD lpcbMaxValueNameLen,    // 最长的值名称长度缓冲器的地址
    LPDWORD lpcbMaxValueLen,        // 最长的值数据长度缓冲器的地址
    LPDWORD lpcbSecurityDescriptor,    // 安全描述符长度缓冲器的地址
    PFILETIME lpftLastWriteTime        // 最近写入时间缓冲器的地址
    );

    LONG RegEnumKeyEx(
    HKEY hKey,                        
// 待枚举的键的句柄
    DWORD dwIndex,                    // 待枚举的子键的索引
    LPTSTR lpName,                    // 子键名称缓冲器的地址
    LPDWORD lpcbName,                // 子键缓冲器大小的地址
    LPDWORD lpReserved,                // 保留的,必须为 NULL.
    LPTSTR lpClass,                    // 类字符串缓冲器的地址
    LPDWORD lpcbClass,                // 类缓冲器大小的地址
    PFILETIME lpftLastWriteTime        // 键的最近写入时间的地址
    );