title: j-interop using local credentials
body: <p>I'm attempting to utilize this WMI sample from the J-interop package.  The issue I'm facing is that the system I'm running this against is not a part of the domain.  I looked at the Javadoc for j-interop and it says in <code>org.jinterop.dcom.core.JISession</code> that it takes the IJIAuthInfo, domain credentials, or the credentials from another session.</p>
  <p>How do I specify credentials local to that system?</p>
  <pre><code>public class ServiceManager {
  
      private static String domainName = &quot;&quot;;
      private static String userName=&quot;administrator&quot;;
      private static String password=&quot;&quot;;
      private static String hostIP =&quot;127.0.0.1&quot;;
      private static final String win32_namespace = &quot;ROOT\\CIMV2&quot;;
  
      private static final int STOP_SERVICE = 0;
      private static final int START_SERVICE = 1;
  
      private JISession dcomSession = null;
      /**
       *
       * @param args
       */
      public static void main(String[] args) {
          ServiceManager manager = new ServiceManager();
          manager.stopService(domainName, hostIP, userName, password, &quot;MySql&quot;);//stops a service named MySql
      }
      /**
       * Starts a given service if its stopped.
       *
       * @param domainName
       * @param hostname
       * @param username
       * @param password
       * @param serviceName
       */
      public void startService(String domainName, String hostname, String username, String password, String serviceName) {
          execute(domainName, hostname, username, password, serviceName, START_SERVICE);
      }
      /**
       * Stops a given service if its running.
       *
       * @param domainName
       * @param hostname
       * @param username
       * @param password
       * @param serviceName
       */
      public void stopService(String domainName, String hostname, String username, String password, String serviceName) {
          execute(domainName, hostname, username, password, serviceName, STOP_SERVICE);
      }
      /**
       * Starts/Stops a given service of remote machine as hostname. 
       *
       * @param domainName
       * @param hostname
       * @param username
       * @param password
       * @param serviceName
       * @param action
       */
      public void execute(String domainName, String hostname, String username, String password, String serviceName, int action) {
  
          try {
              IJIDispatch wbemServices = createCOMServer();
  
              final int RETURN_IMMEDIATE = 0x10;
              final int FORWARD_ONLY = 0x20;
              Object[] params = new Object[] {
                      new JIString(&quot;SELECT * FROM Win32_Service WHERE Name = '&quot; + serviceName + &quot;'&quot;),
                      JIVariant.OPTIONAL_PARAM(),
                      new JIVariant(new Integer(RETURN_IMMEDIATE + FORWARD_ONLY))
              };
              JIVariant[] servicesSet = wbemServices.callMethodA(&quot;ExecQuery&quot;, params);
              IJIDispatch wbemObjectSet = (IJIDispatch) narrowObject(servicesSet[0].getObjectAsComObject());
  
              JIVariant newEnumvariant = wbemObjectSet.get(&quot;_NewEnum&quot;);
              IJIComObject enumComObject = newEnumvariant.getObjectAsComObject();
              IJIEnumVariant enumVariant = (IJIEnumVariant) narrowObject(enumComObject.queryInterface(IJIEnumVariant.IID));
  
              Object[] elements = enumVariant.next(1);
              JIArray aJIArray = (JIArray) elements[0];
  
              JIVariant[] array = (JIVariant[]) aJIArray.getArrayInstance();
              for (JIVariant variant : array) {
                  IJIDispatch wbemObjectDispatch = (IJIDispatch) narrowObject(variant.getObjectAsComObject());
  
                  // Print object as text.
                  JIVariant[] v = wbemObjectDispatch.callMethodA(&quot;GetObjectText_&quot;, new Object[] { 1 });
                  System.out.println(v[0].getObjectAsString().getString());
  
                  // Start or Stop the service
                  String methodToInvoke = (action == START_SERVICE) ? &quot;StartService&quot; : &quot;StopService&quot;;
                  JIVariant returnStatus = wbemObjectDispatch.callMethodA(methodToInvoke);
                  System.out.println(&quot;Return status: &quot;+returnStatus.getObjectAsInt()); //if return code = 0 success.See msdn for more details about the method.
              }
          } catch (Exception e) {
              e.printStackTrace();
          } finally {
              if (dcomSession != null) {
                  try {
                      JISession.destroySession(dcomSession);
                  } catch (Exception ex) {
                      ex.printStackTrace();
                  }
              }
          }
      }
      /**
       * Initialize DCOM session and connect to SWBEM service on given host machine.
       * @return
       */
      private IJIDispatch createCOMServer() { 
          JIComServer comServer;
          try {           
              JISystem.getLogger().setLevel(Level.WARNING);
              JISystem.setAutoRegisteration(true);
              dcomSession  = JISession.createSession(domainName,userName,password);
              dcomSession.useSessionSecurity(false);
              comServer = new JIComServer(valueOf(&quot;WbemScripting.SWbemLocator&quot;),hostIP,dcomSession);
  
              IJIDispatch wbemLocator = (IJIDispatch) narrowObject(comServer.createInstance().queryInterface(IID));
              //parameters to connect to WbemScripting.SWbemLocator
              Object[] params = new Object[] {
                      new JIString(hostIP),//strServer
                      new JIString(win32_namespace),//strNamespace
                      JIVariant.OPTIONAL_PARAM(),//strUser 
                      JIVariant.OPTIONAL_PARAM(),//strPassword 
                      JIVariant.OPTIONAL_PARAM(),//strLocale 
                      JIVariant.OPTIONAL_PARAM(),//strAuthority
                      new Integer(0),//iSecurityFlags 
                      JIVariant.OPTIONAL_PARAM()//objwbemNamedValueSet
              };
              JIVariant results[] = wbemLocator.callMethodA(&quot;ConnectServer&quot;, params);
              IJIDispatch wbemServices = (IJIDispatch) narrowObject(results[0].getObjectAsComObject());
              return wbemServices;
          } catch (JIException jie) {
              System.out.println(jie.getMessage());
              jie.printStackTrace();
          } catch (JIRuntimeException jire) {
              jire.printStackTrace();
          } catch (Exception e) {
              e.printStackTrace();
          } finally {
              if (dcomSession!=null) {
                  try {
                      JISession.destroySession(dcomSession);
                  } catch (JIException e) {
                      e.printStackTrace();
                  }
              }
          }
          return null;
      }
  }
  </code></pre>