将Windows服务状态DWORD值转换为人类可读格式

时间:2016-07-16 23:33:29

标签: python winapi service status pywin32

我有一个函数,可以使用Python 3中PyWin32模块中的win32service.EnumServicesStatus()函数枚举Windows系统上的所有服务。我能够获取状态名称,服务描述和状态。问题在于,对于状态而不是获得类似"运行","暂停","停止","重新启动"我得到了7个元素的元组。

一个例子:

status_code = (32, 1, 0, 1077, 0, 0, 0)

SERVICE_STATUS structure是这样的:

C ++

typedef struct _SERVICE_STATUS {
  DWORD dwServiceType;
  DWORD dwCurrentState;
  DWORD dwControlsAccepted;
  DWORD dwWin32ExitCode;
  DWORD dwServiceSpecificExitCode;
  DWORD dwCheckPoint;
  DWORD dwWaitHint;
} SERVICE_STATUS, *LPSERVICE_STATUS;

无论如何,有很多可用的信息我只对由元组的第二个元素表示的服务的CurrentState感兴趣。在示例中,它的编号为" 1" (00000001)。

此表显示每个值的含义

SERVICE_CONTINUE_PENDING 0x00000005 The service continue is pending.

SERVICE_PAUSE_PENDING 0x00000006 The service pause is pending.

SERVICE_PAUSED 0x00000007 The service is paused.

SERVICE_RUNNING 0x00000004 The service is running.

SERVICE_START_PENDING 0x00000002 The service is starting.

SERVICE_STOP_PENDING 0x00000003 The service is stopping.

SERVICE_STOPPED 0x00000001 The service is not running.

如何将字符串映射到每个值并显示一个显示当前状态的字符串?

我认为我可以创建这样的字典,然后提取对应于该值的字符串:

status = {"1": "not running", "2": "starting", "3": "stopping", "4": "running", "5": "continue pending", "6": "pause pending", "7": "paused"}

然后我提取元组的第二个值:status_code[1],我需要将它与字典status内的值进行比较。 为了打印服务状态的字符串,我可以执行以下操作:

print(status[str(status_code[1])])

我做对了吗?有没有更好的方法呢?

0 个答案:

没有答案