java - 使用 JNA 查询所有 Windows 服务

标签 java api winapi windows-services jna

目前我正在尝试从(远程)机器查询所有已安装的 Windows 服务。 我查看了 win32.Advapi32

But here I can only "get" a defined (I have to give a "ServiceName") Windows Services. (Advapi32.INSTANCE.OpenSCManager, Advapi32.INSTANCE.OpenService, Advapi32.INSTANCE.QueryServiceStatusEx)

您知道任何允许从(远程)机器查询所有 Windows 服务的 API 吗?

编辑://

我已经用下面的代码试过了。但它几乎没有错误消息就中止了!

public void getService(){
    IntByReference size = new IntByReference();
    IntByReference lppcbBytesneeded = new IntByReference();
    IntByReference retz = new IntByReference();
    SC_HANDLE scm = Advapi32.INSTANCE.OpenSCManager(null, null, Winsvc.SC_MANAGER_ENUMERATE_SERVICE);
    boolean ret = CustomAdvapi32.INSTANCE.EnumServicesStatusEx(scm, 0, 0x00000030, 0x0000000, null, lppcbBytesneeded, 
            retz, size, null);
    //CustomAdvapi32.INSTANCE.EnumServicesStatusEx(hSCManager, InfoLevel, dwServiceType, dwServiceState, 
    //cbBufSize, pcbBytesNeeded, lpServicesReturned, lpResumeHandle, pstzGroupName)
     int error = Native.getLastError();

       Memory buf = new Memory(lppcbBytesneeded.getValue());
       size.setValue(retz.getValue());
       ret = CustomAdvapi32.INSTANCE.EnumServicesStatusEx(scm, 0, 0x00000030, 0x0000000,
               buf, lppcbBytesneeded, retz, size, null);
       error = Native.getLastError();


       ENUM_SERVICE_STATUS_PROCESS serviceInfo = new ENUM_SERVICE_STATUS_PROCESS(buf);
       Structure[] serviceInfos = serviceInfo.toArray(retz.getValue());

       for(int i = 0; i < retz.getValue(); i++) {
         serviceInfo = (ENUM_SERVICE_STATUS_PROCESS) serviceInfos[i];
         System.out.println(serviceInfo.lpDisplayName + " / " + serviceInfo.lpServiceName);
       }
}

最佳答案

您错误地映射了 EnumServicesStatusEx。第六个参数需要是传入缓冲区的大小(在您的第一次调用中,它应该为零)。接下来是指向所需大小的指针。

请注意,EnumServicesStatusEx 需要 10 个参数,而您只将其映射到 9 个。

关于java - 使用 JNA 查询所有 Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20562528/

相关文章:

python - 我在 python 中的语音识别 (Google) 中使用哪个 API key

java - Neo4j REST API Java 绑定(bind) 唯一性已弃用

api - 对于 HTTP POST 使用 URI 路径变量怎么样?

c++ - sprintf_s 崩溃

java - 在特定时间不活动后注销

java - JSF1064 : Primefaces can't load resources

c++ - 我是否需要包含 "Windows.h"才能隐式使用 Windows API/与 Windows API 通信?

c++ - 如何播放视频?

java - 为什么我的 JLabel 图标没有出现?

java - 安卓工作室 : Project successfully compiled but can't access Google Play Services on device