/* Copyright (c) 2011 Timothy Wall, All Rights Reserved
*
* The contents of this file is dual-licensed under 2
* alternative Open Source/Free licenses: LGPL 2.1 or later and
* Apache License 2.0. (starting with JNA version 4.0.0).
*
* You can freely decide which license you want to apply to
* the project.
*
* You may obtain a copy of the LGPL License at:
*
* http://www.gnu.org/licenses/licenses.html
*
* A copy is also included in the downloadable source code package
* containing JNA, in file "LGPL2.1".
*
* You may obtain a copy of the Apache License at:
*
* http://www.apache.org/licenses/
*
* A copy is also included in the downloadable source code package
* containing JNA, in file "AL2.0".
*/
package com.sun.jna.wince;
import junit.framework.TestCase;
import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.*;
import java.util.List;
public class CoreDLLTest extends TestCase {
public static void main(java.lang.String[] argList) {
junit.textui.TestRunner.run(CoreDLLTest.class);
}
public interface CoreDLL extends StdCallLibrary {
CoreDLL INSTANCE = Native.loadLibrary("coredll", CoreDLL.class, W32APIOptions.UNICODE_OPTIONS);
public static class SECURITY_ATTRIBUTES extends Structure {
public static final List<String> FIELDS = createFieldsOrder("dwLength", "lpSecurityDescriptor", "bInheritHandle");
public int dwLength;
public Pointer lpSecurityDescriptor;
public boolean bInheritHandle;
public SECURITY_ATTRIBUTES() {
dwLength = size();
}
@Override
protected List<String> getFieldOrder() {
return FIELDS;
}
}
public static class STARTUPINFO extends Structure {
public static final List<String> FIELDS = createFieldsOrder(
"cb", "lpReserved", "lpDesktop", "lpTitle", "dwX", "dwY", "dwXSize", "dwYSize",
"dwXCountChars", "dwYCountChars", "dwFillAttribute", "dwFlags", "wShowWindow",
"cbReserved2", "lpReserved2", "hStdInput", "hStdOutput", "hStdError");
public int cb;
public String lpReserved;
public String lpDesktop;
public String lpTitle;
public int dwX;
public int dwY;
public int dwXSize;
public int dwYSize;
public int dwXCountChars;
public int dwYCountChars;
public int dwFillAttribute;
public int dwFlags;
public short wShowWindow;
public short cbReserved2;
public ByteByReference lpReserved2;
public Pointer hStdInput;
public Pointer hStdOutput;
public Pointer hStdError;
public STARTUPINFO() {
cb = size();
}
@Override
protected List<String> getFieldOrder() {
return FIELDS;
}
}
public static class PROCESS_INFORMATION extends Structure {
public static final List<String> FIELDS = createFieldsOrder("hProcess", "hThread", "dwProcessId", "dwThreadId");
public Pointer hProcess;
public Pointer hThread;
public int dwProcessId;
public int dwThreadId;
public static class ByReference extends PROCESS_INFORMATION implements Structure.ByReference {
public ByReference() {
}
public ByReference(Pointer memory) {
super(memory);
}
}
public PROCESS_INFORMATION() {
super();
}
public PROCESS_INFORMATION(Pointer memory) {
super(memory);
}
@Override
protected List<String> getFieldOrder() {
return FIELDS;
}
}
boolean CreateProcess(String lpApplicationName, String lpCommandLine,
SECURITY_ATTRIBUTES lpProcessAttributes,
SECURITY_ATTRIBUTES lpThreadAttributes,
boolean bInheritHandles, int dwCreationFlags,
Pointer lpEnvironment, String lpCurrentDirectory, STARTUPINFO lpStartupInfo,
PROCESS_INFORMATION lpProcessInformation) throws LastErrorException;
}
public void testCreateProcess() {
CoreDLL.PROCESS_INFORMATION processInformation = new CoreDLL.PROCESS_INFORMATION();
//String cmd = "/storage card/Program files/PHM Tools/regedit";
String cmd = null;
boolean status = CoreDLL.INSTANCE.CreateProcess(cmd, null, null, null,
false, 0x10, Pointer.NULL,
null, null, processInformation);
assertTrue("Process launch failed", status);
}
}