All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.com.sun.jna.platform.win32.Winsvc Maven / Gradle / Ivy

There is a newer version: 1.7.ga
Show newest version
/* 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;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy