def getService(self): n = 1 handle = self.makeHandle() service_list = win32service.EnumServicesStatusEx(handle) #pprint(service_list) service_dict = {} for i in service_list: service_dict.update({ n: { 'name': i.get('ServiceName'), 'status': self.service_status.get(i.get('CurrentState')), 'pid': i.get('ProcessId'), 'displayname': i.get('DisplayName'), 'descriptions': self.getDescription(i.get('ServiceName')), 'start_config': self.ConfigDict(i.get('ServiceName')).get('start'), } }) n += 1 #debug(service_dict = service_dict) return service_dict
def _build_srv_dict(hscm, machineName): # One node for each service name. dict_service_to_node = {} try: # Old versions of this library do not have this function. statuses = win32service.EnumServicesStatusEx(hscm, _type_filter, _state_filter) # li={'ControlsAccepted': 0, 'ServiceType': 32, 'DisplayName': 'WWAN AutoConfig', 'ServiceSpecificExitCode': 0, # 'ProcessId': 0, 'ServiceFlags': 0, 'CheckPoint': 0, 'ServiceName': 'WwanSvc', 'Win32ExitCode': 1077, # 'WaitHint': 0, 'CurrentState': 1}, for lst in statuses: service_name = lst['ServiceName'] lst["depends_in"] = [] lst["depends_out"] = [] dict_service_to_node[service_name] = lst # except AttributeError: except Exception: statuses = win32service.EnumServicesStatus(hscm, _type_filter, _state_filter) # li=('wuauserv', 'Windows Update', (32, 4, 453, 0, 0, 0, 0)) for svc in statuses: logging.debug("service=%s", str(svc)) # TODO: This must match the keys of EnumServicesStatusEx # lst = { "ServiceName":service_name, "DisplayName":descript, "CurrentState": status} lst = {"ServiceName":svc[0], "DisplayName":svc[1], "CurrentState": svc[2][1]} lst["depends_in"] = [] lst["depends_out"] = [] # A Win32 service status object is represented by a tuple # 0: serviceType # 1: serviceState # 2: controlsAccepted # 3: win32ExitCode # 4: serviceSpecificErrorCode # 5: checkPoint # 6: waitHint dict_service_to_node[svc[0]] = lst try: hsvc = win32service.OpenService(hscm, svc[0], win32service.SERVICE_CHANGE_CONFIG) # TODO: WHY DOING THIS ????? MAYBE FOR TESTING THE SERVICE PRESENCE ?? #win32service.ChangeServiceConfig(hsvc, win32service.SERVICE_NO_CHANGE, # win32service.SERVICE_DISABLED, win32service.SERVICE_NO_CHANGE, None, None,0, # None,None,None,None) win32service.CloseServiceHandle(hsvc) except Exception: # Might receive "Access is denied" if this is on a remote machine. lst["ProcessId"] = 999999 pass return dict_service_to_node
def QueryAllServicesStatus(includeDriverServices=False): returnValue = [] servicesRaw = [] serviceConfigManagerHandle = None try: serviceConfigManagerHandle = win32service.OpenSCManager( '', None, win32service.SC_MANAGER_ALL_ACCESS) if includeDriverServices: servicesRaw += win32service.EnumServicesStatusEx( serviceConfigManagerHandle, win32service.SERVICE_DRIVER) servicesRaw += win32service.EnumServicesStatusEx( serviceConfigManagerHandle) for rawService in servicesRaw: serviceStatus = ServiceStatusProcessEntity(**rawService) returnValue.append(serviceStatus.Status) return returnValue finally: if serviceConfigManagerHandle: win32service.CloseServiceHandle(serviceConfigManagerHandle)
def _get_services(): ''' Returns a list of all services on the system. ''' handle_scm = win32service.OpenSCManager( None, None, win32service.SC_MANAGER_ENUMERATE_SERVICE) try: services = win32service.EnumServicesStatusEx(handle_scm) except AttributeError: services = win32service.EnumServicesStatus(handle_scm) finally: win32service.CloseServiceHandle(handle_scm) return services
def get_services(process_id): services_names = [] hSCManager = ws.OpenSCManager( None, None, ws.SC_MANAGER_CONNECT | ws.SC_MANAGER_ENUMERATE_SERVICE) services = ws.EnumServicesStatusEx(hSCManager, ws.SERVICE_WIN32, ws.SERVICE_STATE_ALL, None, ws.SC_ENUM_PROCESS_INFO) for service in services: if service["ProcessId"] == process_id: services_names.append(service["ServiceName"]) if len(services_names) == 0: return None services_names = sorted(services_names) return services_names