Мне нужно перечислить все установленные, запущенные и остановленные службы (STATE = ALL)
.Ранее я использовал команду "sc query", но мне нужно сделать это с помощью JNA.Я никогда не использовал JNA раньше, поэтому я не знаю много.
Я нашел это Запрос всех служб Windows с JNA и сделал то, что было сказано в ответе, но я не могу получитьэто работает.
public void getService(){
IntByReference size = new IntByReference();
IntByReference lppcbBytesneeded = new IntByReference();
IntByReference retz = new IntByReference();
lppcbBytesneeded.setValue(0);
Winsvc.SC_HANDLE scm = Advapi32.INSTANCE.OpenSCManager(null, null, Winsvc.SC_MANAGER_ENUMERATE_SERVICE);
boolean ret = CustomAdvapi32.INSTANCE.EnumServicesStatusEx(scm.getPointer(), 0, 0x00000030, 0x0000003, null, 0, lppcbBytesneeded,
retz, size, null);
int error = Native.getLastError();
Memory buf = new Memory(lppcbBytesneeded.getValue());
size.setValue(retz.getValue());
ret = CustomAdvapi32.INSTANCE.EnumServicesStatusEx(scm.getPointer(), 0, 0x00000030, 0x0000000,
buf, lppcbBytesneeded.getValue(), 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);
}
}
Все, что я могу получить от этого, это ошибка:
java.lang.ArrayIndexOutOfBoundsException: 0
at com.sun.jna.Structure.toArray(Structure.java:1562)
at com.sun.jna.Structure.toArray(Structure.java:1587)
at Main.getService(Main.java:156)
at Main.main(Main.java:22)