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

org.jinterop.winreg.IJIWinReg Maven / Gradle / Ivy

There is a newer version: 3.5.1
Show newest version
/** j-Interop (Pure Java implementation of DCOM protocol)
 * Copyright (C) 2006  Vikram Roopchand
 *
 * 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 3.0 of the License, or (at your option) any later version.
 *
 * Though a sincere effort has been made to deliver a professional,
 * quality product,the library itself is distributed WITHOUT ANY WARRANTY;
 * See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
 */
package org.jinterop.winreg;

import jcifs.util.Encdec;
import ndr.NdrObject;
import ndr.NetworkDataRepresentation;
import org.jinterop.dcom.common.JIErrorCodes;
import org.jinterop.dcom.common.JIException;
import org.jinterop.dcom.common.JIRuntimeException;

/**
 * Perform C-R-U-D on the Windows Registry.
 *
 * 

* This interface uses "Windows Remote Registry" and "Server" services and these * must be running on target workstation. * * @since 1.0 * */ public interface IJIWinReg { public static final int KEY_ALL_ACCESS = 0x000f003f; public static final int KEY_CREATE_LINK = 0x00000020; public static final int KEY_CREATE_SUB_KEY = 0x00000004; public static final int KEY_ENUMERATE_SUB_KEYS = 0x00000008; public static final int KEY_EXECUTE = 0x00020019; public static final int KEY_NOTIFY = 0x00000010; public static final int KEY_QUERY_VALUE = 0x00000001; public static final int KEY_READ = 0x00020019; public static final int KEY_SET_VALUE = 0x00000002; public static final int KEY_WRITE = 0x00020006; /** * Type specifying String */ public static final int REG_SZ = 1; /** * Type specifying Binary */ public static final int REG_BINARY = 3; /** * Type specifying DWORD */ public static final int REG_DWORD = 4; /** * Type specifying environment string */ public static final int REG_EXPAND_SZ = 2; /** * Type specifying mutliple strings (array) */ public static final int REG_MULTI_SZ = 7; /** * Type specifying empty type */ public static final int REG_NONE = 0; public static final int REG_OPTION_NON_VOLATILE = 0; public static final int REG_OPTION_VOLATILE = 1; class closeKey extends NdrObject { public JIPolicyHandle key = null; @Override public int getOpnum() { return 5; } @Override public void write(NetworkDataRepresentation ndr) { ndr.writeOctetArray(key.handle, 0, 20); } @Override public void read(NetworkDataRepresentation ndr) { ndr.readOctetArray(policyhandle, 0, 20); int hresult = ndr.readUnsignedLong(); if (hresult != 0) { throw new JIRuntimeException(hresult); } } public byte[] policyhandle = new byte[20]; } class openHKLM extends NdrObject { @Override public int getOpnum() { return 2; } @Override public void write(NetworkDataRepresentation ndr) { //it's a pointer //referent ndr.writeUnsignedLong(new Object().hashCode()); //system name ndr.writeUnsignedShort(40736); //length ndr.writeUnsignedShort(1); ndr.writeUnsignedLong(0x2000000); } @Override public void read(NetworkDataRepresentation ndr) { ndr.readOctetArray(policyhandle, 0, 20); int hresult = ndr.readUnsignedLong(); if (hresult != 0) { throw new JIRuntimeException(hresult); } } public byte[] policyhandle = new byte[20]; } class openHKCU extends NdrObject { @Override public int getOpnum() { return 1; } @Override public void write(NetworkDataRepresentation ndr) { //it's a pointer //referent ndr.writeUnsignedLong(new Object().hashCode()); //system name ndr.writeUnsignedShort(49736); //length ndr.writeUnsignedShort(1); ndr.writeUnsignedLong(0x2000000); } @Override public void read(NetworkDataRepresentation ndr) { ndr.readOctetArray(policyhandle, 0, 20); int hresult = ndr.readUnsignedLong(); if (hresult != 0) { throw new JIRuntimeException(hresult); } } public byte[] policyhandle = new byte[20]; } class openHKU extends NdrObject { @Override public int getOpnum() { return 4; } @Override public void write(NetworkDataRepresentation ndr) { //it's a pointer //referent ndr.writeUnsignedLong(new Object().hashCode()); //system name ndr.writeUnsignedShort(49736); //length ndr.writeUnsignedShort(1); ndr.writeUnsignedLong(0x2000000); } @Override public void read(NetworkDataRepresentation ndr) { ndr.readOctetArray(policyhandle, 0, 20); int hresult = ndr.readUnsignedLong(); if (hresult != 0) { throw new JIRuntimeException(hresult); } } public byte[] policyhandle = new byte[20]; } class openHKCR extends NdrObject { @Override public int getOpnum() { return 0; } @Override public void write(NetworkDataRepresentation ndr) { //it's a pointer //referent ndr.writeUnsignedLong(new Object().hashCode()); //system name ndr.writeUnsignedShort(49736); //length ndr.writeUnsignedShort(1); ndr.writeUnsignedLong(0x2000000); } @Override public void read(NetworkDataRepresentation ndr) { ndr.readOctetArray(policyhandle, 0, 20); int hresult = ndr.readUnsignedLong(); if (hresult != 0) { throw new JIRuntimeException(hresult); } } public byte[] policyhandle = new byte[20]; } class deleteValueOrKey extends NdrObject { public JIPolicyHandle parentKey = null; public String valueName = null; public boolean isKey = false; @Override public int getOpnum() { if (isKey) { return 7; } else { return 8; } } @Override public void write(NetworkDataRepresentation ndr) { //write parent handle ndr.writeOctetArray(parentKey.handle, 0, 20); //key len , since it is uint16 ndr.writeUnsignedShort((valueName.length() + 1) * 2); //key size, since it is uint16 ndr.writeUnsignedShort((valueName.length() + 1) * 2); //it's a pointer //referent ndr.writeUnsignedLong(new Object().hashCode()); //max count ndr.writeUnsignedLong(valueName.length() + 1); //offset ndr.writeUnsignedLong(0); //actual count ndr.writeUnsignedLong(valueName.length() + 1); int i = 0; while (i < valueName.length()) { ndr.writeUnsignedShort(valueName.charAt(i)); i++; } //null termination ndr.writeUnsignedShort(0); } @Override public void read(NetworkDataRepresentation ndr) { int hresult = ndr.readUnsignedLong(); if (hresult != 0) { throw new JIRuntimeException(hresult); } } } class saveFile extends NdrObject { public JIPolicyHandle parentKey = null; public String fileName = null; @Override public int getOpnum() { return 20; } @Override public void write(NetworkDataRepresentation ndr) { //write parent handle ndr.writeOctetArray(parentKey.handle, 0, 20); //key len , since it is uint16 ndr.writeUnsignedShort((fileName.length() + 1) * 2); //key size, since it is uint16 ndr.writeUnsignedShort((fileName.length() + 1) * 2); //it's a pointer //referent ndr.writeUnsignedLong(new Object().hashCode()); //max count ndr.writeUnsignedLong(fileName.length() + 1); //offset ndr.writeUnsignedLong(0); //actual count ndr.writeUnsignedLong(fileName.length() + 1); int i = 0; while (i < fileName.length()) { ndr.writeUnsignedShort(fileName.charAt(i)); i++; } //null termination ndr.writeUnsignedShort(0); //now align for int double index = new Integer(ndr.getBuffer().getIndex()).doubleValue(); long k = (k = Math.round(index % 4.0)) == 0 ? 0 : 4 - k; ndr.writeOctetArray(new byte[(int) k], 0, (int) k); ndr.writeUnsignedLong(0); } @Override public void read(NetworkDataRepresentation ndr) { int hresult = ndr.readUnsignedLong(); if (hresult != 0) { throw new JIRuntimeException(hresult); } } } class createKey extends NdrObject { public JIPolicyHandle parentKey = null; public String key = null; public int accessMask = -1; public int options = -1; public int actiontaken = -1; @Override public int getOpnum() { return 6; } @Override public void write(NetworkDataRepresentation ndr) { //write parent handle ndr.writeOctetArray(parentKey.handle, 0, 20); //key len , since it is uint16 ndr.writeUnsignedShort((key.length() + 1) * 2); //key size, since it is uint16 ndr.writeUnsignedShort((key.length() + 1) * 2); //it's a pointer //referent ndr.writeUnsignedLong(new Object().hashCode()); //max count ndr.writeUnsignedLong(key.length() + 1); //offset ndr.writeUnsignedLong(0); //actual count ndr.writeUnsignedLong(key.length() + 1); int i = 0; while (i < key.length()) { ndr.writeUnsignedShort(key.charAt(i)); i++; } //null termination ndr.writeUnsignedShort(0); //now align for int double index = new Integer(ndr.getBuffer().getIndex()).doubleValue(); long k = (k = Math.round(index % 4.0)) == 0 ? 0 : 4 - k; ndr.writeOctetArray(new byte[(int) k], 0, (int) k); //write the class String clazz = "REG_SZ"; //clazz len , since it is uint16 ndr.writeUnsignedShort((clazz.length() + 1) * 2); //clazz size, since it is uint16 ndr.writeUnsignedShort((clazz.length() + 1) * 2); //referent ndr.writeUnsignedLong(new Object().hashCode()); //max count ndr.writeUnsignedLong(clazz.length() + 1); //offset ndr.writeUnsignedLong(0); //actual count ndr.writeUnsignedLong(clazz.length() + 1); i = 0; while (i < clazz.length()) { ndr.writeUnsignedShort(clazz.charAt(i)); i++; } //null termination ndr.writeUnsignedShort(0); //now align for int index = new Integer(ndr.getBuffer().getIndex()).doubleValue(); k = 0; k = (k = Math.round(index % 4.0)) == 0 ? 0 : 4 - k; ndr.writeOctetArray(new byte[(int) k], 0, (int) k); //options ndr.writeUnsignedLong(options); ndr.writeUnsignedLong(accessMask); //ptr to sec desc , null ndr.writeUnsignedLong(0); //pointer to action taken ndr.writeUnsignedLong(new Object().hashCode()); ndr.writeUnsignedLong(0); } @Override public void read(NetworkDataRepresentation ndr) { ndr.readOctetArray(policyhandle, 0, 20); //pointer to action taken ndr.readUnsignedLong(); actiontaken = ndr.readUnsignedLong(); int hresult = ndr.readUnsignedLong(); if (hresult != 0) { throw new JIRuntimeException(hresult); } } public byte[] policyhandle = new byte[20]; } class setValue extends NdrObject { public JIPolicyHandle parentKey = null; public String valueName = null; public int clazzType = -1; public int lengthInBytes = -1; public byte[] data = null; //should be in the right encoding for Strings. public byte[][] data2 = null; //reg_ public int dword; @Override public int getOpnum() { return 22; } @Override public void write(NetworkDataRepresentation ndr) { //write parent handle ndr.writeOctetArray(parentKey.handle, 0, 20); //key len , since it is uint16 ndr.writeUnsignedShort((valueName.length() + 1) * 2); //key size, since it is uint16 ndr.writeUnsignedShort((valueName.length() + 1) * 2); //it's a pointer //referent ndr.writeUnsignedLong(new Object().hashCode()); //max count ndr.writeUnsignedLong(valueName.length() + 1); //offset ndr.writeUnsignedLong(0); //actual count ndr.writeUnsignedLong(valueName.length() + 1); int i = 0; while (i < valueName.length()) { ndr.writeUnsignedShort(valueName.charAt(i)); i++; } //null termination ndr.writeUnsignedShort(0); //now align for int double index = new Integer(ndr.getBuffer().getIndex()).doubleValue(); long k = (k = Math.round(index % 4.0)) == 0 ? 0 : 4 - k; ndr.writeOctetArray(new byte[(int) k], 0, (int) k); //write the type. ndr.writeUnsignedLong(clazzType); i = 0; if (lengthInBytes != 0) { switch (clazzType) { case REG_EXPAND_SZ: //for environment variable strings case REG_SZ: //for strings, strings are null terminated, length in bytes will NOT include the null termination //character //writing the max count ndr.writeUnsignedLong((lengthInBytes + 1) * 2); while (i < data.length) { ndr.writeUnsignedShort(data[i]); i++; } //null termination ndr.writeUnsignedShort(0); //now align for int index = new Integer(ndr.getBuffer().getIndex()).doubleValue(); k = 0; k = (k = Math.round(index % 4.0)) == 0 ? 0 : 4 - k; ndr.writeOctetArray(new byte[(int) k], 0, (int) k); ndr.writeUnsignedLong((lengthInBytes + 1) * 2); break; case REG_DWORD: ndr.writeUnsignedLong(lengthInBytes); ndr.writeUnsignedLong(dword); ndr.writeUnsignedLong(lengthInBytes); break; case REG_NONE: data = new byte[0]; lengthInBytes = 0; case REG_BINARY: ndr.writeUnsignedLong(lengthInBytes); ndr.writeOctetArray(data, 0, lengthInBytes); index = new Integer(ndr.getBuffer().getIndex()).doubleValue(); k = 0; k = (k = Math.round(index % 4.0)) == 0 ? 0 : 4 - k; ndr.writeOctetArray(new byte[(int) k], 0, (int) k); ndr.writeUnsignedLong(lengthInBytes); break; case REG_MULTI_SZ: //for strings, strings are null terminated, length in bytes will NOT include the null termination //character //writing the max count , this will be computed before hand ndr.writeUnsignedLong(lengthInBytes); for (i = 0; i < data2.length; i++) { for (int j = 0; j < data2[i].length; j++) { ndr.writeUnsignedShort(data2[i][j]); } //null termination for each string ndr.writeUnsignedShort(0); } //null termination for the multi sz. ndr.writeUnsignedShort(0); //now align for int index = new Integer(ndr.getBuffer().getIndex()).doubleValue(); k = 0; k = (k = Math.round(index % 4.0)) == 0 ? 0 : 4 - k; ndr.writeOctetArray(new byte[(int) k], 0, (int) k); ndr.writeUnsignedLong(lengthInBytes); break; default: throw new JIRuntimeException(JIErrorCodes.JI_WINREG_EXCEPTION4); } } else { //for data ndr.writeUnsignedLong(0); //for length ndr.writeUnsignedLong(0); } } @Override public void read(NetworkDataRepresentation ndr) { int hresult = ndr.readUnsignedLong(); if (hresult != 0) { throw new JIRuntimeException(hresult); } } } class enumKey extends NdrObject { public JIPolicyHandle parentKey = null; public int index = -1; public String[] retval = new String[2]; @Override public int getOpnum() { return 9; } @Override public void write(NetworkDataRepresentation ndr) { //write parent handle ndr.writeOctetArray(parentKey.handle, 0, 20); ndr.writeUnsignedLong(index); //buffer len , since it is uint16 ndr.writeUnsignedShort(0); //buffer size, since it is uint16 ndr.writeUnsignedShort(2048); //it's a pointer //referent ndr.writeUnsignedLong(new Object().hashCode()); //max count ndr.writeUnsignedLong(1024); //offset ndr.writeUnsignedLong(0); //actual count ndr.writeUnsignedLong(0); //pointer ndr.writeUnsignedLong(new Object().hashCode()); //buffer len , since it is uint16 ndr.writeUnsignedShort(0); //buffer size, since it is uint16 ndr.writeUnsignedShort(2048); //it's a pointer //referent ndr.writeUnsignedLong(new Object().hashCode()); //max count ndr.writeUnsignedLong(1024); //offset ndr.writeUnsignedLong(0); //actual count ndr.writeUnsignedLong(0); //pointer for time ndr.writeUnsignedLong(new Object().hashCode()); ndr.writeUnsignedLong(0); ndr.writeUnsignedLong(0); } @Override public void read(NetworkDataRepresentation ndr) { //buffer len , since it is uint16 ndr.readUnsignedShort(); //buffer size, since it is uint16 ndr.readUnsignedShort(); //it's a pointer //referent ndr.readUnsignedLong(); //max count ndr.readUnsignedLong(); //offset ndr.readUnsignedLong(); int actuallength = ndr.readUnsignedLong();//actuallength byte[] bytes = new byte[0]; if (actuallength != 0) { bytes = new byte[actuallength - 1]; } int i = 0; //last 2 bytes , null termination will be eaten outside the loop while (i < actuallength - 1) { int retVal = ndr.readUnsignedShort(); bytes[i] = (byte) retVal; i++; } if (actuallength != 0) { ndr.readUnsignedShort(); } retval[0] = new String(bytes); long l = (l = Math.round(ndr.getBuffer().getIndex() % 4.0)) == 0 ? 0 : 4 - l; ndr.readOctetArray(new byte[(int) l], 0, (int) l); // it's a pointer //referent ndr.readUnsignedLong(); // buffer len , since it is uint16 ndr.readUnsignedShort(); //buffer size, since it is uint16 ndr.readUnsignedShort(); //it's a pointer //referent ndr.readUnsignedLong(); //max count ndr.readUnsignedLong(); //offset ndr.readUnsignedLong(); actuallength = ndr.readUnsignedLong();//actuallength bytes = new byte[0]; if (actuallength != 0) { bytes = new byte[actuallength - 1]; } i = 0; //last 2 bytes , null termination will be eaten outside the loop while (i < actuallength - 1) { int retVal = ndr.readUnsignedShort(); bytes[i] = (byte) retVal; i++; } if (actuallength != 0) { ndr.readUnsignedShort(); } retval[1] = new String(bytes); l = 0; l = (l = Math.round(ndr.getBuffer().getIndex() % 4.0)) == 0 ? 0 : 4 - l; ndr.readOctetArray(new byte[(int) l], 0, (int) l); //now to read the time ndr.readUnsignedLong(); ndr.readUnsignedLong(); ndr.readUnsignedLong(); int hresult = ndr.readUnsignedLong(); if (hresult != 0) { throw new JIRuntimeException(hresult); } } } class enumValue extends NdrObject { public JIPolicyHandle parentKey = null; public int index = -1; public Object[] retval = new Object[2]; @Override public int getOpnum() { return 10; } @Override public void write(NetworkDataRepresentation ndr) { //write parent handle ndr.writeOctetArray(parentKey.handle, 0, 20); ndr.writeUnsignedLong(index); //buffer len , since it is uint16 ndr.writeUnsignedShort(0); //buffer size, since it is uint16 ndr.writeUnsignedShort(2048); //it's a pointer //referent ndr.writeUnsignedLong(new Object().hashCode()); //max count ndr.writeUnsignedLong(1024); //offset ndr.writeUnsignedLong(0); //actual count ndr.writeUnsignedLong(0); //pointer ndr.writeUnsignedLong(new Object().hashCode()); ndr.writeUnsignedLong(0); ndr.writeUnsignedLong(0); ndr.writeUnsignedLong(new Object().hashCode()); ndr.writeUnsignedLong(0); ndr.writeUnsignedLong(new Object().hashCode()); ndr.writeUnsignedLong(0); } @Override public void read(NetworkDataRepresentation ndr) { //buffer len , since it is uint16 ndr.readUnsignedShort(); //buffer size, since it is uint16 ndr.readUnsignedShort(); //it's a pointer //referent ndr.readUnsignedLong(); //max count ndr.readUnsignedLong(); //offset ndr.readUnsignedLong(); int actuallength = ndr.readUnsignedLong();//actuallength byte[] bytes = new byte[0]; if (actuallength != 0) { bytes = new byte[actuallength - 1]; } int i = 0; //last 2 bytes , null termination will be eaten outside the loop while (i < actuallength - 1) { int retVal = ndr.readUnsignedShort(); bytes[i] = (byte) retVal; i++; } if (actuallength != 0) { ndr.readUnsignedShort(); } retval[0] = new String(bytes); long l = (l = Math.round(ndr.getBuffer().getIndex() % 4.0)) == 0 ? 0 : 4 - l; ndr.readOctetArray(new byte[(int) l], 0, (int) l); // it's a pointer //referent ndr.readUnsignedLong(); int type = ndr.readUnsignedLong(); retval[1] = new Integer(type); ndr.readUnsignedLong(); ndr.readUnsignedLong(); ndr.readUnsignedLong(); ndr.readUnsignedLong(); ndr.readUnsignedLong(); int hresult = ndr.readUnsignedLong(); if (hresult != 0) { throw new JIRuntimeException(hresult); } } } class openKey extends NdrObject { public JIPolicyHandle parentKey = null; public String key = null; public int accessMask = KEY_READ; @Override public int getOpnum() { return 15; } @Override public void write(NetworkDataRepresentation ndr) { //write parent handle ndr.writeOctetArray(parentKey.handle, 0, 20); //key len , since it is uint16 ndr.writeUnsignedShort((key.length() + 1) * 2); //key size, since it is uint16 ndr.writeUnsignedShort((key.length() + 1) * 2); //it's a pointer //referent ndr.writeUnsignedLong(new Object().hashCode()); //max count ndr.writeUnsignedLong(key.length() + 1); //offset ndr.writeUnsignedLong(0); //actual count ndr.writeUnsignedLong(key.length() + 1); int i = 0; while (i < key.length()) { ndr.writeUnsignedShort(key.charAt(i)); i++; } //null termination ndr.writeUnsignedShort(0); //now align for int double index = new Integer(ndr.getBuffer().getIndex()).doubleValue(); long k = (k = Math.round(index % 4.0)) == 0 ? 0 : 4 - k; ndr.writeOctetArray(new byte[(int) k], 0, (int) k); //reserved ndr.writeUnsignedLong(0); ndr.writeUnsignedLong(accessMask); } @Override public void read(NetworkDataRepresentation ndr) { ndr.readOctetArray(policyhandle, 0, 20); int hresult = ndr.readUnsignedLong(); if (hresult != 0) { throw new JIRuntimeException(hresult); } } public byte[] policyhandle = new byte[20]; } class queryValue extends NdrObject { public JIPolicyHandle parentKey = null; public String key = ""; public int bufferLength = -1; public int type = -1; public byte[] buffer = null; public byte[][] buffer2 = new byte[2048][]; @Override public int getOpnum() { return 17; } @Override public void write(NetworkDataRepresentation ndr) { //write parent handle ndr.writeOctetArray(parentKey.handle, 0, 20); //key len , since it is uint16 ndr.writeUnsignedShort((key.length() + 1) * 2); //key size, since it is uint16 ndr.writeUnsignedShort((key.length() + 1) * 2); //it's a pointer //referent ndr.writeUnsignedLong(new Object().hashCode()); //max count ndr.writeUnsignedLong(key.length() + 1); //offset ndr.writeUnsignedLong(0); //actual count ndr.writeUnsignedLong(key.length() + 1); int i = 0; while (i < key.length()) { ndr.writeUnsignedShort(key.charAt(i)); i++; } //null termination ndr.writeUnsignedShort(0); //now align for int double index = new Integer(ndr.getBuffer().getIndex()).doubleValue(); long k = (k = Math.round(index % 4.0)) == 0 ? 0 : 4 - k; ndr.writeOctetArray(new byte[(int) k], 0, (int) k); //pointer to type ndr.writeUnsignedLong(new Object().hashCode()); ndr.writeUnsignedLong(0); //pointer to data ndr.writeUnsignedLong(new Object().hashCode()); //max count ndr.writeUnsignedLong(bufferLength); ndr.writeUnsignedLong(0);//offset ndr.writeUnsignedLong(0);//actual //pointer to size ndr.writeUnsignedLong(new Object().hashCode()); ndr.writeUnsignedLong(bufferLength); //pointer to length ndr.writeUnsignedLong(new Object().hashCode()); ndr.writeUnsignedLong(0); } @Override public void read(NetworkDataRepresentation ndr) { int i = 0; //pointer ndr.readUnsignedLong(); type = ndr.readUnsignedLong();//type byte[] retval = new byte[bufferLength]; //StringBuffer buffer = new StringBuffer(); //pointer to data ndr.readUnsignedLong(); int maxcount = ndr.readUnsignedLong(); //maxcount int offset = ndr.readUnsignedLong();//offset switch (type) { case REG_EXPAND_SZ: //for environment variable strings case REG_SZ: int actuallength = (int) Math.round(new Integer(ndr.readUnsignedLong()).doubleValue() / 2.0);//actuallength //last 2 bytes , null termination will be eaten outside the loop while (i < actuallength - 1) { int retVal = ndr.readUnsignedShort(); //even though this is a unicode string , but will not have anything else //other than ascii charset, which is supported by all encodings. //buffer.append(new String(new byte[]{(byte)retVal})); retval[i] = (byte) retVal; i++; } if (actuallength != 0) { ndr.readUnsignedShort(); } break; case REG_DWORD: i = ndr.readUnsignedLong(); int value = ndr.readUnsignedLong(); Encdec.enc_uint32le(value, retval, 0); break; case REG_NONE: case REG_BINARY: i = ndr.readUnsignedLong(); ndr.readOctetArray(retval, 0, i); break; case REG_MULTI_SZ: actuallength = (int) Math.round(new Integer(ndr.readUnsignedLong()).doubleValue() / 2.0);//actuallength int kk = 0, ll = 0; i = 0; //last 2 bytes , null termination will be eaten outside the loop while (i < actuallength - 1) { int retVal = ndr.readUnsignedShort(); if (retVal == 0) { //reached end of one string buffer2[kk] = new byte[ll]; System.arraycopy(retval, 0, buffer2[kk], 0, ll); kk++; ll = -1; //it will become 0 next retval = new byte[bufferLength]; } else { retval[ll] = (byte) retVal; } i++; ll++; } if (actuallength != 0) { ndr.readUnsignedShort(); } break; default: throw new JIRuntimeException(JIErrorCodes.JI_WINREG_EXCEPTION4); } long l = (l = Math.round(ndr.getBuffer().getIndex() % 4.0)) == 0 ? 0 : 4 - l; ndr.readOctetArray(new byte[(int) l], 0, (int) l); //pointer to size ndr.readUnsignedLong(); ndr.readUnsignedLong(); //pointer to length ndr.readUnsignedLong(); ndr.readUnsignedLong(); int hresult = ndr.readUnsignedLong(); if (hresult != 0) { throw new JIRuntimeException(hresult); } if (type != REG_MULTI_SZ) { this.buffer = new byte[i]; System.arraycopy(retval, 0, this.buffer, 0, i); } else { //we have the data already in buffer2. } //key = buffer.toString(); } public byte[] policyhandle = new byte[20]; } /** * Opens the HKEY_CLASSES_ROOT key * * @return handle representing the opened key * @throws JIException */ public JIPolicyHandle winreg_OpenHKCR() throws JIException; /** * Opens the HKEY_CURRENT_USER key * * @return handle representing the opened key * @throws JIException */ public JIPolicyHandle winreg_OpenHKCU() throws JIException; /** * Opens the HKEY_USERS key * * @return handle representing the opened key * @throws JIException */ public JIPolicyHandle winreg_OpenHKU() throws JIException; /** * Opens the HKEY_LOCAL_MACHINE key * * @return handle representing the opened key * @throws JIException */ public JIPolicyHandle winreg_OpenHKLM() throws JIException; /** * Opens the subkey of key specified by handle. * * @param handle * @param key * @param accessMask type of access required. * @return * @throws JIException */ public JIPolicyHandle winreg_OpenKey(JIPolicyHandle handle, String key, int accessMask) throws JIException; /** * Closes the key. * * @param handle * @throws JIException */ public void winreg_CloseKey(JIPolicyHandle handle) throws JIException; /** * Query the key for it's name. Please put buffer size more than the * estimated expected value. In this case 1024 would do. * * @param handle * @param bufferSize * @return * @throws JIException */ public byte[] winreg_QueryValue(JIPolicyHandle handle, int bufferSize) throws JIException; /** * Query the key-value for it's value.Please put buffer size more than the * estimated expected value. * * @param handle * @param bufferSize * @param valueName * @return first param contains the class type as an Integer, second param * contains the value as a 1 dimensional byte array,if any. In case of * REG_MULTI_SZ you will get a 2 dimensional byte array as the second param. * @throws JIException */ public Object[] winreg_QueryValue(JIPolicyHandle handle, String valueName, int bufferSize) throws JIException; /** * Creates a new key by name subKey under the handle. If * REG_OPTION_NON_VOLATILE option is used then the key is preserved in the * registry when the machine shutsdown, otherwise it is stored only in * memory. * * @param handle * @param subKey * @param options * @param accessMask * @return * @throws JIException */ public JIPolicyHandle winreg_CreateKey(JIPolicyHandle handle, String subKey, int options, int accessMask) throws JIException; /** * Sets name-value for a REG_MULTI_SZ type. data is a 2 dimensional array, * each primary dimension representing one string. Please make sure that the * encoding is correct while doing String.getBytes(...). * * @param handle * @param valueName * @param data * @throws JIException */ public void winreg_SetValue(JIPolicyHandle handle, String valueName, byte[][] data) throws JIException; /** * Sets an empty name-value for a REG_NONE type. * * @param handle * @param valueName * @throws JIException */ public void winreg_SetValue(JIPolicyHandle handle, String valueName) throws JIException; /** * Sets name-value for a REG_SZ\REG_EXPAND_SZ\REG_BINARY type. The data will * be considered as String if the binary flag is not set to true. In case of * non binary data, please make sure that the encoding is correct while * doing String.getBytes(...). Set expand_sz to true if the String contains * environment variables. When both binary and expand_sz are set , binary * will take precedence. * * @param handle * @param valueName * @param data * @param binary * @param expand_sz * @throws JIException */ public void winreg_SetValue(JIPolicyHandle handle, String valueName, byte[] data, boolean binary, boolean expand_sz) throws JIException; /** * Sets name-value for a REG_DWORD type. * * @param handle * @param valueName * @param data * @throws JIException */ public void winreg_SetValue(JIPolicyHandle handle, String valueName, int data) throws JIException; /** * Deletes a key or value specified by valueName. * * @param handle * @param valueName * @param isKey * @throws JIException */ public void winreg_DeleteKeyOrValue(JIPolicyHandle handle, String valueName, boolean isKey) throws JIException; /** * Saves registry entries from handle location to local fileName. This path * is local to the target machine. * * @param handle * @param fileName * @throws JIException */ public void winreg_SaveFile(JIPolicyHandle handle, String fileName) throws JIException; /** * Returns name and class (in that order) for the key identified by index * under parent handle. * * @param handle * @param index * @return * @throws JIException */ public String[] winreg_EnumKey(JIPolicyHandle handle, int index) throws JIException; /** * Returns name and type (in that order) for the value identified by index * under parent handle. * * @param handle * @param index * @return First is a String (valueName) and second param is an Integer * (type) * @throws JIException */ public Object[] winreg_EnumValue(JIPolicyHandle handle, int index) throws JIException; /** * Closes this connection, but a word of caution, it does not close any OPEN * Key. Just releases the NP resources it is holding. * * @throws JIException */ public void closeConnection() throws JIException; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy