/* Copyright (c) 2010 EugineLev, All Rights Reserved * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package com.sun.jna.platform.win32; import com.sun.jna.Memory; import com.sun.jna.Structure; import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.win32.StdCallLibrary; /** * This module defines the 32-Bit Windows types and constants that are defined * by NT, but exposed through the Win32 API. * Ported from Winsvc.h. * Microsoft Windows SDK 7.0A. * @author EugineLev */ public interface Winsvc extends StdCallLibrary { /** * Contains status information for a service. The ControlService, EnumDependentServices, * EnumServicesStatus, and QueryServiceStatus functions use this structure. A service * uses this structure in the SetServiceStatus function to report its current status * to the service control manager. */ public static class SERVICE_STATUS extends Structure { /** * dwServiceType - the type of service. This member can be one * of the following values: * SERVICE_KERNEL_DRIVER, SERVICE_FILE_SYSTEM_DRIVER, * SERVICE_WIN32_OWN_PROCESS, SERVICE_WIN32_SHARE_PROCESS, * If the service type is either SERVICE_WIN32_OWN_PROCESS or * SERVICE_WIN32_SHARE_PROCESS, and the service is running in the * context of the LocalSystem account, the following type may also * be specified: * SERVICE_INTERACTIVE_PROCESS * * These values can be found in WinNT.h */ public int dwServiceType; /** * dwCurrentState - The current state of the service. * This member can be one of the following values: * SERVICE_STOPPED, SERVICE_START_PENDING, SERVICE_STOP_PENDING, SERVICE_RUNNING, * SERVICE_CONTINUE_PENDING, SERVICE_PAUSE_PENDING, SERVICE_PAUSED */ public int dwCurrentState; /** * dwControlsAccepted - The control codes the service accepts and processes * in its handler function: * SERVICE_ACCEPT_STOP, SERVICE_ACCEPT_PAUSE_CONTINUE, SERVICE_ACCEPT_SHUTDOWN, * SERVICE_ACCEPT_PARAMCHANGE, SERVICE_ACCEPT_NETBINDCHANGE, SERVICE_ACCEPT_HARDWAREPROFILECHANGE, * SERVICE_ACCEPT_POWEREVENT, SERVICE_ACCEPT_SESSIONCHANGE, SERVICE_ACCEPT_PRESHUTDOWN, * SERVICE_ACCEPT_TIMECHANGE, SERVICE_ACCEPT_TRIGGEREVENT */ public int dwControlsAccepted; /** * dwWin32ExitCode - The error code the service uses to report an error that occurs * when it is starting or stopping. To return an error code specific to the service, * the service must set this value to ERROR_SERVICE_SPECIFIC_ERROR to indicate that * the dwServiceSpecificExitCode member contains the error code. The service should * set this value to NO_ERROR when it is running and on normal termination. */ public int dwWin32ExitCode; /** * dwServiceSpecificExitCode - A service-specific error code that the service returns * when an error occurs while the service is starting or stopping. This value is * ignored unless the dwWin32ExitCode member is set to ERROR_SERVICE_SPECIFIC_ERROR. */ public int dwServiceSpecificExitCode; /** * dwCheckPoint - The check-point value the service increments periodically to report * its progress during a lengthy start, stop, pause, or continue operation. */ public int dwCheckPoint; /** * dwWaitHint - The estimated time required for a pending start, stop, pause, or continue * operation, in milliseconds. */ public int dwWaitHint; public SERVICE_STATUS() { super(); } } /** * Contains process status information for a service. The ControlServiceEx, * EnumServicesStatusEx, NotifyServiceStatusChange, and QueryServiceStatusEx * functions use this structure. */ public class SERVICE_STATUS_PROCESS extends Structure { /** * dwServiceType - the type of service. This member can be one * of the following values: * SERVICE_KERNEL_DRIVER, SERVICE_FILE_SYSTEM_DRIVER, * SERVICE_WIN32_OWN_PROCESS, SERVICE_WIN32_SHARE_PROCESS, * If the service type is either SERVICE_WIN32_OWN_PROCESS or * SERVICE_WIN32_SHARE_PROCESS, and the service is running in the * context of the LocalSystem account, the following type may also * be specified: * SERVICE_INTERACTIVE_PROCESS * * These values can be found in WinNT.h */ public int dwServiceType; /** * dwCurrentState - The current state of the service. * This member can be one of the following values: * SERVICE_STOPPED, SERVICE_START_PENDING, SERVICE_STOP_PENDING, SERVICE_RUNNING, * SERVICE_CONTINUE_PENDING, SERVICE_PAUSE_PENDING, SERVICE_PAUSED */ public int dwCurrentState; /** * dwControlsAccepted - The control codes the service accepts and processes * in its handler function: * SERVICE_ACCEPT_STOP, SERVICE_ACCEPT_PAUSE_CONTINUE, SERVICE_ACCEPT_SHUTDOWN, * SERVICE_ACCEPT_PARAMCHANGE, SERVICE_ACCEPT_NETBINDCHANGE, SERVICE_ACCEPT_HARDWAREPROFILECHANGE, * SERVICE_ACCEPT_POWEREVENT, SERVICE_ACCEPT_SESSIONCHANGE, SERVICE_ACCEPT_PRESHUTDOWN, * SERVICE_ACCEPT_TIMECHANGE, SERVICE_ACCEPT_TRIGGEREVENT */ public int dwControlsAccepted; /** * dwWin32ExitCode - The error code the service uses to report an error that occurs * when it is starting or stopping. To return an error code specific to the service, * the service must set this value to ERROR_SERVICE_SPECIFIC_ERROR to indicate that * the dwServiceSpecificExitCode member contains the error code. The service should * set this value to NO_ERROR when it is running and on normal termination. */ public int dwWin32ExitCode; /** * dwServiceSpecificExitCode - A service-specific error code that the service returns * when an error occurs while the service is starting or stopping. This value is * ignored unless the dwWin32ExitCode member is set to ERROR_SERVICE_SPECIFIC_ERROR. */ public int dwServiceSpecificExitCode; /** * dwCheckPoint - The check-point value the service increments periodically to report * its progress during a lengthy start, stop, pause, or continue operation. */ public int dwCheckPoint; /** * dwWaitHint - The estimated time required for a pending start, stop, pause, or continue * operation, in milliseconds. */ public int dwWaitHint; /** * dwProcessId - The process identifier of the service. */ public int dwProcessId; /** * This member can be one of the following values: 0, or SERVICE_RUNS_IN_SYSTEM_PROCESS */ public int dwServiceFlags; public SERVICE_STATUS_PROCESS() { } public SERVICE_STATUS_PROCESS(int size) { super(new Memory(size)); } } // // Service flags for QueryServiceStatusEx // public static final int SERVICE_RUNS_IN_SYSTEM_PROCESS = 0x00000001; public static class SC_HANDLE extends HANDLE { } // // Service Control Manager object specific access types // public static final int SC_MANAGER_CONNECT = 0x0001; public static final int SC_MANAGER_CREATE_SERVICE = 0x0002; public static final int SC_MANAGER_ENUMERATE_SERVICE = 0x0004; public static final int SC_MANAGER_LOCK = 0x0008; public static final int SC_MANAGER_QUERY_LOCK_STATUS = 0x0010; public static final int SC_MANAGER_MODIFY_BOOT_CONFIG = 0x0020; public static final int SC_MANAGER_ALL_ACCESS = WinNT.STANDARD_RIGHTS_REQUIRED | SC_MANAGER_CONNECT | SC_MANAGER_CREATE_SERVICE | SC_MANAGER_ENUMERATE_SERVICE | SC_MANAGER_LOCK | SC_MANAGER_QUERY_LOCK_STATUS | SC_MANAGER_MODIFY_BOOT_CONFIG; // // Service object specific access type // public static final int SERVICE_QUERY_CONFIG = 0x0001; public static final int SERVICE_CHANGE_CONFIG = 0x0002; public static final int SERVICE_QUERY_STATUS = 0x0004; public static final int SERVICE_ENUMERATE_DEPENDENTS = 0x0008; public static final int SERVICE_START = 0x0010; public static final int SERVICE_STOP = 0x0020; public static final int SERVICE_PAUSE_CONTINUE = 0x0040; public static final int SERVICE_INTERROGATE = 0x0080; public static final int SERVICE_USER_DEFINED_CONTROL = 0x0100; public static final int SERVICE_ALL_ACCESS = WinNT.STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS | SERVICE_START | SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_INTERROGATE | SERVICE_USER_DEFINED_CONTROL; // // Controls // public static final int SERVICE_CONTROL_STOP = 0x00000001; public static final int SERVICE_CONTROL_PAUSE = 0x00000002; public static final int SERVICE_CONTROL_CONTINUE = 0x00000003; public static final int SERVICE_CONTROL_INTERROGATE = 0x00000004; // public static final int SERVICE_CONTROL_SHUTDOWN = 0x00000005; public static final int SERVICE_CONTROL_PARAMCHANGE = 0x00000006; public static final int SERVICE_CONTROL_NETBINDADD = 0x00000007; public static final int SERVICE_CONTROL_NETBINDREMOVE = 0x00000008; public static final int SERVICE_CONTROL_NETBINDENABLE = 0x00000009; public static final int SERVICE_CONTROL_NETBINDDISABLE = 0x0000000A; // public static final int SERVICE_CONTROL_DEVICEEVENT = 0x0000000B; // public static final int SERVICE_CONTROL_HARDWAREPROFILECHANGE = 0x0000000C; // public static final int SERVICE_CONTROL_POWEREVENT = 0x0000000D; // public static final int SERVICE_CONTROL_SESSIONCHANGE = 0x0000000E; // public static final int SERVICE_CONTROL_PRESHUTDOWN = 0x0000000F; // public static final int SERVICE_CONTROL_TIMECHANGE = 0x00000010; // public static final int SERVICE_CONTROL_TRIGGEREVENT = 0x00000020; // // Service State -- for CurrentState // 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; // // Controls Accepted (Bit Mask) // public static final int SERVICE_ACCEPT_STOP = 0x00000001; public static final int SERVICE_ACCEPT_PAUSE_CONTINUE = 0x00000002; public static final int SERVICE_ACCEPT_SHUTDOWN = 0x00000004; public static final int SERVICE_ACCEPT_PARAMCHANGE = 0x00000008; public static final int SERVICE_ACCEPT_NETBINDCHANGE = 0x00000010; public static final int SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 0x00000020; public static final int SERVICE_ACCEPT_POWEREVENT = 0x00000040; public static final int SERVICE_ACCEPT_SESSIONCHANGE = 0x00000080; public static final int SERVICE_ACCEPT_PRESHUTDOWN = 0x00000100; public static final int SERVICE_ACCEPT_TIMECHANGE = 0x00000200; public static final int SERVICE_ACCEPT_TRIGGEREVENT = 0x00000400; /** * The SC_STATUS_TYPE enumeration type contains values */ public abstract class SC_STATUS_TYPE { public static final int SC_STATUS_PROCESS_INFO = 0; } }