#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;
}