public long getFreeMemorySpace() throws JIException { System.gc(); JIVariant results[] = service_dispatch.callMethodA( "ExecQuery", new Object[] { new JIString("select * from Win32_PerfRawData_PerfOS_Memory"), JIVariant.OPTIONAL_PARAM(), JIVariant.OPTIONAL_PARAM(), JIVariant.OPTIONAL_PARAM() }); IJIDispatch wbemObjectSet_dispatch = (IJIDispatch) JIObjectFactory.narrowObject((results[0]).getObjectAsComObject()); JIVariant variant = wbemObjectSet_dispatch.get("_NewEnum"); IJIComObject object2 = variant.getObjectAsComObject(); IJIEnumVariant enumVARIANT = (IJIEnumVariant) JIObjectFactory.narrowObject(object2.queryInterface(IJIEnumVariant.IID)); if (wbemObjectSet_dispatch.get("Count").getObjectAsInt() != 1) return -1; // there should be 1 hint JIArray array = (JIArray) enumVARIANT.next(1)[0]; JIVariant item = ((JIVariant[]) array.getArrayInstance())[0]; IJIDispatch wbemObject_dispatch = (IJIDispatch) JIObjectFactory.narrowObject(item.getObjectAsComObject()); return Long.parseLong( wbemObject_dispatch.get("AvailableKBytes").getObjectAsString().getString()); }
public LinkedList<IJIDispatch> getDiskDrives() throws JIException { System.gc(); // get all local disks JIVariant results[] = service_dispatch.callMethodA( "ExecQuery", new Object[] { new JIString("select * from Win32_LogicalDisk where DriveType = 3"), JIVariant.OPTIONAL_PARAM(), JIVariant.OPTIONAL_PARAM(), JIVariant.OPTIONAL_PARAM() }); IJIDispatch wbemObjectSet_dispatch = (IJIDispatch) JIObjectFactory.narrowObject((results[0]).getObjectAsComObject()); JIVariant variant = wbemObjectSet_dispatch.get("_NewEnum"); IJIComObject object2 = variant.getObjectAsComObject(); IJIEnumVariant enumVARIANT = (IJIEnumVariant) JIObjectFactory.narrowObject(object2.queryInterface(IJIEnumVariant.IID)); LinkedList<IJIDispatch> drives = new LinkedList<IJIDispatch>(); int count = wbemObjectSet_dispatch.get("Count").getObjectAsInt(); for (int i = 0; i < count; i++) { Object[] values = enumVARIANT.next(1); JIArray array = (JIArray) values[0]; JIVariant[] variants = (JIVariant[]) array.getArrayInstance(); for (JIVariant item : variants) { drives.add((IJIDispatch) JIObjectFactory.narrowObject(item.getObjectAsComObject())); } } return drives; }
/** * Removes resources to an existing virtual computer system * * @param vmDispatch A reference to the computer system instance to which the resource is to be * added. * @param resourceAllocationDispatch the resource allocation setting data reference to be removed. * @throws JIException */ public void removeVirtualSystemResources( final IJIDispatch vmDispatch, final IJIDispatch resourceAllocationDispatch) throws JIException { // Getting the dispatcher of the VM Path IJIDispatch vmPathDispatcher = (IJIDispatch) JIObjectFactory.narrowObject( vmDispatch.get("Path_").getObjectAsComObject().queryInterface(IJIDispatch.IID)); // Getting the virtual machine path String vmPath = vmPathDispatcher.get("Path").getObjectAsString2(); // Getting the dispatcher of the resource path IJIDispatch resourcePathDispatcher = (IJIDispatch) JIObjectFactory.narrowObject( resourceAllocationDispatch .get("Path_") .getObjectAsComObject() .queryInterface(IJIDispatch.IID)); // Getting the virtual machine path String resourcePath = resourcePathDispatcher.get("Path").getObjectAsString2(); JIVariant[] tmp = dispatch.callMethodA( "RemoveVirtualSystemResources", new Object[] { new JIString(vmPath), new JIArray(new JIString[] {new JIString(resourcePath)}), JIVariant.EMPTY_BYREF(), JIVariant.EMPTY_BYREF() }); int result = tmp[0].getObjectAsInt(); String name = resourceAllocationDispatch.get("ElementName").getObjectAsString2(); if (result == 0) { logger.debug(name + " removed from " + vmPath); } else { if (result == 4096) { logger.debug("Removing resources..."); String jobPath = tmp[2].getObjectAsVariant().getObjectAsString2(); HyperVUtils.monitorJob(jobPath, service.getObjectDispatcher()); } else { logger.error(name + " deleting to " + vmPath + " failed with error code " + result); throw new IllegalStateException( "Cannot remove resource " + name + " to " + vmDispatch.get("ElementName").getObjectAsString2()); } } }
public WindowsHealth( String address, String domain, String user, String passwd, int timeout, boolean verbose) throws JIException, UnknownHostException { if (verbose) System.out.print("Creating session... "); session = JISession.createSession(domain, user, passwd); session.useSessionSecurity(true); session.setGlobalSocketTimeout(timeout); if (verbose) { System.out.println("OK"); System.out.print("Connecting to COMServer... "); } JIProgId progid = JIProgId.valueOf("WbemScripting.SWbemLocator"); comStub = new JIComServer(progid, address, session); IJIComObject unknown = comStub.createInstance(); comObject = (IJIComObject) unknown.queryInterface("76A6415B-CB41-11d1-8B02-00600806D9B6"); // ISWbemLocator if (verbose) { System.out.println("OK"); System.out.print("Connecting to targethost... "); } dispatch = (IJIDispatch) JIObjectFactory.narrowObject(comObject.queryInterface(IJIDispatch.IID)); service = dispatch .callMethodA( "ConnectServer", new Object[] { new JIString(address), JIVariant.OPTIONAL_PARAM(), JIVariant.OPTIONAL_PARAM(), JIVariant.OPTIONAL_PARAM(), JIVariant.OPTIONAL_PARAM(), JIVariant.OPTIONAL_PARAM(), new Integer(0), JIVariant.OPTIONAL_PARAM() })[0]; service_dispatch = (IJIDispatch) JIObjectFactory.narrowObject(service.getObjectAsComObject()); if (verbose) System.out.println("OK"); percentprocessortime = -1; timestamp = -1; }
/** * Destroys a virtual system in hyper-v * * @param vmDispatch TODO * @return the error code of */ public int destroyVirtualSystem(final IJIDispatch vmDispatch) throws Exception { JIVariant tmp = vmDispatch.get("Path_"); IJIDispatch dispatchTemp = (IJIDispatch) JIObjectFactory.narrowObject( tmp.getObjectAsComObject().queryInterface(IJIDispatch.IID)); String virtualSystemPath = dispatchTemp.get("Path").getObjectAsString2(); JIVariant[] results = dispatch.callMethodA( "DestroyVirtualSystem", new Object[] { new JIString(virtualSystemPath), JIVariant.EMPTY_BYREF(), JIVariant.EMPTY_BYREF() }); int error = results[0].getObjectAsInt(); if (results.length > 1) { if (error != 0) { if (error == 4096) { logger.debug("Destroying virtual system..."); String jobPath = results[2].getObjectAsVariant().getObjectAsString2(); HyperVUtils.monitorJob(jobPath, service.getObjectDispatcher()); } else { String message = "The virtual system could no te destroyed " + virtualSystemPath; logger.error(message); throw new JIException(error, message); } } } return error; }
/* FIXME: This code sometimes fails with an "org.jinterop.dcom.common.JIException: An internal error occurred. [0x8001FFFF]" * on Windows 2008 */ public int getCPUUsage() throws JIException { System.gc(); JIVariant results[] = service_dispatch.callMethodA( "Get", new Object[] { new JIString("Win32_PerfRawData_PerfOS_Processor.Name='_Total'"), new Integer(0), JIVariant.OPTIONAL_PARAM() }); IJIDispatch wbemObject_dispatch = (IJIDispatch) JIObjectFactory.narrowObject((results[0]).getObjectAsComObject()); long ppt = Long.parseLong( wbemObject_dispatch.get("PercentProcessorTime").getObjectAsString().getString()); long tss = Long.parseLong( wbemObject_dispatch.get("TimeStamp_Sys100NS").getObjectAsString().getString()); if (this.percentprocessortime == -1 && this.timestamp == -1) { this.percentprocessortime = ppt; this.timestamp = tss; return -1; } double load = (1 - ((double) (this.percentprocessortime - ppt) / (double) (this.timestamp - tss))) * 100; this.percentprocessortime = ppt; this.timestamp = tss; return (int) Math.round(load); }
public static WshScriptExec create(final JIVariant... variants) throws JIException { WshScriptExec exec = null; if ((variants != null) && (variants.length > 0)) { final IJIComObject comObject = variants[0].getObjectAsComObject(); final IJIDispatch dispatch = (IJIDispatch) JIObjectFactory.narrowObject(comObject); exec = new WshScriptExec(dispatch); } return exec; }
/** * Initializes a new instance of the SWbemSetIterator class. * * @param objectDispatcher The underlying dispatch object used to communicate with the server. * @param service The service connection. * @throws JIException When an error occurs. */ public SWbemSetIterator(final IJIDispatch objectDispatcher, final SWbemServices service) throws JIException { super(objectDispatcher, service); JIVariant jiCount = super.objectDispatcher.get("Count"); this.count = jiCount.getObjectAsInt(); JIVariant variant = super.objectDispatcher.get("_NewEnum"); IJIComObject co = variant.getObjectAsComObject(); co = co.queryInterface(IJIEnumVariant.IID); this.enumerator = (IJIEnumVariant) JIObjectFactory.narrowObject(co); }
public LinkedList<IJIDispatch> getServices() throws JIException { System.gc(); // get all services which should start automatically but are not running JIVariant results[] = service_dispatch.callMethodA( "ExecQuery", new Object[] { new JIString( "select * from Win32_Service where StartMode = 'Auto' and Started = FALSE"), JIVariant.OPTIONAL_PARAM(), JIVariant.OPTIONAL_PARAM(), JIVariant.OPTIONAL_PARAM() }); IJIDispatch wbemObjectSet_dispatch = (IJIDispatch) JIObjectFactory.narrowObject((results[0]).getObjectAsComObject()); JIVariant variant = wbemObjectSet_dispatch.get("_NewEnum"); IJIComObject object2 = variant.getObjectAsComObject(); IJIEnumVariant enumVARIANT = (IJIEnumVariant) JIObjectFactory.narrowObject(object2.queryInterface(IJIEnumVariant.IID)); LinkedList<IJIDispatch> services = new LinkedList<IJIDispatch>(); int count = wbemObjectSet_dispatch.get("Count").getObjectAsInt(); for (int i = 0; i < count; i++) { Object[] values = enumVARIANT.next(1); JIArray array = (JIArray) values[0]; JIVariant[] variants = (JIVariant[]) array.getArrayInstance(); for (JIVariant item : variants) { IJIDispatch wbemObject_dispatch = (IJIDispatch) JIObjectFactory.narrowObject(item.getObjectAsComObject()); services.add(wbemObject_dispatch); } } return services; }
/** * Modifies the settings for an existing virtual computer system. * * @param vmDispatch A reference to the virtual computer system to be modified. * @param systemSettingData describes the modified setting values for the virtual computer system. * @throws JIException */ public void modifyVirtualSystem(final IJIDispatch vmDispatch, final IJIDispatch systemSettingData) throws JIException { // Getting the dispatcher of the VM Path IJIDispatch vmPathDispatcher = (IJIDispatch) JIObjectFactory.narrowObject( vmDispatch.get("Path_").getObjectAsComObject().queryInterface(IJIDispatch.IID)); // Getting the virtual machine path String vmPath = vmPathDispatcher.get("Path").getObjectAsString2(); // Getting the dispatcher of the resource path String resourceText = systemSettingData.callMethodA("GetText_", new Object[] {new Integer(1)})[0] .getObjectAsString2(); JIVariant[] tmp = dispatch.callMethodA( "ModifyVirtualSystem", new Object[] { new JIString(vmPath), new JIArray(new JIString[] {new JIString(resourceText)}), JIVariant.EMPTY_BYREF(), JIVariant.EMPTY_BYREF() }); int result = tmp[0].getObjectAsInt(); String name = systemSettingData.get("ElementName").getObjectAsString2(); if (result == 0) { logger.debug("Setting data properly modified" + vmPath); } else { if (result == 4096) { logger.debug("Modifying setting data..."); String jobPath = tmp[1].getObjectAsVariant().getObjectAsString2(); HyperVUtils.monitorJob(jobPath, service.getObjectDispatcher()); } else { logger.error(name + " addition to " + vmPath + " failed with error code " + result); throw new IllegalStateException( "Setting data cannot be modified to" + vmDispatch.get("ElementName").getObjectAsString2()); } } }
public T next() { try { if (hasNext()) { count--; Object[] values = this.enumerator.next(1); JIArray array = (JIArray) values[0]; Object[] arrayObj = (Object[]) array.getArrayInstance(); IJIComObject co = ((JIVariant) arrayObj[0]).getObjectAsComObject(); IJIDispatch dispatch = (IJIDispatch) JIObjectFactory.narrowObject(co); // Create a new SWbemSetItem from the result. final Constructor<T> ctor = clazz.getConstructor(IJIDispatch.class, SWbemServices.class); final T item = ctor.newInstance(dispatch, this.service); return item; } else { throw new NoSuchElementException(); } } catch (Exception ex) { return null; } }
/** * Gets an item of the set. * * @param itemName The name of the item to get. * @return The item with the specified name. * @throws Exception When an error occurs. */ public T getItem(final String itemName) throws Exception { try { // Invoke the Item method. Object[] inParams = new Object[] {new JIString(itemName), new Integer(0)}; final JIVariant[] results = super.objectDispatcher.callMethodA("Item", inParams); final IJIComObject prop = results[0].getObjectAsComObject(); final IJIDispatch dispatch = (IJIDispatch) JIObjectFactory.narrowObject(prop); // Create a new SWbemSetItem from the result. final Constructor<T> ctor = this.clazz.getConstructor(IJIDispatch.class, SWbemServices.class); final T item = ctor.newInstance(dispatch, this.service); // Return the SWbemSetItem. return item; } catch (JIException e) { if (e.getErrorCode() == 0x80020009) { return null; } else { throw e; } } }
/** * Destroys a virtual system in hyper-v * * @param vmDispatch A reference to the virtual computer system instance to be destroyed. */ public void destroyVirtualSystem2(final IJIDispatch vmDispatch) throws Exception { if (this.destroyVirtualSystem == null) { for (final SWbemMethod m : super.getMethods()) { if (m.getName().equals("DestroyVirtualSystem")) { this.destroyVirtualSystem = m; } } } JIVariant tmp = vmDispatch.get("Path_"); IJIDispatch dispatchTemp = (IJIDispatch) JIObjectFactory.narrowObject( tmp.getObjectAsComObject().queryInterface(IJIDispatch.IID)); String virtualSystemPath = dispatchTemp.get("Path").getObjectAsString2(); SWbemObject inParams = this.destroyVirtualSystem.getInParameters(); inParams .getObjectDispatcher() .put("ComputerSystem", new JIVariant(new JIString(virtualSystemPath))); Object[] methodParams = new Object[] { new JIString("DestroyVirtualSystem"), new JIVariant(inParams.getObjectDispatcher()), new Integer(0), JIVariant.NULL(), }; // Execute the method. super.objectDispatcher.callMethodA("ExecMethod_", methodParams); // JIVariant[] tmp = // dispatch.callMethodA("DefineVirtualSystem", new Object[] { // new JIString(globalSettingDataText), JIVariant.OPTIONAL_PARAM(), // JIVariant.OPTIONAL_PARAM(),}); // int defRes = tmp[0].getObjectAsInt(); }
/** * Add resources to an existing virtual computer system * * @param vmDispatch A reference to the computer system instance to which the resource is to be * added. * @param newResourceAllocationDispatch the new resource allocation setting data reference to be * added. * @return the resource allocation setting data path of the added resource * @deprecated * @throws JIException */ @Deprecated public String addVirtualSystemResources2( final IJIDispatch vmDispatch, final IJIDispatch newResourceAllocationDispatch) throws JIException { if (this.addVirtualSystemResources == null) { for (final SWbemMethod m : super.getMethods()) { if (m.getName().equals("AddVirtualSystemResources")) { this.addVirtualSystemResources = m; } } } // Getting the dispatcher of the VM Path IJIDispatch vmPathDispatcher = (IJIDispatch) JIObjectFactory.narrowObject( vmDispatch.get("Path_").getObjectAsComObject().queryInterface(IJIDispatch.IID)); // Getting the virtual machine path String vmPath = vmPathDispatcher.get("Path").getObjectAsString2(); // Getting the dispatcher of the resource path String resourceText = newResourceAllocationDispatch.callMethodA("GetText_", new Object[] {new Integer(1)})[0] .getObjectAsString2(); SWbemObject inParams = this.addVirtualSystemResources.getInParameters(); inParams.getObjectDispatcher().put("TargetSystem", new JIVariant(new JIString(vmPath))); inParams .getObjectDispatcher() .put( "ResourceSettingData", new JIVariant(new JIArray(new JIString[] {new JIString(resourceText)}))); Object[] methodParams = new Object[] { new JIString("AddVirtualSystemResources"), new JIVariant(inParams.getObjectDispatcher()), new Integer(0), JIVariant.NULL(), }; // Execute the method. JIVariant[] results = super.objectDispatcher.callMethodA("ExecMethod_", methodParams); // Get the out parameters. JIVariant outParamsVar = results[0]; IJIComObject co = outParamsVar.getObjectAsComObject(); IJIDispatch outParamsDisp = (IJIDispatch) JIObjectFactory.narrowObject(co); // Get the out parameter virtualSystemResources and convert it into an // array of JIVariants. JIVariant newResourcesVars = outParamsDisp.get("NewResources"); JIArray newResourcesVarsJIArr = newResourcesVars.getObjectAsArray(); JIVariant[] newResourcesVarsJIVarArr = (JIVariant[]) newResourcesVarsJIArr.getArrayInstance(); String newResourceCoString = newResourcesVarsJIVarArr[0].getObjectAsString2(); return newResourceCoString; }
/** * Add resources to an existing virtual computer system * * @param vmDispatch A reference to the computer system instance to which the resource is to be * added. * @param newResourceAllocationDispatch the new resource allocation setting data reference to be * added. * @return the resource allocation setting data path of the added resource * @throws JIException */ public String addVirtualSystemResources( final IJIDispatch vmDispatch, final IJIDispatch newResourceAllocationDispatch) throws JIException { // Getting the dispatcher of the VM Path IJIDispatch vmPathDispatcher = (IJIDispatch) JIObjectFactory.narrowObject( vmDispatch.get("Path_").getObjectAsComObject().queryInterface(IJIDispatch.IID)); // Getting the virtual machine path String vmPath = vmPathDispatcher.get("Path").getObjectAsString2(); // Getting the dispatcher of the resource path String resourceText = newResourceAllocationDispatch.callMethodA("GetText_", new Object[] {new Integer(1)})[0] .getObjectAsString2(); JIVariant[] tmp = dispatch.callMethodA( "AddVirtualSystemResources", new Object[] { new JIString(vmPath), new JIArray(new JIString[] {new JIString(resourceText)}), JIVariant.EMPTY_BYREF(), JIVariant.EMPTY_BYREF() }); int result = tmp[0].getObjectAsInt(); JIVariant resultVariant = tmp[2]; JIVariant variant2 = resultVariant.getObjectAsVariant(); JIArray newResourcesArr = variant2.getObjectAsArray(); if (newResourcesArr == null) { throw new JIException(32768, "The resource could not be added"); } JIVariant[] newResourcesVarArr = (JIVariant[]) newResourcesArr.getArrayInstance(); String newResourcePath = newResourcesVarArr[0].getObjectAsString2(); String name = newResourceAllocationDispatch.get("ElementName").getObjectAsString2(); if (result == 0) { logger.debug(name + " added to " + vmPath); } else { if (result == 4096) { logger.debug("Addind resources..."); String jobPath = tmp[1].getObjectAsVariant().getObjectAsString2(); HyperVUtils.monitorJob(jobPath, service.getObjectDispatcher()); } else { logger.error(name + " addition to " + vmPath + " failed with error code " + result); throw new IllegalStateException( "Cannot add resource " + name + " to " + vmDispatch.get("ElementName").getObjectAsString2()); } } return newResourcePath; }
public final InputTextStream getStderr() throws JIException { final JIVariant variant = dispatch.get("StdErr"); // i18n lib final IJIComObject comObject = variant.getObjectAsComObject(); return new InputTextStream((IJIDispatch) JIObjectFactory.narrowObject(comObject)); }