// BGM.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "windows.h"
#include "locale.h"
VOID Usage(LPTSTR ArgvSrv);
VOID EnumSrvListStus();
LPTSTR EnumSrvPath(LPCTSTR BinPath);
int _tmain(int argc, _TCHAR* argv[])
{
_tsetlocale(LC_ALL, _T("chs"));
if (argc>1&&_tcscmp(argv[1], _T("-k"))==0)
{
EnumSrvListStus();
}
else
{
Usage(argv[0]);
}
return 0;
}
VOID Usage(LPTSTR ArgvSrv)
{
_tprintf(_T("Usage: \n"));
_tprintf(_T("\t -k \t Get Service List BinPat \n"));
_tprintf(_T("\n"));
_tprintf(_T("\tExample \t %s -k\n"), ArgvSrv);
}
/*枚举服务名称*/
VOID EnumSrvListStus()
{
SC_HANDLE Hsc = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
LPENUM_SERVICE_STATUS lpEnumSrvStus = NULL;
DWORD size = 0, count = 0;
BOOL bret = EnumServicesStatus(Hsc, SERVICE_WIN32, SERVICE_STATE_ALL, NULL, 0, &size, &count, NULL);
lpEnumSrvStus = (LPENUM_SERVICE_STATUS) new BYTE[size];
EnumServicesStatus(Hsc, SERVICE_WIN32, SERVICE_STATE_ALL, lpEnumSrvStus, size, &size, &count, NULL);
for (DWORD idx = 0; idx < count;idx++)
{
_tprintf(_T("%s\n"), lpEnumSrvStus[idx].lpServiceName);
_tprintf(_T("%s\n"), EnumSrvPath(lpEnumSrvStus[idx].lpServiceName));
}
CloseServiceHandle(Hsc);
}
/*枚举服务路径*/
LPTSTR EnumSrvPath(LPCTSTR SrvName)
{
SC_HANDLE Hsc = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
SC_HANDLE Hos = OpenService(Hsc, SrvName, SERVICE_QUERY_CONFIG);
LPQUERY_SERVICE_CONFIG lpQuerySrvCof = NULL;
DWORD size = 0;
QueryServiceConfig(Hos, NULL, 0, &size);
lpQuerySrvCof = (LPQUERY_SERVICE_CONFIG) new BYTE[size];
QueryServiceConfig(Hos, lpQuerySrvCof, size, &size);
CloseServiceHandle(Hos);
CloseServiceHandle(Hsc);
return lpQuerySrvCof->lpBinaryPathName;
}
枚举系统服务路径
最新推荐文章于 2022-06-22 11:54:24 发布