vm.go
func (v *VM) WriteVariable(varType GuestVarType, name, value string) error {
	var jobHandle C.VixHandle = C.VIX_INVALID_HANDLE
	var err C.VixError = C.VIX_OK

	vname := C.CString(name)
	vvalue := C.CString(value)
	defer C.free(unsafe.Pointer(vname))
	defer C.free(unsafe.Pointer(vvalue))

	jobHandle = C.VixVM_WriteVariable(v.handle,
		C.int(varType),
		vname,
		vvalue,
		0,
		nil, // callbackProc
		nil) // clientData

	defer C.Vix_ReleaseHandle(jobHandle)

	err = C.vix_job_wait(jobHandle)

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

	return nil
}
func (v *VM) WriteVariable(varType GuestVarType, name, value string) error {
	var jobHandle C.VixHandle = C.VIX_INVALID_HANDLE
	var err C.VixError = C.VIX_OK

	vname := C.CString(name)
	vvalue := C.CString(value)
	defer C.free(unsafe.Pointer(vname))
	defer C.free(unsafe.Pointer(vvalue))

	jobHandle = C.VixVM_WriteVariable(v.handle,
		C.int(varType),
		vname,
		vvalue,
		0,
		nil, // callbackProc
		nil) // clientData

	defer C.Vix_ReleaseHandle(jobHandle)

	err = C.vix_job_wait(jobHandle)

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

	return nil
}
// WriteVariable writes variables to the virtual machine state.
// This includes the virtual machine configuration, environment variables in
// the guest, and VMware "Guest Variables".
//
// Parameters:
//
//   varType: The type of variable to write. The currently supported values are:
//     * VM_GUEST_VARIABLE: A "Guest Variable". This is a runtime-only value;
//       it is never stored persistently. This is the same guest variable that
//       is exposed through the VMControl APIs, and is a simple way to
//       pass runtime values in and out of the guest.
//
//     * VM_CONFIG_RUNTIME_ONLY: The configuration state of the virtual
//       machine. This is the .vmx file that is stored on the host.
//       You can read this and it will return the persistent data. If you write
//       to this, it will only be a runtime change, so changes will be lost
//       when the VM powers off. Not supported on ESX hosts.
//
//     * GUEST_ENVIRONMENT_VARIABLE: An environment variable in the guest of
//       the VM. On a Windows NT series guest, writing these values is saved
//       persistently so they are immediately visible to every process.
//       On a Linux or Windows 9X guest, writing these values is not persistent
//       so they are only visible to the VMware tools process. Requires root
//       or Administrator privilege.
//
//   name: The name of the variable.
//   value: The value to be written.
//
// Remarks:
//
//   * The VM_CONFIG_RUNTIME_ONLY variable type is not supported on ESX hosts.
//
//   * You must call VM.LoginInGuest() before calling this function to write a
//     GUEST_ENVIRONMENT_VARIABLE value.
//     You do not have to call VM.LoginInGuest() to use this function to write a
//     VM_GUEST_VARIABLE or a VM_CONFIG_RUNTIME_ONLY value.
//
//   * Do not use the slash '/' character in a VM_GUEST_VARIABLE variable name;
//     doing so produces a VIX_E_INVALID_ARG error.
//
//   * Do not use the equal '=' character in the value parameter; doing so
//     produces a VIX_E_INVALID_ARG error.
//
//   * On Linux guests, you must login as root to change environment variables
//     (when variable type is GUEST_ENVIRONMENT_VARIABLE)
//     otherwise it produces a VIX_E_GUEST_USER_PERMISSIONS error.
//
//   * On Windows Vista guests, when variable type is GUEST_ENVIRONMENT_VARIABLE,
//     you must turn off User Account Control (UAC) in Control Panel >
//     User Accounts > User Accounts > Turn User Account on or off,
//     in order for this function to work.
//
// Since VMware Workstation 6.0
//