PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/win_service.py |
import salt.utils.platform from salt.exceptions import CommandExecutionError try: import pywintypes import win32security import win32service HAS_WIN32 = True except ImportError: HAS_WIN32 = False SERVICE_TYPE = { 1: "Kernel Driver", 2: "File System Driver", 4: "Adapter Driver", 8: "Recognizer Driver", 16: "Win32 Own Process", 32: "Win32 Share Process", 256: "Interactive", "kernel": 1, "filesystem": 2, "adapter": 4, "recognizer": 8, "own": 16, "share": 32, } SERVICE_CONTROLS = { 1: "Stop", 2: "Pause/Continue", 4: "Shutdown", 8: "Change Parameters", 16: "Netbind Change", 32: "Hardware Profile Change", 64: "Power Event", 128: "Session Change", 256: "Pre-Shutdown", 512: "Time Change", 1024: "Trigger Event", } SERVICE_STATE = { 1: "Stopped", 2: "Start Pending", 3: "Stop Pending", 4: "Running", 5: "Continue Pending", 6: "Pause Pending", 7: "Paused", } SERVICE_ERRORS = {0: "No Error", 1066: "Service Specific Error"} SERVICE_START_TYPE = { "boot": 0, "system": 1, "auto": 2, "manual": 3, "disabled": 4, 0: "Boot", 1: "System", 2: "Auto", 3: "Manual", 4: "Disabled", } SERVICE_ERROR_CONTROL = { 0: "Ignore", 1: "Normal", 2: "Severe", 3: "Critical", "ignore": 0, "normal": 1, "severe": 2, "critical": 3, } __virtualname__ = "win_service" def __virtual__(): """ Only load if Win32 Libraries are installed """ if not salt.utils.platform.is_windows(): return False, "win_dacl: Requires Windows" if not HAS_WIN32: return False, "win_dacl: Requires pywin32" return __virtualname__ def info(name): """ Get information about a service on the system Args: name (str): The name of the service. This is not the display name. Use ``get_service_name`` to find the service name. Returns: dict: A dictionary containing information about the service. CLI Example: .. code-block:: bash salt '*' service.info spooler """ try: handle_scm = win32service.OpenSCManager( None, None, win32service.SC_MANAGER_CONNECT ) except pywintypes.error as exc: raise CommandExecutionError(f"Failed to connect to the SCM: {exc.strerror}") try: handle_svc = win32service.OpenService( handle_scm, name, win32service.SERVICE_ENUMERATE_DEPENDENTS | win32service.SERVICE_INTERROGATE | win32service.SERVICE_QUERY_CONFIG | win32service.SERVICE_QUERY_STATUS, ) except pywintypes.error as exc: raise CommandExecutionError(f"Failed To Open {name}: {exc.strerror}") try: config_info = win32service.QueryServiceConfig(handle_svc) status_info = win32service.QueryServiceStatusEx(handle_svc) try: description = win32service.QueryServiceConfig2( handle_svc, win32service.SERVICE_CONFIG_DESCRIPTION ) except pywintypes.error: description = "Failed to get description" delayed_start = win32service.QueryServiceConfig2( handle_svc, win32service.SERVICE_CONFIG_DELAYED_AUTO_START_INFO ) finally: win32service.CloseServiceHandle(handle_scm) win32service.CloseServiceHandle(handle_svc) ret = dict() try: sid = win32security.LookupAccountName("", f"NT Service\\{name}")[0] ret["sid"] = win32security.ConvertSidToStringSid(sid) except pywintypes.error: ret["sid"] = "Failed to get SID" ret["BinaryPath"] = config_info[3] ret["LoadOrderGroup"] = config_info[4] ret["TagID"] = config_info[5] ret["Dependencies"] = config_info[6] ret["ServiceAccount"] = config_info[7] ret["DisplayName"] = config_info[8] ret["Description"] = description ret["Status_ServiceCode"] = status_info["ServiceSpecificExitCode"] ret["Status_CheckPoint"] = status_info["CheckPoint"] ret["Status_WaitHint"] = status_info["WaitHint"] ret["StartTypeDelayed"] = delayed_start flags = list() for bit in SERVICE_TYPE: if isinstance(bit, int): if config_info[0] & bit: flags.append(SERVICE_TYPE[bit]) ret["ServiceType"] = flags if flags else config_info[0] flags = list() for bit in SERVICE_CONTROLS: if status_info["ControlsAccepted"] & bit: flags.append(SERVICE_CONTROLS[bit]) ret["ControlsAccepted"] = flags if flags else status_info["ControlsAccepted"] try: ret["Status_ExitCode"] = SERVICE_ERRORS[status_info["Win32ExitCode"]] except KeyError: ret["Status_ExitCode"] = status_info["Win32ExitCode"] try: ret["StartType"] = SERVICE_START_TYPE[config_info[1]] except KeyError: ret["StartType"] = config_info[1] try: ret["ErrorControl"] = SERVICE_ERROR_CONTROL[config_info[2]] except KeyError: ret["ErrorControl"] = config_info[2] try: ret["Status"] = SERVICE_STATE[status_info["CurrentState"]] except KeyError: ret["Status"] = status_info["CurrentState"] return ret