vm.go
func (v *VM) LoginInGuest(username, password string, options GuestLoginOption) (*Guest, error) {
	var jobHandle C.VixHandle = C.VIX_INVALID_HANDLE
	var err C.VixError = C.VIX_OK

	u := C.CString(username)
	p := C.CString(password)
	defer C.free(unsafe.Pointer(u))
	defer C.free(unsafe.Pointer(p))

	jobHandle = C.VixVM_LoginInGuest(v.handle,
		u,              // username
		p,              // password
		C.int(options), // options
		nil,            // callbackProc
		nil)            // clientData

	defer C.Vix_ReleaseHandle(jobHandle)

	err = C.vix_job_wait(jobHandle)
	if C.VIX_OK != err {
		return nil, &Error{
			Operation: "vm.LoginInGuest",
			Code:      int(err & 0xFFFF),
			Text:      C.GoString(C.Vix_GetErrorText(err, nil)),
		}
	}

	guest := &Guest{
		handle: v.handle,
	}
	return guest, nil
}
func (v *VM) LoginInGuest(username, password string, options GuestLoginOption) (*Guest, error) {
	var jobHandle C.VixHandle = C.VIX_INVALID_HANDLE
	var err C.VixError = C.VIX_OK

	u := C.CString(username)
	p := C.CString(password)
	defer C.free(unsafe.Pointer(u))
	defer C.free(unsafe.Pointer(p))

	jobHandle = C.VixVM_LoginInGuest(v.handle,
		u,              // username
		p,              // password
		C.int(options), // options
		nil,            // callbackProc
		nil)            // clientData

	defer C.Vix_ReleaseHandle(jobHandle)

	err = C.vix_job_wait(jobHandle)
	if C.VIX_OK != err {
		return nil, &Error{
			Operation: "vm.LoginInGuest",
			Code:      int(err & 0xFFFF),
			Text:      C.GoString(C.Vix_GetErrorText(err, nil)),
		}
	}

	guest := &Guest{
		handle: v.handle,
	}
	return guest, nil
}
// LoginInGuest establishes a guest operating system authentication context
// returning an instance of the Guest object.
//
// Parameters:
//
//   username: The name of a user account on the guest operating system.
//
//   password: The password of the account identified by username
//
//   options: Must be LOGIN_IN_GUEST_NONE or
//   LOGIN_IN_GUEST_REQUIRE_INTERACTIVE_ENVIRONMENT - directs guest
//   commands invoked after the call to VM.LoginInGuest() to be run from within
//   the session of the user who is interactively logged into the guest operating
//   system.
//
//   See the remarks below for more information about LOGIN_IN_GUEST_REQUIRE_INTERACTIVE_ENVIRONMENT.
//
// Remarks:
//
//   * This function validates the account name and password in the guest OS.
//
//   * You must call this function before calling functions that perform operations
//     on the guest OS, such as those below. Otherwise you do not need to call this
//     function.
//
//   * Logins are supported on Linux and Windows. To log in as a Windows Domain
//     user, specify the 'username' parameter in the form "domain\username".
//
//   * This function does not respect access permissions on Windows 95, Windows 98,
//     and Windows ME, due to limitations of the permissions model in those systems.
//
//   * Other guest operating systems are not supported for login, including Solaris,
//     FreeBSD, and Netware.
//
//   * The option LOGIN_IN_GUEST_REQUIRE_INTERACTIVE_ENVIRONMENT should be used to
//     ensure that the functions Guest.CaptureScreenImage(), and
//     Guest.RunProgramInGuest() work correctly.
//
//   * All guest operations for a particular VM are done using the identity you
//     provide to VM.LoginInGuest(). As a result, guest operations are restricted
//     by file system privileges in the guest OS that apply to the user specified
//     in VM.LoginInGuest(). For example, Guest.RmDir() might fail if the user
//     named in VM.LoginInGuest() does not have access permissions to the directory
//     in the guest OS.
//
//   * VM.LoginInGuest() changes the behavior of Vix functions to use a user account.
//     It does not log a user into a console session on the guest OS. As a result,
//     you might not see the user logged in from within the guest OS. Moreover,
//     operations such as rebooting the guest do not clear the guest credentials.
//
//   * The virtual machine must be powered on before calling this function.
//
//   * VMware Tools must be installed and running on the guest OS before calling
//     this function.
//
//   * You can call VM.WaitForToolsInGuest() to wait for the tools to run.
//
//   * Once VM.LoginInGuest() has succeeded, the user session remains valid until
//     Guest.Logout() is called successfully, VM.LoginInGuest() is called
//     successfully with different user credentials, the virtual machine handle's
//     reference count reaches 0, or the client applications exits.
//
//   * The special login type VIX_CONSOLE_USER_NAME is no longer supported.
//
//   * Calling VM.LoginInGuest() with LOGIN_IN_GUEST_NONE as 'options' can be done
//     at any time when the VMware Tools are running in the guest.
//
//   * Calling VM.LoginInGuest() with the LOGIN_IN_GUEST_REQUIRE_INTERACTIVE_ENVIRONMENT
//     flag can only be done when there is an interactive user logged into the guest OS.
//     Specifically, the "interactive user" refers to the user who has logged into
//     the guest OS through the console (for instance, the user who logged into the Windows
//     log-in screen).
//
//   * The VIX user is the user whose credentials are being provided in the call to
//     VM.LoginInGuest().
//
//   * With LOGIN_IN_GUEST_REQUIRE_INTERACTIVE_ENVIRONMENT, there must be an
//     interactive user logged into the guest when the call to VM.LoginInGuest()
//     is made, and the VIX user must match the interactive user (they must have
//     same account in the guest OS).
//
//   * Using LOGIN_IN_GUEST_REQUIRE_INTERACTIVE_ENVIRONMENT will ensure that the
//     environment in which guest commands are executed is as close as possible to
//     the normal environment in which a user interacts with the guest OS. Without
//     LOGIN_IN_GUEST_REQUIRE_INTERACTIVE_ENVIRONMENT, commands may be run in a more
//     limited environment; however, omitting
//     LOGIN_IN_GUEST_REQUIRE_INTERACTIVE_ENVIRONMENT will ensure that commands can
//     be run regardless of whether an interactive user is present in the guest.
//
//   * On Linux guest operating systems, the
//     LOGIN_IN_GUEST_REQUIRE_INTERACTIVE_ENVIRONMENT flag requires that X11 be
//     installed and running.
//
// Since VMware Server 1.0
// Minimum Supported Guest OS: Microsoft Windows NT Series, Linux
//