// Path: lib/src/WinRun4J/src/org/boris/winrun4j/PInvoke.java
// public static class ByteArrayBuilder
// {
//     private byte[] array;
// 
//     public void set(byte[] array) {
//         this.array = array;
//     }
// 
//     public byte[] toArray() {
//         return array;
//     }
// }
// 
// Path: lib/src/WinRun4J/src/org/boris/winrun4j/PInvoke.java
// public static class IntPtr
// {
//     public long value;
// 
//     public IntPtr() {
//     }
// 
//     public IntPtr(long value) {
//         this.value = value;
//     }
// 
//     public int intValue() {
//         return (int) value;
//     }
// 
//     public String toString() {
//         return Long.toString(value);
//     }
// }
// 
// Path: lib/src/WinRun4J/src/org/boris/winrun4j/PInvoke.java
// public interface Struct
// {
// }
// 
// Path: lib/src/WinRun4J/src/org/boris/winrun4j/PInvoke.java
// public static class UIntPtr extends IntPtr
// {
//     public UIntPtr() {
//     }
// 
//     public UIntPtr(long value) {
//         this.value = value;
//     }
// }


import org.boris.winrun4j.PInvoke.ByteArrayBuilder;
import org.boris.winrun4j.PInvoke.DllImport;
import org.boris.winrun4j.PInvoke.IntPtr;
import org.boris.winrun4j.PInvoke.Out;
import org.boris.winrun4j.PInvoke.Struct;
import org.boris.winrun4j.PInvoke.UIntPtr;
        QUERY_INFO info = new QUERY_INFO();
        info.keyClass = lpClass.toString();
        info.subKeyCount = lpcSubKeys.intValue();
        info.maxSubkeyLen = lpcMaxSubKeyLen.intValue();
        info.maxClassLen = lpcMaxClassLen.intValue();
        info.valueCount = lpcValues.intValue();
        info.maxValueNameLen = lpcMaxValueNameLen.intValue();
        info.maxValueLen = lpcMaxValueLen.intValue();
        info.cbSecurityDescriptor = lpcbSecurityDescriptor.intValue();
        info.lastWriteTime = lastWriteTime;
        return info;
    }

    @DllImport(entryPoint = "RegSetValueEx")
    public static native long setValueEx(long hKey, String valueName,
            int reserved, int type, byte[] data, int len);

    public static class QUERY_INFO
    {
        public String keyClass;
        public int subKeyCount;
        public int maxSubkeyLen;
        public int maxClassLen;
        public int valueCount;
        public int maxValueNameLen;
        public int maxValueLen;
        public int cbSecurityDescriptor;
        public FILETIME lastWriteTime;
    }

// Path: lib/src/WinRun4J/src/org/boris/winrun4j/PInvoke.java
// public static class ByteArrayBuilder
// {
//     private byte[] array;
// 
//     public void set(byte[] array) {
//         this.array = array;
//     }
// 
//     public byte[] toArray() {
//         return array;
//     }
// }
// 
// Path: lib/src/WinRun4J/src/org/boris/winrun4j/PInvoke.java
// public static class IntPtr
// {
//     public long value;
// 
//     public IntPtr() {
//     }
// 
//     public IntPtr(long value) {
//         this.value = value;
//     }
// 
//     public int intValue() {
//         return (int) value;
//     }
// 
//     public String toString() {
//         return Long.toString(value);
//     }
// }
// 
// Path: lib/src/WinRun4J/src/org/boris/winrun4j/PInvoke.java
// public interface Struct
// {
// }
// 
// Path: lib/src/WinRun4J/src/org/boris/winrun4j/PInvoke.java
// public static class UIntPtr extends IntPtr
// {
//     public UIntPtr() {
//     }
// 
//     public UIntPtr(long value) {
//         this.value = value;
//     }
// }


// Path: lib/src/WinRun4J/src/org/boris/winrun4j/Registry.java
import org.boris.winrun4j.PInvoke.ByteArrayBuilder;
import org.boris.winrun4j.PInvoke.DllImport;
import org.boris.winrun4j.PInvoke.IntPtr;
import org.boris.winrun4j.PInvoke.Out;
import org.boris.winrun4j.PInvoke.Struct;
import org.boris.winrun4j.PInvoke.UIntPtr;

        QUERY_INFO info = new QUERY_INFO();
        info.keyClass = lpClass.toString();
        info.subKeyCount = lpcSubKeys.intValue();
        info.maxSubkeyLen = lpcMaxSubKeyLen.intValue();
        info.maxClassLen = lpcMaxClassLen.intValue();
        info.valueCount = lpcValues.intValue();
        info.maxValueNameLen = lpcMaxValueNameLen.intValue();
        info.maxValueLen = lpcMaxValueLen.intValue();
        info.cbSecurityDescriptor = lpcbSecurityDescriptor.intValue();
        info.lastWriteTime = lastWriteTime;
        return info;
    }

    @DllImport(entryPoint = "RegSetValueEx")
    public static native long setValueEx(long hKey, String valueName,
            int reserved, int type, byte[] data, int len);

    public static class QUERY_INFO
    {
        public String keyClass;
        public int subKeyCount;
        public int maxSubkeyLen;
        public int maxClassLen;
        public int valueCount;
        public int maxValueNameLen;
        public int maxValueLen;
        public int cbSecurityDescriptor;
        public FILETIME lastWriteTime;
    }

    public static class FILETIME implements Struct