| 关键词: nbsp 寄存器 指针 指向 temp 字符串 长度 frame 一个 format |
////////////////////////////////////////////////////////////////////////////////// // Enum Service// // File : EnumService.cpp// // // Create by : refdom// Email : [email protected]// Home Page : www.opengram.com//// If you modify the code, or add more functions, please email me a copy.// ////////////////////////////////////////////////////////////////////////////////#include "ConnectServer.h"#include #include #include #include #pragma comment(lib, "Advapi32.lib")#pragma comment(lib, "Mpr.lib")DWORD g_dwManagerAccess = SC_MANAGER_ALL_ACCESS;DWORD g_dwServiceAccess = SERVICE_ALL_ACCESS;void ListServices (SC_HANDLE, DWORD);void MyStartService (SC_HANDLE, LPSTR);void MyStopService (SC_HANDLE, LPSTR);void MyViewService (SC_HANDLE, LPSTR);void Usage(char*);int main(int argc, char* argv[]){int nRetCode = 0;char szIpc[50] = "";DWORD dwServiceType;SC_HANDLE schSCManager;LPSTR lpUserName, lpPassword, lpServiceName;NETRESOURCE NET;if (argc {Usage(argv[0]);return 0;}if (argv[1][0] == "/" && strlen(argv[1]) == 2){switch (tolower(argv[1][1])){case "l":dwServiceType = SERVICE_WIN32 | SERVICE_DRIVER;break;case "d":dwServiceType = SERVICE_DRIVER;break;case "w":dwServiceType = SERVICE_WIN32;break;case "k":dwServiceType = SERVICE_KERNEL_DRIVER;break;case "f":dwServiceType = SERVICE_FILE_SYSTEM_DRIVER;break;case "o":dwServiceType = SERVICE_WIN32_OWN_PROCESS;break;case "h":dwServiceType = SERVICE_WIN32_SHARE_PROCESS;break;case "r":dwServiceType = -1;break;case "s":case "p":case "v":if (argc {printf ("Error! Input a service name!\n");return 0;}else if (argc >6){printf ("Error! A wrong service name!\n");return 0;}break;case "?":Usage(argv[0]);return 0;default:printf ("Error: Unknow option!\n");return 0;;}}else{printf ("Error: Unknow option!\n");return 0;}//get service nameif (argc == 6){lpServiceName = argv[5];}else if (argc == 3){// if ((argv[2][0] != "\\") && (argv[2][1] != "\\"))// {if (argv[1][0] == "/" && strlen(argv[1]) == 2){switch (tolower(argv[1][1])){case "l":case "d":case "w":case "k":case "f":case "o":case "h":case "r":printf ("Error arguments!\n");return 0;default:lpServiceName = argv[2];break;}}// lpServiceName = argv[2];// }}if (argc > 3){/* if ((argv[2][0] != "\\") && (argv[2][1] != "\\")){schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);}else{if (argc == 3){lpUserName = "";lpPassword = "";//change accessg_dwManagerAccess = SC_MANAGER_CONNECT;g_dwServiceAccess = GENERIC_READ;sprintf (szIpc, "%s", argv[2]);}else{*/lpUserName = argv[3];lpPassword = argv[4];sprintf (szIpc, "%s\\ipc$", argv[2]);// }NET.lpLocalName = NULL;NET.lpRemoteName = szIpc;NET.dwType = RESOURCETYPE_ANY;NET.lpProvider = NULL;printf ("Connecting %s...",argv[2]);nRetCode = MyConnectServer(&NET, lpPassword, lpUserName, CONNECT_INTERACTIVE, szIpc);if (!nRetCode)printf ("Successfully!\n");else{printf ("Failed!\n");}schSCManager = OpenSCManager(argv[2], NULL, SC_MANAGER_ALL_ACCESS);// }}else{schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);}if (schSCManager == NULL){printf ("%d\n", argc);printf ("%d\n", GetLastError());printf ("Open SCManager failed!\n");return 0;}//switch (tolower(argv[1][1])){case "l":case "d":case "w":case "k":case "f":case "o":case "h":case "r":ListServices(schSCManager, dwServiceType);break;case "s":MyStartService(schSCManager, lpServiceName);break;case "p":MyStopService(schSCManager, lpServiceName);break;case "v":MyViewService(schSCManager, lpServiceName);break;}CloseServiceHandle(schSCManager);if (argc >3 ){//close the session with remote serverprintf ("\nDisconnecting server...");nRetCode = MyDisConnectServer(szIpc, CONNECT_UPDATE_PROFILE, TRUE);if (!nRetCode)printf ("Successfully!\n");elseprintf ("Failed!\n");}return 0;}void ListServices(SC_HANDLE schSCManager, DWORD ServiceType){//list servicesLPENUM_SERVICE_STATUS_PROCESS lpServices;DWORD n;DWORD nSize = 0;DWORD nServicesReturned;DWORD nResumeHandle;DWORD dwServiceType;nResumeHandle = 0;dwServiceType = ServiceType;if (ServiceType == -1){dwServiceType = SERVICE_WIN32;}lpServices = (LPENUM_SERVICE_STATUS_PROCESS) LocalAlloc(LPTR, 30720);if (EnumServicesStatusEx(schSCManager, SC_ENUM_PROCESS_INFO, dwServiceType, SERVICE_STATE_ALL, (LPBYTE)lpServices, 30720, &nSize, &nServicesReturned,&nResumeHandle, NULL) == NULL){printf ("Enum Error!%d\n",GetLastError());return;}else{printf ("Listing service...\n\n");}printf ("------------------------------------------------------\n");printf ("PID \t ServiceName {Service Display Name} \n");printf ("------------------------------------------------------\n");for (n = 0; n {if (!(ServiceType == -1 && lpServices[n].ServiceStatusProcess.dwCurrentState != SERVICE_RUNNING)){//Show the name of serviceprintf ("pid:%d.",lpServices[n].ServiceStatusProcess.dwProcessId);if (lpServices[n].ServiceStatusProcess.dwProcessId == 0 ){printf ("\t");}printf ("%s\t{%s}", lpServices[n].lpServiceName, lpServices[n].lpDisplayName);// printf ("\t");//Show the status of serviceswitch (lpServices[n].ServiceStatusProcess.dwCurrentState){case SERVICE_STOPPED:printf ("");break;case SERVICE_START_PENDING:printf ("");break;case SERVICE_STOP_PENDING:printf ("");break;case SERVICE_RUNNING:printf ("");break;case SERVICE_CONTINUE_PENDING:printf ("");break;case SERVICE_PAUSE_PENDING:printf ("");break;case SERVICE_PAUSED:printf ("");break;}printf ("\n");}}return;}void MyStartService(SC_HANDLE schSCManager, LPSTR lpServiceName){SC_HANDLE schService;DWORD dwWaitTime;DWORD dwOldCheckPoint = 0;DWORD dwStartTickCount;SERVICE_STATUS ssStatus;LPQUERY_SERVICE_CONFIG lpConfig;DWORD dwSize;schService = OpenService(schSCManager, lpServiceName, SERVICE_ALL_ACCESS);if (schService == NULL){printf ("Open service failed!\n");return;}if (!QueryServiceStatus(schService, &ssStatus)){CloseServiceHandle(schService);printf ("Query service status failed!\n");return;}if (ssStatus.dwCurrentState == SERVICE_RUNNING || ssStatus.dwCurrentState == SERVICE_START_PENDING){CloseServiceHandle(schService);printf ("The service is running or starting!\n");return;}lpConfig = (LPQUERY_SERVICE_CONFIG) LocalAlloc(LPTR, 1024);if (!QueryServiceConfig(schService, lpConfig, 1024, &dwSize)){CloseServiceHandle(schService);printf ("Query service config failed!\n");return;}if (lpConfig->dwStartType == SERVICE_DISABLED){printf ("The service is disabled!\n");printf ("Try to change the service"s start type...");if (!ChangeServiceConfig(schService,SERVICE_NO_CHANGE, SERVICE_DEMAND_START, SERVICE_NO_CHANGE, NULL, NULL, NULL, NULL, NULL, NULL,NULL)){CloseServiceHandle(schService);printf ("Failed!\n");return;}elseprintf ("Successfully!\n");}printf ("starting the service |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|