Я пытаюсь запросить статус службы Windows в Java с помощью JNA. Я использую следующую функцию Windows API:
QuerySerivceStatusEx( SC_HANDLE hService, SC_STATUS_TYPE InfoLevel, LPBYTE lpBuffer, DWORD cbBufSize, LPDWORD pcbBytesNeeded)
Внутри LPBYTE lpBuffer
находится указатель на структуру. А внутри структуры он хранит текущее состояние как DWORD
. Согласно документации JNA DWORDs
отображается в ints
в Java, а согласно WinSvc.h DWORD
, связанный с выполнением, равен 0x00000004
, поэтому в моем коде я определил конечное значение int со значением 0x00000004
, например
public static final int SERVICE_RUNNING = 0x00000004
Когда я запускаю код и запускаю запрашиваемую службу, я получаю значение 16
, которое вообще не определено в WinSvc.h. Я пропускаю какой-то перевод?
РЕДАКТИРОВАТЬ: Чтобы уточнить, все состояния, в которых может быть служба, и связанные с ними значения:
public static final int SERVICE_STOPPED = 0x00000001;
public static final int SERVICE_START_PENDING = 0x00000002;
public static final int SERVICE_STOP_PENDING = 0x00000003;
public static final int SERVICE_RUNNING = 0x00000004;
public static final int SERVICE_CONTINUE_PENDING = 0x00000005;
public static final int SERVICE_PAUSE_PENDING = 0x00000006;
public static final int SERVICE_PAUSED = 0x00000007;