1 package org.jinterop.dcom.test; 2 3 4 5 import java.net.UnknownHostException ; 6 7 import org.jinterop.dcom.common.JIException; 8 import org.jinterop.dcom.common.JISystem; 9 import org.jinterop.dcom.core.IJIComObject; 10 import org.jinterop.dcom.core.JIArray; 11 import org.jinterop.dcom.core.JICallObject; 12 import org.jinterop.dcom.core.JIComServer; 13 import org.jinterop.dcom.core.JIFlags; 14 import org.jinterop.dcom.core.JIInterfacePointer; 15 import org.jinterop.dcom.core.JIProgId; 16 import org.jinterop.dcom.core.JISession; 17 import org.jinterop.dcom.core.JIString; 18 import org.jinterop.dcom.core.JIVariant; 19 import org.jinterop.dcom.win32.ComFactory; 20 import org.jinterop.dcom.win32.IJIDispatch; 21 import org.jinterop.dcom.win32.IJIEnumVARIANT; 22 23 24 public class MSWMI { 25 26 private JIComServer comStub = null; 27 private IJIComObject comObject = null; 28 private IJIDispatch dispatch = null; 29 private String address = null; 30 private JISession session = null; 31 public MSWMI(String address, String [] args) throws JIException, UnknownHostException 32 { 33 this.address = address; 34 session = JISession.createSession(args[1],args[2],args[3]); 35 comStub = new JIComServer(JIProgId.valueOf(session,"WbemScripting.SWbemLocator"),address,session); 36 IJIComObject unknown = comStub.createInstance(); 37 comObject = (IJIComObject)unknown.queryInterface("76A6415B-CB41-11d1-8B02-00600806D9B6"); dispatch = (IJIDispatch)ComFactory.createCOMInstance(ComFactory.IID_IDispatch,comObject); 40 } 41 42 43 public void performOp() throws JIException, InterruptedException 44 { 45 System.gc(); 46 Object results[] = dispatch.callMethodA("ConnectServer",new Object []{new JIString(address),JIVariant.OPTIONAL_PARAM,JIVariant.OPTIONAL_PARAM,JIVariant.OPTIONAL_PARAM 47 ,JIVariant.OPTIONAL_PARAM,JIVariant.OPTIONAL_PARAM,new Integer (0),JIVariant.OPTIONAL_PARAM}); 48 49 52 JICallObject callObject = new JICallObject(comObject.getIpid()); 55 callObject.addInParamAsString(address,JIFlags.FLAG_REPRESENTATION_STRING_BSTR); 56 callObject.addInParamAsString("",JIFlags.FLAG_REPRESENTATION_STRING_BSTR); 57 callObject.addInParamAsString("",JIFlags.FLAG_REPRESENTATION_STRING_BSTR); 58 callObject.addInParamAsString("",JIFlags.FLAG_REPRESENTATION_STRING_BSTR); 59 callObject.addInParamAsString("",JIFlags.FLAG_REPRESENTATION_STRING_BSTR); 60 callObject.addInParamAsString("",JIFlags.FLAG_REPRESENTATION_STRING_BSTR); 61 callObject.addInParamAsInt(0,JIFlags.FLAG_NULL); 62 callObject.addInParamAsPointer(null,JIFlags.FLAG_NULL); 63 callObject.setOpnum(0); 64 callObject.addOutParamAsType(JIInterfacePointer.class,JIFlags.FLAG_NULL); 65 JIInterfacePointer interfacePointer = (JIInterfacePointer)((Object [])comObject.call(callObject))[0]; 66 IJIComObject wbemServices = ComFactory.createCOMInstance(comObject,interfacePointer); 67 68 IJIDispatch wbemServices_dispatch = (IJIDispatch)ComFactory.createCOMInstance(comObject,((JIVariant)results[0]).getObjectAsInterfacePointer()); 70 results = wbemServices_dispatch.callMethodA("InstancesOf", new Object []{new JIString("Win32_Process"), new Integer (0), JIVariant.OPTIONAL_PARAM}); 71 IJIDispatch wbemObjectSet_dispatch = (IJIDispatch)ComFactory.createCOMInstance(comObject,((JIVariant)results[0]).getObjectAsInterfacePointer()); 72 JIVariant variant = wbemObjectSet_dispatch.get("_NewEnum"); 73 IJIComObject object2 = ComFactory.createCOMInstance(wbemObjectSet_dispatch,variant.getObjectAsInterfacePointer()); 74 IJIEnumVARIANT enumVARIANT = (IJIEnumVARIANT)ComFactory.createCOMInstance(IJIEnumVARIANT.IID,object2); 75 76 78 callObject = new JICallObject(wbemServices.getIpid()); 81 callObject.addInParamAsString("Win32_Process",JIFlags.FLAG_REPRESENTATION_STRING_BSTR); 82 callObject.addInParamAsInt(0,JIFlags.FLAG_NULL); 83 callObject.addInParamAsPointer(null,JIFlags.FLAG_NULL); 84 callObject.setOpnum(4); 85 callObject.addOutParamAsType(JIInterfacePointer.class,JIFlags.FLAG_NULL); 86 interfacePointer = (JIInterfacePointer)((Object [])wbemServices.call(callObject))[0]; 87 IJIComObject wbemObjectSet = ComFactory.createCOMInstance(wbemServices,interfacePointer); 88 89 JIVariant Count = wbemObjectSet_dispatch.get("Count"); 91 int count = Count.getObjectAsInt(); 92 for (int i = 0; i < count; i++) 93 { 94 Object [] values = enumVARIANT.next(1); 95 JIArray array = (JIArray)values[0]; 96 Object [] arrayObj = (Object [])array.getArrayInstance(); 97 for (int j = 0; j < arrayObj.length; j++) 98 { 99 IJIDispatch wbemObject_dispatch = (IJIDispatch)ComFactory.createCOMInstance(wbemObjectSet_dispatch,((JIVariant)arrayObj[j]).getObjectAsInterfacePointer()); 100 JIVariant variant2 = (JIVariant)(wbemObject_dispatch.callMethodA("GetObjectText_",new Object []{new Integer (1)}))[0]; 101 System.out.println(variant2.getObjectAsString().getString()); 102 System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); 103 } 104 } 105 106 JISession.destroySession(session); 107 } 108 109 public static void main(String [] args) { 110 111 try { 112 if (args.length < 4) 113 { 114 System.out.println("Please provide address domain username password"); 115 return; 116 } 117 JISystem.setAutoRegisteration(true); 118 MSWMI test = new MSWMI(args[0],args); 119 test.performOp(); 120 } catch (Exception e) { 121 e.printStackTrace(); 123 } 124 } 125 126 127 128 129 130 } 131 | Popular Tags |