• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            zhiye_wang

            向星空仰望的越深,越發現自己的渺小

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              31 隨筆 :: 1 文章 :: 2 評論 :: 0 Trackbacks

            #

            2.1 安裝 Docker 的先決條件

            運行 64 位 CPU 架構的計算機,Docker 目前不支持 32 位 CPU

            運行 Linux 3.8 或者更高版本內核。

            內核必須支持一種適合的存儲驅動 (storage driver),例如 Device Mapper, AUFS

            內核必須支持并開啟 cgroup 和命名空間 (namespace) 功能

            2.2 Ubuntu 中安裝 Docker

            官方支持版本:

            Ubuntu Trusty 14.04 LTS 64 位

            Ubuntu Precise 12.04 LTS 64 位

            但是并不意味著其他的Ubuntu或者Debian版本就不能安裝Docker,只要有合適的內核和

            Docker所必須的支持即可。

            2.2.1 檢查前提條件

            # 我的環境是 windows 7 旗艦版 64 位, 6GB 內存。

            # 安裝了 Vmware 虛擬機,里面安裝了一個 Ubuntu 15.10 

            Technorati 標記:
            [#1#cloudsoar@cloudsoar-virtual-machine ~]$uname -a
            Linux cloudsoar-virtual-machine 3.19.0-15-generic #15-Ubuntu SMP Thu Apr 16 23:32:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

            可以看到我的內核是 3.19.0 x86_64 的內核,因此不需要升級內核

            2 查看Device Mapper

            任何 Ubuntu 12.04 或者更高版本都已經安裝了Device Mapper,如下命令可以確認是否安裝

            [#2#cloudsoar@cloudsoar-virtual-machine ~]$ls -l /sys/class/misc/device-mapper lrwxrwxrwx 1 root root 0  3月 14 15:26 /sys/class/misc/device-mapper -> ../../devices/virtual/misc/device-mapper 

            2.2.2 安裝 Docker

            首先需要添加 Docker 的 APT 倉庫,添加之前需要確認已經安裝了curl命令

            [#3#cloudsoar@cloudsoar-virtual-machine ~]$whereis curl curl: /usr/bin/curl /usr/share/man/man1/curl.1.gz [#4#cloudsoar@cloudsoar-virtual-machine ~]$sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" 

            如果沒安裝,使用 apt-get –y install curl 命令安裝

            接下來添加 Docker 倉庫的 GPG 密鑰

            [#7#cloudsoar@cloudsoar-virtual-machine ~]$curl -s https://get.docker.io/gpg | sudo apt-key add - gpg: 找不到有效的 OpenPGP 數據。

            我的虛擬機是今天安裝的新的。這里提示報錯,找不到OpenPGP數據。

            網上差找到方法:

            [#10#cloudsoar@cloudsoar-virtual-machine ~]$sudo curl -s https://get.docker.io/gpg | sudo apt-key add - gpg: 找不到有效的 OpenPGP 數據。 [#11#cloudsoar@cloudsoar-virtual-machine ~]$gpg --keyserver pgpkeys.mit.edu --recv-key 9AA38DCD55BE302B gpg: 已創建目錄‘/home/cloudsoar/.gnupg’ gpg: 新的配置文件‘/home/cloudsoar/.gnupg/gpg.conf’已建立 gpg: 警告:在‘/home/cloudsoar/.gnupg/gpg.conf’里的選項于此次運行期間未被使用 gpg: 鑰匙環‘/home/cloudsoar/.gnupg/secring.gpg’已建立 gpg: 鑰匙環‘/home/cloudsoar/.gnupg/pubring.gpg’已建立 gpg: 下載密鑰‘55BE302B’,從 hkp 服務器 pgpkeys.mit.edu gpg: /home/cloudsoar/.gnupg/trustdb.gpg:建立了信任度數據庫 gpg: 密鑰 55BE302B:公鑰“Debian Archive Automatic Signing Key (5.0/lenny) <ftpmaster@debian.org>”已導入 gpg: 沒有找到任何絕對信任的密鑰 gpg: 合計被處理的數量:1 gpg:               已導入:1  (RSA: 1) [#12#cloudsoar@cloudsoar-virtual-machine ~]$gpg -a --export  9AA38DCD55BE302B | sudo apt-key add - OK 

            完成后更新源,sudo apt-get update

            此時,我用虛擬機創建了一個快照備份,以便以后有問題需要恢復的時候方便使用。

            下面開始安裝Docker

            [#14#cloudsoar@cloudsoar-virtual-machine ~]$sudo apt-get install lxc-docker 正在讀取軟件包列表... 完成 正在分析軟件包的依賴關系樹 正在讀取狀態信息... 完成 將會安裝下列額外的軟件包:   aufs-tools cgroupfs-mount git git-man liberror-perl lxc-docker-1.9.1 建議安裝的軟件包:   git-daemon-run git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch   git-cvs git-mediawiki git-svn 下列【新】軟件包將被安裝:   aufs-tools cgroupfs-mount git git-man liberror-perl lxc-docker lxc-docker-1.9.1 升級了 0 個軟件包,新安裝了 7 個軟件包,要卸載 0 個軟件包,有 322 個軟件包未被升級。 需要下載 12.1 MB 的軟件包。 解壓縮后會消耗掉 53.8 MB 的額外空間。 您希望繼續執行嗎? [Y/n] y 

            整個下載過程可能有點慢,我這里是電信100Mb的光纖,下載速度是10kb/s左右

            安裝完畢后,使用 docker info 查看是否安裝并運行了

            [#15#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker info Containers: 0 Images: 0 Server Version: 1.9.1 Storage Driver: aufs  Root Dir: /var/lib/docker/aufs  Backing Filesystem: extfs  Dirs: 0  Dirperm1 Supported: true Execution Driver: native-0.2 Logging Driver: json-file Kernel Version: 3.19.0-15-generic Operating System: Ubuntu 15.04 CPUs: 1 Total Memory: 2.43 GiB Name: cloudsoar-virtual-machine ID: RL5D:42DH:XMAC:GDQY:VWPJ:3YGM:UHQK:K3QD:USCH:TEGA:32PF:HUNB 

            2.2.3 Docker 和 UFW

            ubuntu中,如果使用 UFW (Uncomplicated Firewall) 還需要啟動 UFW 的數據包轉發

            Docker才能正常運行,需要對 /etc/default/uwf 文件做出一點改動

            將 DEFAULT_FORWARD_POLICY="DROP" 改為 “ACCEPT”, 保存從新加載即可.

            2.9 Docker 守護進程

            當 Docker 安裝完畢后, 默認會立即啟動 Docker 守護進程. 監聽 /var/run/docker.sock 這

            個 Unix 套接字文件來獲取來自客戶端的 Docker 請求. 如果系統存在名為 docker 的用戶組

            的話,Docker 會將此套接字文件的所有者設置為 docker 用戶組,這樣 docker 用戶組所

            有用戶都可以直接運行 Docker 不用使用 sudo。

            2.9.1 配置 Docker 守護進程

            [#19#cloudsoar@cloudsoar-virtual-machine ~]$sudo /usr/bin/docker -d -H tcp://0.0.0.0:2375
            這條命令會將Docker守護進程綁定到宿主機上的所有網絡接口。

            2.9.2 檢查守護進程是否在運行

            [#2#cloudsoar@cloudsoar-virtual-machine ~]$sudo status docker [sudo] password for cloudsoar:  status: 無法連接到 Upstart: Failed to connect to socket /com/ubuntu/upstart: 拒絕連接 
            我這里報錯。

            今天暫時還未解決,有待進一步查找資料。

            posted @ 2016-03-14 18:00 zhiye_wang 閱讀(770) | 評論 (0)編輯 收藏

            1 Debian 安裝 ssh2

            首先確保你的Debian或者linux安裝ssh并開啟ssh服務

            Debian和ubuntu的安裝方法一樣,只要源OK的話,可以直接安裝

            1 apt-get install openssh-server

            啟動SSH服務

            /etc/init.d/ssh start

            如果是非管理員用戶請使用 su 命令切換到 root 用戶執行。

            2 windows 安裝 SecureCRT

            網上下載SecureCRT直接安裝即可。

            只需要輸入IP,protocol選擇SSH2即可,端口22



            說明:

            如果不知道linux的IP, Debina請使用 :su ifconfig 查看。

            否則會報錯說沒有ifconfig這個命令。

            三 效果如圖

            posted @ 2016-03-10 15:21 zhiye_wang 閱讀(407) | 評論 (0)編輯 收藏

            1 首先下載mysql的解壓版的rar安裝包

            1 將安裝包解壓到安裝路徑.
            C:\Program Files (x86)\MySQL

            2 將安裝路徑下的bin追加到環境變量"PATH"中
            C:\Program Files (x86)\MySQL\bin

            3 修改my.ini,增加兩行
            basedir=C:\Program Files (x86)\MySQL\
            datadir=C:\Program Files (x86)\MySQL\data\

            4 執行安裝
            mysqld -install

            5 啟動服務
            net start mysql

            6 首次登陸
            mysql -u root -p

            6 卸載
            mysqld -remove
            posted @ 2016-03-10 15:17 zhiye_wang 閱讀(111) | 評論 (0)編輯 收藏

            一 在C源文件中調用C++封裝的接口

            例如:

            要想在A.c文件中,調用生命在B.h,實現在B.cpp中的接口bool getMAC(char *mac_addr);

            其實現方法 B.cpp 如下:
             1 // B.cpp
             2 
             3 #ifndef _cplusplus
             4 #define _cplusplus
             5 #endif
             6 
             7 #include <stdio.h>
             8 
             9 bool getMAC(char *mac_addr)
            10 {
            11     // your code
            12 
            13 }

            B.h 頭文件的聲明為:

             1 // B.h
             2 
             3 #ifndef _B_H
             4 #define _B_H
             5 
             6 #ifdef __cplusplus    //__cplusplus是cpp中自定義的一個宏
             7 extern "C" {          //告訴編譯器,這部分代碼按C語言的格式進行編譯,而不是C++的
             8 #endif
             9 
            10 bool getMAC(char *mac_addr);
            11 
            12 #ifdef __cplusplus
            13 }
            14 #endif 
            15 
            16 #endif

            A.c 中正常調用即可

             1 // A.c 
             2 
             3 #include "B.h"
             4 #include <stdio.h>
             5 
             6 int main()
             7 {
             8     bool bRet = false;
             9     char chMac[16] = {0};
            10 
            11     bRet = getMAC(chMac);
            12 
            13     return 0;
            14 }
            posted @ 2016-03-10 15:16 zhiye_wang 閱讀(198) | 評論 (0)編輯 收藏

            一 近期需要用到PostScript,查詢資料學習PS的語法
            簡單的畫一個圓的例子
            1 %!PS-Adobe-3.0
            2 /inch{72 mul} def
            3 4.25 inch 5.5 inch
            4 1.5 inch
            5 360 arc 
            6 0.1 inch setlinewidth
            7 stroke
            8 showpage

            %Title:用粗線畫一個圓
            %以‘%’開頭的第一段語句表示注釋,第二段語句定義了名字對象‘inch’,接著定義圓的中心位置(4.25,5.5),半徑1.5;然后畫角度為360°的圓;最后定義粗線的寬度0.1,畫出粗線的路徑進行顯示
            posted @ 2016-03-10 15:14 zhiye_wang 閱讀(167) | 評論 (0)編輯 收藏

            linux中有三種標準輸入輸出,分別是STDIN,STDOUT,STDERR,對應的數字是0,1,2。
             
            STDIN就是標準輸入,默認從鍵盤讀取信息;
            STDOUT是標準輸出,默認將輸出結果輸出至終端,也就是顯示器之類的東西;
            STDERR是標準的錯誤信息,默認也會顯示在終端上。
             
            由于STDOUT與STDERR都會默認顯示在終端上,為了區分二者的信息,
            就有了編號的0,1,2的定義,用1表示STDOUT,2表示STDERR。

            $#: 命令行參數的個數

            $0:script 的名字

            $?: shell指令執行結果,若前一個指令執行正確,則該值為0,錯誤為非0

            posted @ 2016-03-10 15:11 zhiye_wang 閱讀(152) | 評論 (0)編輯 收藏

            摘要
            ----
            項目需要對服務器上的某個路徑下的目錄,修改權限:給Users用戶組的用戶添加修改寫入權限。

            原理
            ----
            通過批處理腳本實現,命令使用 icacls 修改ACL 來達到修改權限的目的。

            操作
            ----
            想要對 D:\test directory 路徑添加User用戶組的修改權限,可用如下語句

            icacls %1 /grant Users:(OI)(CI)M

            但是 icacls 只支持windows server 2003 sp2 及其以上版本
            如果您的系統是 windows server 2003 sp1版本,請使用如下命令

            cacls %1 //G Users:C

            /E 表示增加權限,而不是用現有的權限替換
            Users:C 表示對 Users用戶組添加修改權限
            %1 代表您的路徑

            icacls D:\test directory” /grant Users:(OI)(CI)M

            cacls “
            D:\test directory” //G Users:C


            posted @ 2015-01-20 15:59 zhiye_wang 閱讀(144) | 評論 (0)編輯 收藏

            一 說明
                  mysql.lib 提供了很多方便的操作,同時結合 vector 使用十分方便。

            二 使用
                1 聲明需要用到的變量
               
            1 static MYSQL s_mysql[DATABASE_CONNECTION_NUM];
            2 static char mysql_user[50]="root";
            3 static char mysql_password[50]="";

                2 初始化數據庫連接
            初始化連接過程中,根據自己的需要,是否有包含中文字符,設置數據庫的屬性。

             1 bool InitDBConnetion()
             2 {
             3     int i = 0;
             4     bool bOK = false;
             5 
             6     for(i = 0;i < DATABASE_CONNECTION_NUM;i++)
             7     {
             8         mysql_init(&s_mysql[i]);
             9         mysql_options(&s_mysql[i], MYSQL_SET_CHARSET_NAME, "utf8");
            10 
            11         if(NULL == mysql_real_connect(&s_mysql[i], "localhost", mysql_user, mysql_password, DB_NAME, DB_PORT, NULL, 0))
            12         {
            13             printf("Failed to connect to database: Error: %s\n", mysql_error(&s_mysql[i]));
            14             break;
            15         }
            16     }
            17 
            18     if(i < DATABASE_CONNECTION_NUM)
            19     {
            20         CloseDBConnection();
            21     }
            22     else
            23     {
            24         bOK = true;
            25     }
            26 
            27     return bOK;
            28 }
            29 
               
                3 查詢并保存結果

            1 typedef struct
            2 {
            3     char chGroupName[256];
            4     unsigned char uchGroupInternalId[4];
            5     unsigned char uchGroupMemberNum[3];
            6 
            7 }GROUP_INFO;

             1 static int GetUserGroupInfo(vector<GROUP_INFO> &vGroup, MYSQL *pMySqlConnection)
             2 {
             3     int groupNum = 0;
             4     MYSQL_RES *pResult = NULL;
             5     do 
             6     {
             7         char chSql[1024={0};
             8         sprintf(chSql, "select group_id,group_name from `cloudsoarmanage`.`user_group`");
             9         if (0 != mysql_query(pMySqlConnection,chSql))
            10         {
            11             break;
            12         }
            13 
            14         pResult = mysql_store_result(pMySqlConnection);
            15         if (NULL == pResult)
            16         {
            17             break;
            18         }
            19 
            20         MYSQL_ROW sql_row;
            21         int groupId = 0;
            22         while (sql_row = mysql_fetch_row(pResult))
            23         {
            24             GROUP_INFO info = {0};
            25             strcpy(info.chGroupName, sql_row[1]);
            26             groupId = atoi(sql_row[0]);
            27             info.uchGroupInternalId[0= groupId & 0xFF;
            28             info.uchGroupInternalId[1= (groupId>>8& 0xFF;
            29             info.uchGroupInternalId[2= (groupId>>16& 0xFF;
            30             info.uchGroupInternalId[3= (groupId>>24& 0xFF;
            31             vGroup.push_back(info);
            32             ++groupNum;
            33         }
            34 
            35     } while (0);
            36 
            37     if (NULL != pResult)
            38     {
            39         mysql_free_result(pResult);
            40     }
            41 
            42     return groupNum;
            43 }

            1 void CloseDBConnection()
            2 {
            3     int i = 0;
            4 
            5     for(i = 0; i < DATABASE_CONNECTION_NUM; i++)
            6     {
            7         mysql_close(&s_mysql[i]);
            8     }
            9 }


























            posted @ 2015-01-12 17:57 zhiye_wang 閱讀(132) | 評論 (0)編輯 收藏

             在服務端數據庫的處理當中,涉及中文字符的結構體字段,需要轉為Utf8后再存儲到表項中。
            從數據庫中取出包含中文字符的字段后,如果需要保存到char *類型的結構體成員中,需要轉為Ansi后再保存。
            從數據庫中取出類型數字的字段后,如果需要保存到int型的結構體成員中,需要調用atoi函數進行處理后再保存。

              1 static char *AnsiToUtf8(char *pchAnsi)
              2 {
              3     int uSize=0;
              4     WCHAR *pwText =NULL;
              5     char *pchUtf8=NULL;
              6     int nUtf8Len = 0;
              7 
              8     if(NULL == pchAnsi)
              9     {
             10         return NULL;
             11     }
             12 
             13     do 
             14     {
             15         uSize = MultiByteToWideChar(CP_ACP,0,pchAnsi,-1,NULL,0);
             16         if(uSize <=0)
             17         {
             18             break;
             19         }
             20         pwText = (wchar_t*)malloc((uSize+1)*sizeof(wchar_t));
             21         if(!pwText)
             22         {
             23             break;
             24         }
             25 
             26         memset((void*)pwText,0,sizeof(wchar_t)*(uSize+1));
             27         MultiByteToWideChar(CP_ACP,0,pchAnsi,-1,pwText,uSize);
             28 
             29         //widechar to utf8
             30         nUtf8Len = WideCharToMultiByte(CP_UTF8, 0, pwText, -1, NULL, 0, NULL, NULL);
             31         if (0 >= nUtf8Len)
             32         {
             33             break;
             34         }
             35 
             36         pchUtf8=(char *)malloc(nUtf8Len+2);
             37         if(NULL == pchUtf8)
             38         {
             39             break;
             40         }
             41         memset(pchUtf8,0,nUtf8Len+2);
             42 
             43         nUtf8Len = WideCharToMultiByte(CP_UTF8, 0, pwText, -1, pchUtf8, nUtf8Len, NULL, NULL);
             44         if (0 >= nUtf8Len)
             45         {
             46             free(pchUtf8);
             47             pchUtf8 = NULL;
             48             break;
             49         }
             50 
             51 
             52     } while (0);
             53 
             54     if(NULL!=pwText)
             55     {
             56         free(pwText);
             57     }
             58 
             59     return pchUtf8;
             60 }
             61 
             62 static char *Utf8ToAnsi(char *pchUtf8)
             63 {
             64     int uSize=0;
             65     WCHAR *pwText =NULL;
             66     char *pchAnsic=NULL;
             67     int ansicStrLen = 0;
             68 
             69     if(NULL == pchUtf8)
             70     {
             71         return NULL;
             72     }
             73 
             74     do 
             75     {
             76         uSize = MultiByteToWideChar(CP_UTF8,0,pchUtf8,-1,NULL,0);
             77         if(uSize <=0)
             78         {
             79             break;
             80         }
             81         pwText = (wchar_t*)malloc((uSize+1)*sizeof(wchar_t));
             82         if(!pwText)
             83         {
             84             break;
             85         }
             86         memset((void*)pwText,0,sizeof(wchar_t)*(uSize+1));
             87         MultiByteToWideChar(CP_UTF8,0,pchUtf8,-1,pwText,uSize);
             88 
             89         //widechar to utf8
             90         ansicStrLen = WideCharToMultiByte(CP_ACP, 0, pwText, -1, NULL, 0, NULL, NULL);
             91         if (0 >= ansicStrLen)
             92         {
             93             break;
             94         }
             95 
             96         pchAnsic=(char *)malloc(ansicStrLen+2);
             97         if(NULL == pchAnsic)
             98         {
             99             break;
            100         }
            101         memset(pchAnsic,0,ansicStrLen+2);
            102 
            103         ansicStrLen = WideCharToMultiByte(CP_ACP, 0, pwText, -1, pchAnsic, ansicStrLen, NULL, NULL);
            104         if (0 >= ansicStrLen)
            105         {
            106             free(pchAnsic);
            107             pchAnsic = NULL;
            108             break;
            109         }
            110 
            111     } while (0);
            112 
            113     if(NULL != pwText)
            114     {
            115         free(pwText);
            116     }
            117 
            118     return pchAnsic;
            119 
            120 }
            posted @ 2015-01-12 17:27 zhiye_wang 閱讀(392) | 評論 (0)編輯 收藏

             創建鍵 RegCreateKeyEx

              1 int SetRecordVideoSavedDays(int newSavedDays)
              2 {
              3     HKEY hSubKey = NULL;
              4     LONG lRet    = 0;
              5     DWORD dwType = 0;
              6     int iRet     = 0;
              7     
              8     do 
              9     {
             10         if (newSavedDays < 0)
             11         {
             12             printf("error: input negative number\n");
             13             break;
             14         }
             15         lRet = RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Cloudsoar 3C\\ServerInfo",
             16                                 0, NULL, REG_OPTION_NON_VOLATILE, 
             17                                 KEY_ALL_ACCESS, NULL, &hSubKey, NULL);       
             18         if (ERROR_SUCCESS != lRet)
             19         {
             20             printf("Create Reg failed\n");
             21             break;
             22         }
             23         
             24         lRet = RegSetValueEx(hSubKey, "VideoSavedDays"0, REG_DWORD, (BYTE*)&newSavedDays, sizeof(newSavedDays));
             25         if (ERROR_SUCCESS != lRet)
             26         {
             27             printf("Set reg value VideoSavedDays failed\n");
             28             break;
             29         }
             30         
             31         iRet = (int)newSavedDays;
             32     } while (0);
             33     
             34     if(NULL != hSubKey)
             35     {
             36         RegCloseKey(hSubKey);
             37         hSubKey = NULL;
             38     }
             39   
             40     
             41     return iRet;
             42 }
             43 
             44 // parameter1: out, save video saved path
             45 // parameter2: in, save path length
             46 BOOL GetRecordVideoSavedPath(char *pchPath,int pathBufLen)
             47 {
             48     HKEY hSubKey    = NULL;
             49     LONG lRet       = 0;
             50     DWORD dwType    = 0;
             51     DWORD dwPathLen = pathBufLen;
             52     BOOL bRet       = FALSE;
             53     
             54     do 
             55     {
             56         lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
             57                             "SOFTWARE\\Cloudsoar 3C\\ServerInfo",
             58                             0, KEY_READ, &hSubKey);
             59         if (ERROR_SUCCESS != lRet)
             60         {
             61             printf("Open reg value VideoSavedPath failed\n");
             62             break;
             63         }
             64         
             65         lRet = RegQueryValueEx(hSubKey, "VideoSavedPath"
             66                                 0&dwType, (LPBYTE)pchPath, &dwPathLen);
             67         if (ERROR_SUCCESS != lRet)
             68         {
             69             printf("Query reg value VideoSavedPath failed\n");
             70             break;
             71         }
             72         
             73         bRet = TRUE;
             74         
             75     } while (0);
             76     
             77     RegCloseKey(hSubKey);
             78   
             79     return bRet;
             80 }
             81 
             82 BOOL SetRecordVideoSavePath(char *pchNewPath)
             83 {
             84     HKEY hSubKey  = NULL;
             85     LONG lRet     = 0;
             86     DWORD dwType  = 0;
             87     DWORD dwState = 0;
             88     BOOL bRet     = FALSE;
             89 
             90     do 
             91     {
             92         if (NULL == pchNewPath)
             93         {
             94             printf("error: input negative new path\n");
             95             break;
             96         }
             97         lRet = RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Cloudsoar 3C\\ServerInfo",
             98             0, NULL, REG_OPTION_NON_VOLATILE, 
             99             KEY_ALL_ACCESS, NULL, &hSubKey, &dwState);       
            100         if (ERROR_SUCCESS != lRet)
            101         {
            102             printf("Create Reg VideoSavedPath failed\n");
            103             break;
            104         }
            105         
            106         lRet = RegSetValueEx(hSubKey, "VideoSavedPath"0, REG_SZ, (PBYTE)pchNewPath, sizeof(pchNewPath));
            107         if (ERROR_SUCCESS != lRet)
            108         {
            109             printf("Set reg value VideoSavedPath failed\n");
            110             break;
            111         }
            112 
            113         bRet = TRUE;
            114     } while (0);
            115 
            116     RegCloseKey(hSubKey);
            117 
            118     return bRet;
            119 }

            函數原型
             1 LONG RegCreateKeyEx(
             2 HKEY hKey, // handle to open key
             3 LPCTSTR lpSubKey, // subkey name
             4 DWORD Reserved, // reserved
             5 LPTSTR lpClass, // class string
             6 DWORD dwOptions, // special options
             7 REGSAM samDesired, // desired security access
             8 LPSECURITY_ATTRIBUTES lpSecurityAttributes, // inheritance
             9 PHKEY phkResult, // key handle
            10 LPDWORD lpdwDisposition // disposition value buffer
            11 );
            參數說明
             1 hKey:   要打開鍵的句柄或以下預定義句柄
             2 HKEY_CLASSES_ROOT
             3 HKEY_CURRENT_USER
             4 HKEY_LOCAL_MACHINE
             5 HKEY_USERS
             6 lpSubKey:   指向一個用于定義子鍵路徑的字符串
             7 Reserved,dwOptions,samDesired:   置0
             8 lpClass,lpSecurityAttributes:   置NULL
             9 phkResult:   用于接收鍵句柄
            10 lpdwDisposition:   接收的相關信息,取值如下
            11 REG_CREATED_NEW_KEY   創建成功
            12 REG_OPENED_EXISTING_KEY    鍵已存在

            打開鍵 RegOpenKeyEx
            函數原型
            1 LONG RegOpenKeyEx(
            2     HKEY hKey, // handle to open key
            3     LPCTSTR lpSubKey, // subkey name
            4     DWORD ulOptions, // reserved
            5     REGSAM samDesired, // security access mask
            6     PHKEY phkResult // handle to open key
            7 );

            參數說明
            1 hKey:     要打開鍵的句柄或以下預定義句柄
            2 HKEY_CLASSES_ROOT
            3 HKEY_CURRENT_USER
            4 HKEY_LOCAL_MACHINE
            5 HKEY_USERS
            6 lpSubKey:   指向一個用于定義子鍵路徑的字符串
            7 ulOptions:   保留位,置0
            8 samDesired:   打開鍵后鍵的操作權限
            9 phResult:   接收打開的鍵的句柄

            修改/添加鍵值 RegSetValueEx
            函數原型
            1 LONG RegSetValueEx(
            2     HKEY hKey, // handle to key
            3     LPCTSTR lpValueName, // value name
            4     DWORD Reserved, // reserved
            5     DWORD dwType, // value type
            6     CONST BYTE *lpData, // value data
            7     DWORD cbData // size of value data
            8 );

            參數說明
             1 hKey:   打開鍵的句柄或以下預定義句柄
             2 HKEY_CLASSES_ROOT
             3 HKEY_CURRENT_USER
             4 HKEY_LOCAL_MACHINE
             5 HKEY_USERS
             6 lpValueName:   鍵值的名稱
             7 Reserved:   保留位,置0
             8 dwType:   鍵值的類型
             9 lpData:   鍵值
            10 cbData:   鍵值數據長度
            posted @ 2015-01-12 17:22 zhiye_wang 閱讀(142) | 評論 (0)編輯 收藏

            僅列出標題
            共4頁: 1 2 3 4 
            久久综合中文字幕| 99久久亚洲综合精品网站| 91精品国产色综久久| 久久久一本精品99久久精品88| 性做久久久久久免费观看| 91久久九九无码成人网站| 久久国产精品99精品国产| 麻豆AV一区二区三区久久| 久久99精品久久久久婷婷| 久久人人爽人人爽人人AV| 久久久精品国产sm调教网站| 国产精品久久亚洲不卡动漫| 亚洲国产精品久久久久久| 国产成人AV综合久久| 久久精品国产亚洲一区二区三区| 久久中文字幕视频、最近更新| 久久精品免费全国观看国产| 日韩电影久久久被窝网| 久久国内免费视频| 久久精品午夜一区二区福利| 亚洲国产成人久久综合碰碰动漫3d | 99久久精品午夜一区二区| 精品国产福利久久久| 久久99热国产这有精品| 久久久久无码中| 久久久噜噜噜久久中文福利| 国产精品亚洲美女久久久| 亚洲国产成人精品女人久久久| 久久精品成人欧美大片| 欧美一区二区精品久久| 久久精品国产2020| 久久精品成人一区二区三区| 伊人久久精品影院| 99久久综合狠狠综合久久止| 久久久久亚洲AV无码专区网站| 久久亚洲精品成人av无码网站| 国产99久久久国产精品~~牛| 亚洲国产精品无码久久久秋霞2 | 亚洲国产精品婷婷久久| 色88久久久久高潮综合影院| 久久成人18免费网站|