В настоящее время я пытаюсь запросить все установленные службы Windows с (удаленной) машины. Я взглянул на win32.Advapi32
.Запросить все службы Windows с помощью JNA
Но здесь я могу только «получить» определенный (я должен предоставить «ServiceName») Службы Windows. (Advapi32.INSTANCE.OpenSCManager, Advapi32.INSTANCE.OpenService, Advapi32.INSTANCE.QueryServiceStatusEx)
Знаете ли вы API, который позволяет запросить все службы Windows из (удаленных) машин?
EDIT: //
Я попробовал Allready со следующим кодом. Но он почти не прерывает сообщение об ошибке!
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);
}
}
Очевидно, [команда 'sc' может это сделать] (http://www.randomsupport.com/rs/blogs/index.php?title=howto_remotely_query_windows_service_inf&more=1&c=1&tb=1&pb=1), и я бы предположил для этого используются функции SCManager. – technomage
Привет, спасибо. Но 1. Я не могу/не буду называть инструмент «третьей стороны» и читать поток. 2. Хмм я ничего не узнал о том, какой apis этот инструмент вызывает. Возникает вопрос: какой API этот инструмент вызывает для запроса всех установленных служб Windows? Но спасибо до сих пор –
Похоже, что ['EnumServicesStatusEx'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms682640 (v = vs.85) .aspx) - это то, что вы хотите. – technomage