<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Win 95及NT的注冊數(shù)據(jù)庫(Registry)是系統(tǒng)中非常重要的組成部分。在Win32 API中有一組Reg函數(shù)來處理這些問題。其一般的讀寫過程如下:
    ?
    ??? 1、使用RegOpenKeyEx或RegCreateKeyEx函數(shù)打開或創(chuàng)建一個鍵;
    ??? 2、如果上一步成功,使用RegQueryValueEx讀取子鍵的值,使用RegSetValueEx設置子鍵值,使用RegEnumKey獲得所有子鍵,使用RegDeleteKey刪除一個鍵;
    ??? 3、完成操作后使用RegCloseKey關閉鍵。
    ??? 下面這段程序打開HKEY_CURRENT_USER\Software\Zeal SoftStudio\AskPro FTP\LastTime鍵,然后讀取WOL子鍵的值。

    ??? HKEY hkey;
    ??? char sz[256];
    ??? DWORD dwtype, sl = 256;
    ????
    ??? RegOpenKeyEx(HKEY_CURRENT_USER,
    ??? "Software\\Zeal SoftStudio\\AskPro FTP\\LastTime",
    ??? NULL, KEY_ALL_ACCESS, &hkey);
    ??? RegQueryValueEx(hkey, "WOL", NULL, &dwtype, (LPBYTE)sz, &sl);
    ??? RegCloseKey(hkey);
    ??? MFC程序可以使用CRegKey類讀寫注冊表。VB中調用API的辦法可以參考QA000226 "如何訪問Windows系統(tǒng)注冊表"。

    ??? 打開注冊鍵
    ??? LONG RegOpenKeyEx( HKEY hKey,? // handle to open key

    ??? LPCTSTR lpSubKey,????????????? // address of name of subkey to open
    ??? DWORD ulOptions,?????????????? // reserved =0
    ??? REGSAM samDesired,???????????? // security access mask
    ??? PHKEY phkResult??????????????? // address of handle to open key
    ??? );

    ??? 例:
    ??? HKEY hd;
    ??? hd=HKEY_LOCAL_MACHINE;
    ??? char* Regkeyname="SoftWare\\Xy123\\Poker\\";
    ??? LONG a=RegOpenKeyEx(hd,Regkeyname,0,KEY_READ,&hd);?? //成功返回ERROR_SUCCESS,否則返回錯誤代碼
    ?

    ??? 關閉注冊鍵
    ??? LONG RegCloseKey( HKEY hKey // handle to key to close );
    例:
    ???? RegCloseKey(HKEY_LOCAL_MACHINE);
    OR:? RegCloseKey(hd);
    建立注冊鍵
    LONG RegCreateKeyEx( HKEY hKey, // handle to an open key
    ????? LPCTSTR lpSubKey, // address of subkey name
    ????? DWORD Reserved, // reserved =0
    ????? LPTSTR lpClass, // address of class string
    ????? DWORD dwOptions, // special options flag
    ????? REGSAM samDesired, // desired security access

    ????? LPSECURITY_ATTRIBUTES lpSecurityAttributes, // address of key security???????? structure
    ????? PHKEY phkResult, // address of buffer for opened handle
    ????? LPDWORD lpdwDisposition // address of disposition value buffer );
    例:
    ?? char *sclass="";? //類名指定為空
    ?? DWORD nbf=0;??? //接受返回值,指明是建立新鍵還是打開已有的鍵.(經(jīng)試驗總是返回REG_OPENED_EXISTING_KEY.
    ?? LONG II=RegCreateKeyEx(hd,Regkeyname,0,sclass,REG_OPTION_NON_VOLATILE,
    ??????????????? KEY_READ|KEY_WRITE,NULL,&hd,&nbf);

    //REG_OPTION_NON_VOLATILE 指明鍵永久保留.安全結構指明NULL,自動獲得一默認值
    //成功返回ERROR_SUCCESS,否則返回錯誤代碼
    枚舉鍵值
    LONG RegEnumValue( HKEY hKey, // handle to key to query
    ????? DWORD dwIndex, // index of value to query
    ????? LPTSTR lpValueName, // address of buffer for value string
    ????? LPDWORD lpcbValueName, // address for size of value buffer
    ????? LPDWORD lpReserved, // reserved =NULL
    ????? LPDWORD lpType, // address of buffer for type code

    ????? LPBYTE lpData, // address of buffer for value data
    ????? LPDWORD lpcbData // address for size of data buffer);
    例:
    ?? DWORD dinx=0;
    ?? char valuename[70];? //分配數(shù)值名稱緩沖區(qū)
    ?? strcpy(valuename,"DeskPattern");? //隨便指定哪個鍵值名
    ?? DWORD nsize=69;? //數(shù)值名稱緩沖區(qū)大小
    ?? DWORD k=REG_SZ;? //指明數(shù)據(jù)類型
    ?? unsigned char vari[70]; //分配數(shù)值緩沖區(qū)
    ?? DWORD ncbvari=69; //數(shù)值緩沖區(qū)大小
    ?? dinx=0; //從0開始

    ?? while((II=RegEnumValue(hd,dinx,valuename,&nsize,NULL,&k,vari,&ncbvari))
    ????????? != ERROR_NO_MORE_ITEMS)
    ?? {
    ?????? dinx++;//索引 +1,準備取下一個值
    ?????? nsize=69; //恢復原來大小
    ?????? ncbvari=69;
    ?? }
    成功后返回值0,各變量返回后設置如下:
    valuename=數(shù)值名稱,以0結尾;如 : DeskColor
    nsize=數(shù)值名稱長度, 9
    k=REG_SZ? DeskColor 的類型為 REG_SZ
    vari=鍵值,32768 DeskColor="32768",
    ncbvari=鍵值長度 REG_SZ包括結尾0,=6,
    讀取鍵值
    LONG RegQueryValueEx( HKEY hKey, // handle to key to query

    ?????? LPTSTR lpValueName, // address of name of value to query
    ?????? LPDWORD lpReserved, // reserved
    ?????? LPDWORD lpType, // address of buffer for value type
    ?????? LPBYTE lpData, // address of data buffer
    ?????? LPDWORD lpcbData // address of data buffer size );
    例:
    ?? RegQueryValueEx(hd,valuename,NULL,&k,vari,&ncbvari);
    變量定義及成功后各變量設置值同RegEnumValueEx
    寫鍵值
    LONG RegSetValueEx( HKEY hKey, // handle to key to set value for
    ?????? LPCTSTR lpValueName, // name of the value to set

    ?????? DWORD Reserved, // reserved
    ?????? DWORD dwType, // flag for value type
    ?????? CONST BYTE *lpData, // address of value data
    ?????? DWORD cbData // size of value data );
    例:
    ?? strcpy(valuename,"Hello");
    ?? unsigned char vari[10];
    ?? DWORD k=REG_SZ;
    ?? strcpy((char*)vari,"1234567")
    ?? RegSetValueEx(hd,valuename,0,k,vari,7);
    成功后在Poker下增加一個鍵值 Hello : REG_SZ : 1234567
    寫整型變量:
    int hi=8;
    RegSetValueEx(pj,valuename,0,REG_BINARY,(unsigned char*)&hi,sizeof(int));

    成功后在Poker下增加一個鍵值 Hello2 : REG_BINARY :08 00 00 00

    ?

    void AddEventSource()
    {
    ??? HKEY hk;
    ??? DWORD dwData;
    ??? UCHAR szBuf[80];

    ??? // Add your source name as a subkey under the Application
    ??? // key in the EventLog registry key.

    ??? if (RegCreateKey(HKEY_LOCAL_MACHINE,
    ??????????? "SYSTEM\\CurrentControlSet\\Services\
    ??????????? \\EventLog\\Application\\SamplApp", &hk))
    ??????? ErrorExit("Could not create the registry key.");

    ??? // Set the name of the message file.

    ??? strcpy(szBuf, "%SystemRoot%\\System\\SamplApp.dll");

    ??? // Add the name to the EventMessageFile subkey.

    ??? if (RegSetValueEx(hk,???????????? // subkey handle
    ??????????? "EventMessageFile",?????? // value name
    ??????????? 0,??????????????????????? // must be zero
    ??????????? REG_EXPAND_SZ,??????????? // value type
    ??????????? (LPBYTE) szBuf,?????????? // pointer to value data
    ??????????? strlen(szBuf) + 1))?????? // length of value data

    ??????? ErrorExit("Could not set the event message file.");

    ??? // Set the supported event types in the TypesSupported subkey.

    ??? dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE |
    ??????? EVENTLOG_INFORMATION_TYPE;

    ??? if (RegSetValueEx(hk,????? // subkey handle
    ??????????? "TypesSupported",? // value name
    ??????????? 0,???????????????? // must be zero
    ??????????? REG_DWORD,???????? // value type
    ??????????? (LPBYTE) &dwData,? // pointer to value data

    ??????????? sizeof(DWORD)))??? // length of value data
    ??????? ErrorExit("Could not set the supported types.");

    ??? RegCloseKey(hk);
    }

    ?

    以下代碼把注冊表自啟動shell的鍵值改寫為C:\DK1\ATM\HARP\ExAtmShell.exe:

    ???????? HKEY hkey;
    LONG res;
    DWORD datatype=REG_SZ;
    unsigned char szvalue[_MAX_PATH];
    strcpy((char*)szvalue,"C:\\DK1\\ATM\\HARP\\ExAtmShell.exe");

    res =::RegOpenKeyEx(HKEY_LOCAL_MACHINE,
    "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\", 0,
    KEY_WRITE|KEY_READ, &hkey);

    if(res!=ERROR_SUCCESS)
    {
    AfxMessageBox("aaa");
    return;
    }
    res = ::RegSetValueEx(hkey, "Shell", 0, datatype, szvalue, strlen(LPCSTR(szvalue)));

    RegCloseKey(hkey);
    if(res==ERROR_SUCCESS)
    ::AfxMessageBox("你已經(jīng)成功地將注冊表自啟動shell的鍵值設置為C:\\DK1\\ATM\\HARP\\ExAtmShell.exe");
    else
    ::AfxMessageBox("設定失敗:目標位置不存在這樣的鍵!");

    posted on 2009-06-16 15:36 -274°C 閱讀(1567) 評論(0)  編輯  收藏 所屬分類: C++

    常用鏈接

    留言簿(21)

    隨筆分類(265)

    隨筆檔案(242)

    相冊

    JAVA網(wǎng)站

    關注的Blog

    搜索

    •  

    積分與排名

    • 積分 - 914507
    • 排名 - 40

    最新評論

    主站蜘蛛池模板: 亚洲依依成人精品| 亚洲综合色丁香婷婷六月图片| 日韩在线视频免费| 免费v片在线观看| 污污视频免费观看网站| 免费v片在线观看无遮挡| 欧洲亚洲综合一区二区三区| 好男人视频在线观看免费看片| 国产精品亚洲一区二区麻豆| 成人免费视频77777| 亚洲熟女乱色一区二区三区| 免费无遮挡无码视频网站| 亚洲第一街区偷拍街拍| 亚洲AV无码专区日韩| 本道天堂成在人线av无码免费| 亚洲色WWW成人永久网址| 久久午夜夜伦鲁鲁片免费无码| 久久精品国产亚洲av高清漫画| 嫖丰满老熟妇AAAA片免费看| 亚洲av日韩综合一区二区三区| 国产伦精品一区二区三区免费下载 | 亚洲精品无码成人片在线观看| 一道本不卡免费视频| 日本红怡院亚洲红怡院最新| 91禁漫免费进入| 亚洲熟妇AV一区二区三区浪潮 | 亚洲日韩国产成网在线观看| 国产在线观看免费视频软件| 亚洲欧洲视频在线观看| 午夜成人免费视频| 精品国产福利尤物免费| 亚洲一区免费观看| 波多野结衣久久高清免费| 三级毛片在线免费观看| 亚洲av成人一区二区三区| 亚洲高清无码专区视频| 无码A级毛片免费视频内谢| 亚洲精品无码高潮喷水A片软| 亚洲中文字幕在线第六区| 免费毛片a在线观看67194| 一级特黄录像免费播放中文版|