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 阅读(743) | 评论 (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 阅读(390) | 评论 (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 阅读(102) | 评论 (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 阅读(183) | 评论 (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 阅读(153) | 评论 (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 阅读(138) | 评论 (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 阅读(135) | 评论 (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 阅读(123) | 评论 (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 阅读(383) | 评论 (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 阅读(135) | 评论 (0)编辑 收藏

仅列出标题
共4页: 1 2 3 4