急急急!Svchost.exe调用的DLL服务,服务可以创建,但是启动不了。
#pragma once
#ifdef SVCHOSTLIBDLLSRV
#define SvcHostSrvApi _declspec(dllexport)
#else
#define SvcHostSrvApi _declspec(dllimport)
#endif
class SvcHostSrvApi SvcHostDllSrv
{
public:
SvcHostDllSrv();
~SvcHostDllSrv();
int InstallService(char *name);
int UninstallService(char *name);
void __stdcall ServiceMain( int argc, wchar_t* argv[] );
static int ConsoleSCManager(DWORD dwState, DWORD dwExitCode, DWORD dwProgress );
static unsigned __stdcall OutPutDateTime(void *pm);
static DWORD m_dwCurrState;
private:
BOOL CreateStringReg(HKEY hRoot,char *szSubKey, unsigned long kType,char* ValueName,char *Data);
BOOL CreateDWORDReg(HKEY hRoot,char *szSubKey,char* ValueName,DWORD Data);
void CoreWork();
bool OpenCalcExe();
static bool m_bExitFlag;
static SERVICE_STATUS_HANDLE m_hSrv;
};
// SvcHostDllSrv.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
#define SVCHOSTLIBDLLSRV
#include "SvcHostDllSrv.h"
#include "logfile.h"
CLogFile g_runLog(("Log_"));
SERVICE_STATUS_HANDLE SvcHostDllSrv::m_hSrv = NULL;
DWORD SvcHostDllSrv::m_dwCurrState = 0;
bool SvcHostDllSrv::m_bExitFlag = false;
SvcHostDllSrv::SvcHostDllSrv()
{
m_bExitFlag = false;
}
SvcHostDllSrv::~SvcHostDllSrv()
{
m_bExitFlag = true;
}
void __stdcall ServiceHandler(DWORD dwCommand)
{
switch( dwCommand )
{
case SERVICE_CONTROL_STOP:
SvcHostDllSrv::ConsoleSCManager( SERVICE_STOP_PENDING, 0, 1 );
Sleep(10);
SvcHostDllSrv::ConsoleSCManager( SERVICE_STOPPED, 0, 0 );
break;
case SERVICE_CONTROL_PAUSE:
SvcHostDllSrv::ConsoleSCManager( SERVICE_PAUSE_PENDING, 0, 1 );
SvcHostDllSrv::ConsoleSCManager( SERVICE_PAUSED, 0, 0 );
break;
case SERVICE_CONTROL_CONTINUE:
SvcHostDllSrv::ConsoleSCManager( SERVICE_CONTINUE_PENDING, 0, 1 );
SvcHostDllSrv::ConsoleSCManager( SERVICE_RUNNING, 0, 0 );
break;
case SERVICE_CONTROL_INTERROGATE:
SvcHostDllSrv::ConsoleSCManager( SvcHostDllSrv::m_dwCurrState, 0, 0 );
break;
case SERVICE_CONTROL_SHUTDOWN:
SvcHostDllSrv::ConsoleSCManager( SERVICE_STOPPED, 0, 0 );
break;
}
}
void __stdcall SvcHostDllSrv::ServiceMain(int argc, wchar_t* argv[])
{
g_runLog.Write("SvcHostDllSrv:ServiceMain Begin...\r\n");
char svcname[256];
strncpy(svcname, (char*)argv[0], sizeof svcname); // 支持unicode和ansi
wcstombs(svcname, argv[0], sizeof svcname);
m_hSrv = RegisterServiceCtrlHandler( svcname, (LPHANDLER_FUNCTION)ServiceHandler );
if( m_hSrv == NULL )
{
g_runLog.Write("SvcHostDllSrv: RegisterServiceCtrlHandler failed!\r\n");
return;
}else FreeConsole();
ConsoleSCManager( SERVICE_START_PENDING, 0, 1 );
ConsoleSCManager( SERVICE_RUNNING, 0, 0 );
// call Real Service function noew
if(argc > 1)
strncpy(svcname, (char*)argv[1], sizeof svcname),
wcstombs(svcname, argv[1], sizeof svcname);
CoreWork();
do{
Sleep(10);
}while(m_dwCurrState != SERVICE_STOP_PENDING && m_dwCurrState != SERVICE_STOPPED);
g_runLog.Write("SvcHostDllSrv:ServiceMain done\r\n");
}
int SvcHostDllSrv::InstallService(char *name)
{
HKEY hkRoot = HKEY_LOCAL_MACHINE, hkParam = 0;
SC_HANDLE hscm = NULL, hscService = NULL;
//install service
hscm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hscm == NULL)
{
g_runLog.Write("InstallService OpenSCManager Error [%d]\r\n", GetLastError());
return GetLastError();
}
char *bin = "%systemroot%\\system32\\svchost.exe -k NBA";
hscService = CreateService(
hscm, // SCManager database
name, // name of service
NULL, // service name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_WIN32_SHARE_PROCESS, // service type
SERVICE_AUTO_START, // start type
SERVICE_ERROR_NORMAL, // error control type
bin, // services binary
NULL, // no load ordering group
NULL, // no tag identifier
NULL, // no dependencies
NULL, // LocalSystem account
NULL); // no password
if (hscService == NULL)
{
g_runLog.Write("InstallService CreateService Error [%d]\r\n", GetLastError());
return GetLastError();
}
CloseServiceHandle(hscService);
CloseServiceHandle(hscm);
char szFilePath[MAX_PATH];
GetModuleFileName(NULL,(LPSTR)szFilePath,sizeof(szFilePath));
(_tcsrchr(szFilePath, _T('\\')))[1] = 0;
CString strPath = szFilePath ;
strPath += "SvcHostDllSrv.dll";
CreateStringReg(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Svchost", REG_MULTI_SZ, name,"NBA\0\0");
CreateStringReg(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NBA", REG_EXPAND_SZ, "ImagePath", bin);
CreateStringReg(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NBA", REG_SZ, "DisplayName", name);
CreateStringReg(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NBA", REG_SZ, "Description", "");
CreateStringReg(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NBA", REG_SZ, "ObjectName", "LocalSystem");
CreateDWORDReg( HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NBA", "ErrorControl", 1);
CreateDWORDReg( HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NBA", "Start", 2);
CreateStringReg(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NBA\\Parameters", REG_EXPAND_SZ, "ServiceDll", (char*)(LPSTR)(LPCTSTR)strPath);
RegCloseKey(hkRoot);
RegCloseKey(hkParam);
CloseServiceHandle(hscService);
CloseServiceHandle(hscm);
g_runLog.Write("Install SvcHostDllSrv Successful!\r\n");
return 0;
}
int SvcHostDllSrv::UninstallService(char *name)
{
m_bExitFlag = true;
HKEY hKey;
SC_HANDLE hSCM = NULL, hService = NULL;
SERVICE_STATUS ServiceStatus;
//卸载服务
hSCM = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(!hSCM)
{
g_runLog.Write("UninstallService CreateService Error [%d]\r\n", GetLastError());
return GetLastError();
}
hService = OpenService(hSCM, name, SERVICE_STOP | DELETE);
if(!hService)
{
g_runLog.Write("UninstallService OpenService Error [%d]\r\n", GetLastError());
//return GetLastError();
}
ControlService(hService, SERVICE_CONTROL_STOP, &ServiceStatus);
DeleteService(hService);
CloseServiceHandle(hSCM);
CloseServiceHandle(hService);
long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Svchost", 0, KEY_ALL_ACCESS|KEY_WOW64_64KEY, &hKey);
if(lRet == ERROR_SUCCESS)
{
g_runLog.Write("UninstallService RegOpenKeyEx Error [%d]\r\n", GetLastError());
lRet = RegDeleteValue(hKey, name);
RegCloseKey(hKey);
}
RegDeleteKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NBA\\Parameters");
RegDeleteKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NBA");
g_runLog.Write("UnInstall SvcHostDllSrv Successful\r\n");
return 0;
}
void SvcHostDllSrv::CoreWork()
{
// 打开计算器
OpenCalcExe();
// 开启线程输出日期
_beginthreadex(NULL, 0, OutPutDateTime, this,0,NULL);
}
int SvcHostDllSrv::ConsoleSCManager(DWORD dwState, DWORD dwExitCode, DWORD dwProgress)
{
SERVICE_STATUS srvStatus;
srvStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
srvStatus.dwCurrentState = m_dwCurrState = dwState;
srvStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_PAUSE_CONTINUE | SERVICE_ACCEPT_SHUTDOWN;
srvStatus.dwWin32ExitCode = dwExitCode;
srvStatus.dwServiceSpecificExitCode = 0;
srvStatus.dwCheckPoint = dwProgress;
srvStatus.dwWaitHint = 3000;
return SetServiceStatus( m_hSrv, &srvStatus );
}
bool SvcHostDllSrv::OpenCalcExe()
{
ShellExecute(0,"open","calc.exe","","",SW_SHOWNORMAL);
g_runLog.Write("Open Calc Success!\r\n");
return true;
}
unsigned __stdcall SvcHostDllSrv::OutPutDateTime(void *pm)
{
while (!m_bExitFlag)
{
if (m_bExitFlag)
break;
COleDateTime curTime = COleDateTime::GetCurrentTime();
CString strCurTime = curTime.Format("%Y-%m-%d %H:%M:%S");
g_runLog.Write("%s\r\n", strCurTime);
Sleep(1000);
}
return 0;
}
BOOL SvcHostDllSrv::CreateStringReg(HKEY hRoot,char *szSubKey, unsigned long kType,char* ValueName,char *Data)
{
HKEY hKey;
long lRet=RegCreateKeyEx(hRoot,szSubKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS|KEY_WOW64_64KEY,NULL,&hKey,NULL);
if (lRet!=ERROR_SUCCESS)
return false;
lRet=RegSetValueEx(hKey, ValueName, 0, kType, (BYTE*)Data,strlen(Data));
if (lRet!=ERROR_SUCCESS)
return false;
RegCloseKey(hKey);
return true;
}
BOOL SvcHostDllSrv::CreateDWORDReg(HKEY hRoot,char *szSubKey,char* ValueName,DWORD Data)
{
HKEY hKey;
long lRet=RegCreateKeyEx(hRoot,szSubKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS|KEY_WOW64_64KEY,NULL,&hKey,NULL);
if (lRet!=ERROR_SUCCESS)
return false;
DWORD dwSize=sizeof(DWORD);
lRet=RegSetValueEx(hKey,ValueName,0,REG_DWORD,(BYTE*)&Data,dwSize);
if (lRet!=ERROR_SUCCESS)
return false;
RegCloseKey(hKey);
return true;
}
// TestSrvHostDllSrv.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "SvcHostDllSrv.h"
#pragma comment(lib, "../Debug/SvcHostDllSrv.lib")
int _tmain(int argc, _TCHAR* argv[])
{
SvcHostDllSrv* shds = new SvcHostDllSrv();
shds->InstallService("NBA");
//Sleep(1000*60);
//shds->UninstallService("NBA");
if (shds)
{
delete shds;
shds = NULL;
}
return 0;
}
相关推荐
AI大模型开发V2第四阶段 PyTorch框架使用配套代码
AI大模型开发V2第四阶段 PyTorch框架使用【配套代码】
PHP后端开发Laravel与ThinkPHP框架实战及Web安全防护VIP技术手册
本手册为一份完整的 PHP 后端开发与安全实战 Word 文档(.docx,可编辑,约 6500 字正文 + 13 幅原创配图),内容涵盖:PHP 8.x 环境搭建与 Composer 工程化、Laravel 10 博客系统完整开发(建模、认证、CRUD、测试)、ThinkPHP 6 RESTful API 开发(验证器、Token 认证、限流、统一响应)、Symfony 6.4 微服务架构与 Docker 部署、SQL 注入/XSS/CSRF/文件上传五大漏洞原理与修复、HTTPS 与 AES-256-GCM 加密存储、OPcache/Redis/负载均衡性能调优,以及上线前安全检查清单与命令速查附录。 适用人群:PHP 初学者、全栈开发者、准备面试或项目实战的后端工程师、需要进行安全加固的运维与开发人员。 使用场景及目标:从零搭建可运行的博客/API 项目,掌握主流框架开发流程,建立完整的 Web 安全防护与性能优化知识体系,可直接作为团队培训教材或上线评审 checklist 使用。
超扭滑模与快速终端滑模的永磁同步电机无感控制:理论、离散化实现与仿真研究(Simulink仿真实现)
内容概要:本文系统研究了超扭滑模控制(STSMC)与快速终端滑模控制(FTSMC)在永磁同步电机(PMSM)无感控制中的应用,深入探讨了两种先进非线性控制策略的理论基础、离散化实现方法及Simulink仿真实验。文章重点分析了基于高频信号注入法的PMSM零低速无位置传感控制技术,有效解决了传统物理传感器难以安装或成本高昂场合下的转子位置与速度估算难题。通过构建高阶滑模控制器与磁链无感观测器,实现了对电机状态的精确估计与鲁棒控制,显著提升了系统在动态响应、抗外部干扰和稳态精度方面的综合性能。研究涵盖控制算法设计、离散化处理、抖振抑制策略以及仿真验证全过程,为高性能、高可靠性电机驱动系统的设计提供了完整的理论支撑与实践范例。; 适合人群:具备自动控制理论、现代电机控制技术基础,熟悉MATLAB/Simulink仿真环境,并从事电气传动、新能源汽车、工业自动化、航空航天等领域的高校研究生、科研人员及工程技术人员。; 使用场景及目标:①研究和设计无需位置传感器的永磁同步电机控制系统,降低系统成本与维护难度;②深入掌握超扭滑模与快速终端滑模控制算法的核心原理、稳定性分析方法及其在数字控制器中的离散化实现技术;③利用Simulink搭建完整的电机控制仿真平台,验证先进滑模控制策略在不同工况下的有效性、鲁棒性与动态性能;④为高精度伺服系统、电动汽车电驱系统、轨道交通牵引系统等对可靠性和性能要求严苛的应用场景提供先进的无感控制解决方案。; 阅读建议:建议读者结合文中提供的Simulink仿真模型与相关参考文献,深入理解滑模控制的设计思想、切换函数构造原则与控制器参数整定方法,重点关注滑模观测器的设计流程与抖振抑制技术(如引入边界层或高阶滑模),同时可通过仿真对比不同控制策略的性能差异,并进一步拓展至其他先进非线性控制策略(如自适应滑模、模糊滑模)的研究与对比实验。
商业计划书-互联网-清新雅致.docx
商业计划书-互联网-清新雅致
国央企如何借助科技报告优化研发方向?.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。


其它技术问题
