Windows SC.exe如何查询服务上的控制代码

8ehkhllq  于 2023-06-24  发布在  Windows
关注(0)|答案(1)|浏览(133)

我做了什么

我试图在一个名为MyTestService的自定义Windows服务中实现ServiceBase.OnCustomCommand(int command),使用this answer中的自定义命令代码:

public enum MyCustomCommands { ExecuteScript = 128 };

我注意到,在128处启动自定义命令值是很常见的。
我尝试实现自定义命令代码如下:

public enum MyCustomCommandCodes
{
    Test1 = 1,
    Test2 = 2,
}

protected override void OnCustomCommand(int command)
{
    switch (command)
    {
        case (int)MyCustomCommandCodes.Test1:
            eventLog1.WriteEntry("Test1");
            break;
        case (int)MyCustomCommandCodes.Test2:
            eventLog1.WriteEntry("Test2");
            break;
        default:
            eventLog1.WriteEntry("default");
            break;
    }
}

我使用Windows的命令行实用程序Service Control (SC)调用OnCustomCommand
当我输入sc control MyTestService 1时,我发现它实际上停止了服务,而不是调用case Test1
在我看来,这解释了为什么人们在128开始命令值,这是为了防止与已经使用的代码重叠。
我希望能够看到哪些控制代码已被Windows服务使用。

两部分问题

  • 是否有办法查询所有正在使用的代码列表?
  • 如果是,是否也有一种方法来查询每个代码实际上做了什么?
suzh9iv8

suzh9iv81#

根据@madreflection的评论,它指出了ControlService函数:https://learn.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-controlservice
自定义控制码范围:128 to 255
并且还说明了为什么sc control MyTestService 1停止服务,这是因为0x1SERVICE_CONTROL_STOP控制代码相对应。
这从一个不同的方向回答了我的问题,用微软给出的一个查找表。

相关问题