'j-interop using local credentials

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 org.jinterop.dcom.core.JISession that it takes the IJIAuthInfo, domain credentials, or the credentials from another session.

How do I specify credentials local to that system?

public class ServiceManager {

    private static String domainName = "";
    private static String userName="administrator";
    private static String password="";
    private static String hostIP ="127.0.0.1";
    private static final String win32_namespace = "ROOT\\CIMV2";

    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, "MySql");//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("SELECT * FROM Win32_Service WHERE Name = '" + serviceName + "'"),
                    JIVariant.OPTIONAL_PARAM(),
                    new JIVariant(new Integer(RETURN_IMMEDIATE + FORWARD_ONLY))
            };
            JIVariant[] servicesSet = wbemServices.callMethodA("ExecQuery", params);
            IJIDispatch wbemObjectSet = (IJIDispatch) narrowObject(servicesSet[0].getObjectAsComObject());

            JIVariant newEnumvariant = wbemObjectSet.get("_NewEnum");
            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("GetObjectText_", new Object[] { 1 });
                System.out.println(v[0].getObjectAsString().getString());

                // Start or Stop the service
                String methodToInvoke = (action == START_SERVICE) ? "StartService" : "StopService";
                JIVariant returnStatus = wbemObjectDispatch.callMethodA(methodToInvoke);
                System.out.println("Return status: "+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("WbemScripting.SWbemLocator"),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("ConnectServer", 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;
    }
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source