/**
* Licensed to JumpMind Inc under one or more contributor
* license agreements. See the NOTICE file distributed
* with this work for additional information regarding
* copyright ownership. JumpMind Inc licenses this file
* to you under the GNU General Public License, version 3.0 (GPLv3)
* (the "License"); you may not use this file except in compliance
* with the License.
*
* You should have received a copy of the GNU General Public License,
* version 3.0 (GPLv3) along with this library; if not, see
* <http://www.gnu.org/licenses/>.
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jumpmind.symmetric.wrapper.jna;
import java.util.Arrays;
import java.util.List;
import org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement;
import org.jumpmind.symmetric.wrapper.jna.WinsvcEx.SERVICE_DELAYED_AUTO_START_INFO;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.platform.win32.Advapi32;
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.platform.win32.Winsvc.SC_HANDLE;
import com.sun.jna.platform.win32.Winsvc.SERVICE_STATUS;
import com.sun.jna.win32.W32APIOptions;
@IgnoreJRERequirement
public interface Advapi32Ex extends Advapi32 {
Advapi32Ex INSTANCE = (Advapi32Ex) Native.loadLibrary("Advapi32", Advapi32Ex.class,
W32APIOptions.UNICODE_OPTIONS);
SC_HANDLE CreateService(SC_HANDLE manager, String serviceName, String displayName, int access,
int serviceType, int startType, int errorControl, String commandLine,
String loadOrderGroup, String tagId, String dependencies, String user, String password);
boolean ChangeServiceConfig2(SC_HANDLE service, int infoLevel, SERVICE_INFO info);
boolean ChangeServiceConfig2(SC_HANDLE service, int infoLevel, SERVICE_DELAYED_AUTO_START_INFO info);
boolean DeleteService(SC_HANDLE serviceHandle);
boolean StartServiceCtrlDispatcher(Structure[] serviceTable);
boolean SetServiceStatus(Pointer serviceStatusHandle, SERVICE_STATUS serviceStatus);
SERVICE_STATUS_HANDLE RegisterServiceCtrlHandlerEx(String serviceName,
HANDLER_FUNCTION handler, Object context);
public static class SERVICE_INFO extends Structure {
@Override
protected List<String> getFieldOrder() {
return null;
}
}
public static class SERVICE_DESCRIPTION extends SERVICE_INFO {
public String description;
public SERVICE_DESCRIPTION(String description) {
this.description = description;
}
@Override
protected List<String> getFieldOrder() {
return Arrays.asList(new String[] { "description" });
}
}
public static class SERVICE_STATUS_HANDLE extends HANDLE {
public SERVICE_STATUS_HANDLE() {
}
public SERVICE_STATUS_HANDLE(Pointer p) {
super(p);
}
}
public interface HANDLER_FUNCTION extends StdCallCallback {
void serviceControlHandler(int controlCode);
}
}