DLL服务

本文提供了一个Windows服务编程的具体实例,展示了如何使用C++创建并管理一个Windows服务,包括服务的启动、停止及运行过程中的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "stdafx.h"
#include <stdlib.h>
#include "windows.h"
char svcname[MAX_PATH];
SERVICE_STATUS_HANDLE hServiceStatus;


int TellSCM( DWORD dwState, DWORD dwExitCode, DWORD dwProgress )
{
     SERVICE_STATUS srvStatus;
     srvStatus.dwServiceType = SERVICE_WIN32_SHARE_PROCESS;
     srvStatus.dwCurrentState = dwState;
     srvStatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN;
     srvStatus.dwWin32ExitCode = dwExitCode;
srvStatus.dwServiceSpecificExitCode = 0;
     srvStatus.dwCheckPoint = dwProgress;
     srvStatus.dwWaitHint = 1000;
     return SetServiceStatus( hServiceStatus, &srvStatus );
}

void WINAPI ServiceHandler(DWORD     dwControl)
{
     //无视任何控制命令.
     return;
}

 

//导出ServiceMain 给Svchost.exe 调用.
extern "C" __declspec(dllexport) void ServiceMain( int argc, wchar_t* argv[] )
{
   
     //传进来的是Unicode注意了.
     strncpy(svcname, (char*)argv[0], sizeof svcname);
     wcstombs(svcname, argv[0], sizeof svcname);
     //为服务注册一个控制..
     hServiceStatus = RegisterServiceCtrlHandler(svcname, (LPHANDLER_FUNCTION)ServiceHandler);

     //告诉SCM 我已经运行了.
     TellSCM( SERVICE_START_PENDING, 0, 1 );
     TellSCM( SERVICE_RUNNING, 0, 0);

     //工作...
     while(1)
     {
         HANDLE FHandle =CreateFile("C:\\1.exe",GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,
             FILE_ATTRIBUTE_NORMAL,NULL);

         if(FHandle!=INVALID_HANDLE_VALUE)
         {
             DWORD Temp=0;
             WriteFile(FHandle,svcname,strlen(svcname),&Temp,NULL);
             CloseHandle(FHandle);
         }

         Sleep(1000);
     }

}

//无视DLLMAIN
BOOL APIENTRY DllMain( HANDLE hModule,
                        DWORD   ul_reason_for_call,
                        LPVOID lpReserved
                      )
{
     return TRUE;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值