亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dregkey.cpp

?? 一個modbus的編程庫
?? CPP
字號:
// dregkey.cpp

#include "stdafx.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// ---------------------------- RegDelete -------------------------
// Recursively deletes subkeys within a key.
// Basically a deltree for registries.
//
// Note. When you delete a Key all values in that key get deleted 
//       automatically. Do not use too much stack since this function 
//       does use recursion.
LONG RegDelete(  HKEY hParentKey,	// handle of open key 
                 LPCTSTR lpSubKey 	// address of name of subkey to delete 
              )
{
LONG retValue;             // return value stored
HKEY hKey;                 // currently open key for enumeration
CHAR regSubKeyName[4096];  // subkey obtained through enumeration
CString regKeyName;        // key-subkenname concatenated
DWORD index =0;            // enumerated key index#
   
   // test the keys security
   retValue = RegOpenKeyEx(hParentKey, lpSubKey, 0, KEY_WRITE | KEY_READ, &hKey);
   if (ERROR_SUCCESS != retValue)
      return(retValue);

   // go into a loop until we run out of subkeys
   while (ERROR_SUCCESS == RegEnumKey(hKey, index, regSubKeyName, sizeof(regSubKeyName)))
   {
      // delete the subkey by..
      // building up its full name
      regKeyName = lpSubKey;
      regKeyName += "\\";
      regKeyName += regSubKeyName;
      // recursively delete any subkeys in it
      retValue = RegDelete(hParentKey, regKeyName);
      // bomb out of the loop if we encounter an error
      if (ERROR_SUCCESS != retValue)
         return(retValue);
      //index++; // enumerate next key
   }
   // enumerate failed (none or no more subkeys)
   RegCloseKey(hKey);
   retValue = RegDeleteKey(hParentKey, lpSubKey);

   return (retValue);
} // RegDelete


//////////////////////////////////////////////////////////////////////////////
// DRegKey class implementation follows:
//
//

// initialise some static variables
HKEY DRegKey::local_machine = HKEY_LOCAL_MACHINE;
HKEY DRegKey::current_user = HKEY_CURRENT_USER;

// implementation

// ------------------------------DRegKey::DRegKey --------------------------
// constructor
DRegKey::DRegKey(HKEY hKey, LPCTSTR keyName, REGSAM regSam)
{
   m_hKey = NULL;
   Open(hKey ,keyName, regSam);
}


// KEY_ENUMERATE_SUB_KEYS |KEY_EXECUTE | KEY_QUERY_VALUE

// ------------------------------------ Open -------------------------------
LONG DRegKey::Open(HKEY hKey,       // can be "local_machine" or "current_user"
                   LPCTSTR keyName, // optional name
                   REGSAM regSam    // optional access specifiers
                  )
{
HKEY openedKey;
DWORD dp;

   if (NULL!= keyName)
   {
      m_KeyName = keyName;
      m_baseKey = hKey; 
      result = RegCreateKeyEx(hKey, keyName, 0, NULL, 
                      REG_OPTION_NON_VOLATILE,
                      regSam, NULL, &openedKey, &dp);
      if (ERROR_SUCCESS == result)
         m_hKey = openedKey;
      return (result);
   }
   else
      m_hKey = hKey;
   return (ERROR_SUCCESS);
} // Open

// ----------------------------------- Close ---------------------------------
// closes the opened key (also called by the destructor)
LONG DRegKey::Close()
{
   if (NULL == m_hKey)
      return(FALSE);
   result = RegCloseKey(m_hKey);
   m_hKey = NULL;
   return(result);
} // Close

// ------------------------------ operator HKEY() const ---------------------
DRegKey::operator HKEY() const
{
   return m_hKey;
} // operator HKEY() const


// ----------------------------------- QueryValue ----------------------------
// DWORD
LONG DRegKey::QueryValue(LPCTSTR valueName , DWORD *dwValue)
{
DWORD size = sizeof(DWORD);
   result = RegQueryValueEx(m_hKey, 
                            valueName, 
                            NULL,  // reserved
                            NULL,  // value type
                            (BYTE*)dwValue,
                            &size);
   return(result);
} // QueryValue

// ------------------------------------ QueryValue ---------------------------
LONG DRegKey::QueryValue(LPCTSTR valueName , BYTE *bValue)
{
DWORD v = (DWORD)*bValue;
   LONG ret=QueryValue(valueName,&v);
   *bValue = (BYTE)v;
   return(ret);
}

// ------------------------------------ QueryValue ---------------------------
LONG DRegKey::QueryValue(LPCTSTR valueName , LONG *lValue)
{
DWORD v= (DWORD)*lValue;

   LONG ret=QueryValue(valueName,&v);
   *lValue = (LONG)v;
   return(ret);
}

// ----------------------------------- QueryValue ----------------------------
// strings
LONG DRegKey::QueryValue(LPCTSTR valueName , LPSTR szValue, DWORD *pLength)
{
   result = RegQueryValueEx(m_hKey, 
                            valueName, 
                            NULL,  // reserved
                            NULL,  // value type
                            (BYTE*)szValue,
                            pLength);
   return(result);
} // QueryValue

// ----------------------------------- QueryValue ----------------------------
// strings
LONG DRegKey::QueryValue(LPCTSTR valueName , CString &string)
{
CHAR buffer[1024];
DWORD len = sizeof(buffer);

   result = RegQueryValueEx(m_hKey, 
                            valueName, 
                            NULL,  // reserved
                            NULL,  // value type
                            (BYTE*)buffer,
                            &len);
   if (ERROR_SUCCESS == result)
   {
      string = buffer;
   }
   return(result);
} // QueryValue

// ----------------------------------- QueryBinValue ----------------------------
// binary data
LONG DRegKey::QueryBinValue(LPCTSTR valueName , BYTE* binData, DWORD *pLength)
{
   result = RegQueryValueEx(m_hKey, 
                            valueName, 
                            NULL,  // reserved
                            NULL,  // value type
                            binData,
                            pLength);
   return(result);
} // QueryBinValue

// ----------------------------------- SetBinValue ----------------------------
// binary data
LONG DRegKey::SetBinValue(LPCTSTR valueName , BYTE* binData, DWORD length)
{
   result = RegSetValueEx(m_hKey, 
                          valueName, 
                          0,  // reserved
                          REG_BINARY,  // value type
                          binData,
                          length);
   return(result);
} // SetBinValue

// ----------------------------------- SetValue ------------------------------
// DWORD
LONG DRegKey::SetValue(LPCTSTR valueName , DWORD dwValue)
{
   result = RegSetValueEx(m_hKey, valueName, 0, REG_DWORD, (BYTE*)&dwValue, sizeof(DWORD));
   return(result);
} // SetValue

// ----------------------------------- SetValue ------------------------------
// strings
LONG DRegKey::SetValue(LPCTSTR valueName , LPCTSTR szValue, DWORD length)
{
   if (-1 == length)
      length = strlen(szValue);
   result = RegSetValueEx(m_hKey, valueName, 0, REG_SZ, (BYTE*)szValue, length+1);
   return(result);
} // SetValue

// ----------------------------------- SetValue ------------------------------
// Binary data
LONG DRegKey::SetValue(LPCTSTR valueName , const BYTE* binData, DWORD length)
{
   result = RegSetValueEx(m_hKey, valueName, 0, REG_BINARY, binData, length);
   return(result);
} // SetValue

// ----------------------------------- DeleteValue ---------------------------
LONG DRegKey::DeleteValue(LPCTSTR valueName)
{
   result = RegDeleteValue(m_hKey, valueName);
   return(result);
} // DeleteValue

// ----------------------------------- DeleteKey -----------------------------
// delete a key and all values, will not work if the key has any sub-keys
LONG DRegKey::DeleteKey(LPCTSTR keyName)
{
   if (NULL != keyName)
   {
      // delete a subkey of the already opened key
      result = ::RegDeleteKey(m_hKey, keyName);
   }
   else
   {
      // delete a key off the root key
      result = ::RegDeleteKey(m_baseKey, m_KeyName);
   }
   return(result);
} // DeleteKey

// ----------------------------------- DeleteKeyRecurse ----------------------
// uses the global driverlib function to delete a key and all of it's
// subkeys
LONG DRegKey::DeleteKeyRecurse(LPCTSTR keyName)
{
   if (NULL != keyName)
   {
      // call the driverlib function
      ::RegDelete(m_hKey, keyName);
      result = GetLastError();
   }
   else
   {
      // call the driverlib function
      ::RegDelete(m_baseKey, m_KeyName);
      result = GetLastError();
   }
   return(result);
} // DeleteKeyRecurse

// ------------------------------ EnumKey ------------------------
// populate a CStringarray with key names
LONG DRegKey::EnumKey(CStringArray &csaKeyNames)
{
LONG ret = ERROR_SUCCESS;
DWORD index=0;
CString keyName;

   csaKeyNames.RemoveAll();
   while (ERROR_SUCCESS == ret)
   {
      ret = EnumKey(index, keyName);
      csaKeyNames.Add(keyName);
      index++;
   }
   return(csaKeyNames.GetSize());
}

// ------------------------------ EnumKey ------------------------
// Supply the key name at an index
LONG DRegKey::EnumKey(DWORD index, CString &valueName)
{
LONG ret;
DWORD keyLengthMax;
   
   //  LONG RegQueryInfoKey(HKEY hKey, // handle to key
   //  LPTSTR lpClass,                 // class buffer
   //  LPDWORD lpcClass,               // size of class buffer
   //  LPDWORD lpReserved,             // reserved
   //  LPDWORD lpcSubKeys,             // number of subkeys
   //  LPDWORD lpcMaxSubKeyLen,        // longest subkey name
   //  LPDWORD lpcMaxClassLen,         // longest class string
   //  LPDWORD lpcValues,              // number of value entries
   //  LPDWORD lpcMaxValueNameLen,     // longest value name
   //  LPDWORD lpcMaxValueLen,         // longest value data
   //  LPDWORD lpcbSecurityDescriptor, // descriptor length
   //  PFILETIME lpftLastWriteTime );  // last write time
   ret = RegQueryInfoKey(m_hKey, NULL, NULL,
                         NULL,
                         NULL, // number of subkeys
                         &keyLengthMax,
                         NULL,NULL,NULL,NULL,NULL,NULL);
   if (ret != ERROR_SUCCESS)
      return(ret);
   ret = EnumKey(index, valueName.GetBufferSetLength(keyLengthMax), keyLengthMax);
   valueName.ReleaseBuffer();
   return(ret);
}

// ------------------------------ EnumKey ------------------------
// return the key name at an index
LONG DRegKey::EnumKey(DWORD index, LPSTR string, DWORD maxSize)
{
LONG ret;

   ret = RegEnumKey(m_hKey, index, string, maxSize);
   return(ret);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区在线看| 一区二区激情小说| 欧美性一二三区| 国产成人亚洲综合a∨猫咪 | 欧美三级在线看| 91浏览器打开| 欧美影院一区二区| 欧美人妖巨大在线| 91精品国产综合久久蜜臀| 欧美挠脚心视频网站| 欧美日韩一区二区电影| 欧美日韩在线三级| 日韩欧美成人激情| 久久精品夜色噜噜亚洲a∨| 色素色在线综合| 欧美精品一区二区久久久| 欧美日韩小视频| 91精品国产色综合久久ai换脸 | 91成人国产精品| 在线视频一区二区三区| 欧美视频日韩视频| 337p粉嫩大胆色噜噜噜噜亚洲| 精品福利一区二区三区| 国产欧美日韩不卡| 中文字幕日本不卡| 日韩综合在线视频| 国产伦精品一区二区三区在线观看| 国产成人精品亚洲日本在线桃色| jlzzjlzz亚洲日本少妇| 欧美亚洲国产bt| 欧美xxxx在线观看| 国产精品久久网站| 日韩电影在线看| 日本欧美肥老太交大片| 日本人妖一区二区| 国产福利不卡视频| 日本高清免费不卡视频| 欧美xxxx在线观看| 亚洲欧美色综合| 精品一区二区综合| 91麻豆蜜桃一区二区三区| 日韩精品在线网站| 亚洲色图欧美在线| 国产精品综合视频| 欧美日本乱大交xxxxx| 国产精品区一区二区三| 日韩不卡手机在线v区| 99精品欧美一区二区蜜桃免费 | 国产成人精品免费视频网站| 在线视频综合导航| 国产精品午夜久久| 蜜桃视频一区二区| 欧美色倩网站大全免费| 中文字幕va一区二区三区| 理论片日本一区| 欧美日韩国产片| 亚洲欧美乱综合| 91精品国产色综合久久| 国产精品色噜噜| 久久精品国产99国产| 欧美日韩一区二区三区在线看| 国产精品欧美一级免费| 国精品**一区二区三区在线蜜桃| 欧美日韩一级视频| 日韩一区二区在线观看视频| 在线日韩av片| 在线中文字幕一区二区| 国产欧美日韩精品在线| 国产一本一道久久香蕉| 欧美一区二区久久| 蜜桃av一区二区在线观看| 欧美精品1区2区| 婷婷综合五月天| 欧美三级中文字幕在线观看| 亚洲一区二区三区在线| 欧美中文字幕不卡| 亚洲国产乱码最新视频| 欧美色精品天天在线观看视频| 国产精品网友自拍| 欧美一区二区三区视频在线| 亚洲精品网站在线观看| 成人18视频日本| 中文字幕亚洲视频| 91在线国内视频| 一区二区三区国产| 欧美亚洲图片小说| 蜜桃精品在线观看| 久久―日本道色综合久久| 国产一区二区电影| 日韩一区日韩二区| 色国产精品一区在线观看| 亚洲福利电影网| 日韩欧美国产电影| 国产91精品一区二区麻豆网站 | 亚洲电影第三页| 欧美精三区欧美精三区| 毛片av中文字幕一区二区| 久久久久久久久久久99999| 波多野结衣欧美| 午夜视频在线观看一区二区 | 精品成人a区在线观看| 国产高清精品网站| 尤物视频一区二区| 精品乱人伦一区二区三区| 国产精品456| 亚洲国产精品久久艾草纯爱| 精品剧情在线观看| 色综合色综合色综合 | 久久综合狠狠综合久久激情| 国v精品久久久网| 亚洲一区二区在线播放相泽| 日韩精品在线看片z| 欧美挠脚心视频网站| 国产91精品一区二区麻豆网站 | 欧美日本一区二区三区| 国产精品自产自拍| 亚洲亚洲精品在线观看| 久久久亚洲综合| 欧美色男人天堂| 成人网页在线观看| 日本在线不卡一区| 尤物在线观看一区| 国产日韩欧美高清在线| 91精品国产色综合久久ai换脸| 94-欧美-setu| 国产一区三区三区| 日韩av中文在线观看| 亚洲人成影院在线观看| 2021中文字幕一区亚洲| 91麻豆精品91久久久久同性| 91浏览器入口在线观看| 成人动漫一区二区| 国产一区二区不卡| 久久精品国产亚洲aⅴ| 性感美女极品91精品| 亚洲女人的天堂| 中文字幕一区二区三区精华液| 久久久午夜精品理论片中文字幕| 91精品国产品国语在线不卡| 日本中文字幕一区二区有限公司| 国产99久久久国产精品潘金| 亚洲成精国产精品女| 亚洲精品一二三区| 中文字幕av免费专区久久| 欧美精品一区二区三区一线天视频| 欧美日韩日日摸| 欧美写真视频网站| 欧美性猛交xxxxxx富婆| 欧美在线短视频| 欧美性受xxxx黑人xyx| 欧美日韩一区久久| 欧美日韩卡一卡二| 777奇米四色成人影色区| 欧美日韩国产综合视频在线观看| 91福利国产精品| 欧美三级欧美一级| 91精品久久久久久久久99蜜臂| 欧美日韩色一区| 日韩一区二区三区高清免费看看| 欧美一卡在线观看| 2020日本不卡一区二区视频| 久久天天做天天爱综合色| 国产人成一区二区三区影院| 国产精品热久久久久夜色精品三区 | 精品日本一线二线三线不卡| 老鸭窝一区二区久久精品| 99精品视频中文字幕| 亚洲网友自拍偷拍| 亚洲一区二区三区自拍| 爽爽淫人综合网网站| 老司机午夜精品| 激情文学综合丁香| 国产精品18久久久久久久网站| 丁香啪啪综合成人亚洲小说 | 国产成+人+日韩+欧美+亚洲| 成人av片在线观看| 欧美性受极品xxxx喷水| 欧美一级高清片| 国产精品午夜久久| 亚洲成人激情社区| 国产老肥熟一区二区三区| av中文一区二区三区| 欧美日韩国产小视频在线观看| 精品国产百合女同互慰| 国产精品网站在线播放| 亚洲电影你懂得| 国产精品69毛片高清亚洲| 一本大道久久a久久综合婷婷| 欧美军同video69gay| 国产麻豆一精品一av一免费 | 99re这里都是精品| 欧美日本高清视频在线观看| 久久无码av三级| 亚洲一区二区五区| 国产精品白丝jk白祙喷水网站| 在线亚洲一区观看| 国产欧美一区在线| 日韩综合在线视频| 日本韩国一区二区三区| 久久久久久久久久久久久夜|