//键名句柄
//HKEY_CLASSES_ROOT&H80000000
//HKEY_CURRENT_CONFIG &H80000005
//HKEY_CURRENT_USER&H80000001
//HKEY_DYN_DATA&H80000006
//HKEY_LOCAL_MACHINE &H80000002
//HKEY_USERS&H80000003
//REG_BINARY二进制数据
//REG_DWORD32位双字
//REG_DWORD_LITTLE_ENDIAN 大计数法格式32位数字,一个字的
//效字节是高端字
//REG_DWORD_BIG_ENDIAN大计数法格式32位数字,一个字
//的有效字节是低端字
//REG_EXPAND_SZ 空终止字符 //对"&TEMP&"之类环境变量的引用
//REG_LINK单一代码符号链
//REG_MULTI_SZ定义包括空终止字符串 的数组,数组被两个实际的空字符串结束
//REG_NONE未定义值类型
//REG_RESOUSE_LIST设备驱动程序列表
//REG_SZ空字符串,是保存字符串的最通用格式
#include
#include
void main()
{HKEY hkey;
HKEY m_hkey;
char sz[256];
DWORD dwtype, sl = 256;
DWORD dwDisposition;
unsigned char string[200]="C:\\WINDOWS\\System32\\ping.exe 127.0.0.1";
char FilePath[200];
GetModuleFileName(NULL,FilePath,MAX_PATH);
printf("%s\n",FilePath);
RegOpenKeyEx
(
(HKEY)0x80000002,//HANDLE to open key
"Software\\Microsoft\\Windows\\CurrentVersion\\Run", // address of name of subkey to open
NULL,// reserved =0
KEY_ALL_ACCESS,// security access mask
&hkey// address of handle to open key
);
RegQueryValueEx
(
hkey,//HANDLE to open subkey
"nwiz",// 要查询值的名字的地址
NULL,// 保留
&dwtype,// 值类型缓存地址
(LPBYTE)sz,// 数据缓存地址
&sl// 数据缓存大小地址
);
long ret0=(RegCreateKeyEx
(hkey,
"regedit",
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&m_hkey,
&dwDisposition));
if(ret0!=ERROR_SUCCESS) //如果无法打开hKEY,则终止程序的执行
{
printf("错误: 无法打开有关的hKEY!\n");
return;
}
if(dwDisposition==REG_OPENED_EXISTING_KEY)
printf("打开了一个已经存在的键\n");
else
{
if(dwDisposition==REG_CREATED_NEW_KEY)
printf("建立一个新键\n");
}
RegSetValueEx(
hkey,
FilePath,//一个指向包含值名的字符串指针。
0,
REG_SZ,//
(unsigned char *)FilePath,//一个指向包含数据的缓冲区的指针。
strlen(LPCSTR(FilePath))
);
RegCloseKey(m_hkey);
RegCloseKey(hkey);
printf("program is in : %s\n");
printf("%s\n",sz);
printf("%d\n",sl);
getchar();
} |