[FAQ]VC读取数据源列表和驱动程序列表
生活随笔
收集整理的這篇文章主要介紹了
[FAQ]VC读取数据源列表和驱动程序列表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
讀注冊表???
???
數據源信息存放在??
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI???
????
驅動程序信息存放在???
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI??
附:
????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????????//?鍵的最近寫入時間的地址
????);
???
數據源信息存放在??
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI???
????
驅動程序信息存放在???
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI??
附:
????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????????//?鍵的最近寫入時間的地址
????);
總結
以上是生活随笔為你收集整理的[FAQ]VC读取数据源列表和驱动程序列表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 约定俗成的命名规则
- 下一篇: Windows Vista Upgrad