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

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

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

	defer C.Vix_ReleaseHandle(jobHandle)

	err = C.read_variable(jobHandle, &readValue)
	if C.VIX_OK != err {
		return "", &Error{
			Operation: "vm.ReadVariable",
			Code:      int(err & 0xFFFF),
			Text:      C.GoString(C.Vix_GetErrorText(err, nil)),
		}
	}
	defer C.Vix_FreeBuffer(unsafe.Pointer(readValue))

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

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

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

	defer C.Vix_ReleaseHandle(jobHandle)

	err = C.read_variable(jobHandle, &readValue)
	if C.VIX_OK != err {
		return "", &Error{
			Operation: "vm.ReadVariable",
			Code:      int(err & 0xFFFF),
			Text:      C.GoString(C.Vix_GetErrorText(err, nil)),
		}
	}
	defer C.Vix_FreeBuffer(unsafe.Pointer(readValue))

	return C.GoString(readValue), nil
}
// ReadVariable reads variables from 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 read. 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.
//
//     * 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.
//
//   name: The name of the variable.
//
// Remarks:
//
//   * You must call VM.LoginInGuest() before calling this function to read a
//     GUEST_ENVIRONMENT_VARIABLE value.
//
//   * You do not have to call VM.LoginInGuest() to use this function to read a
//     VM_GUEST_VARIABLE or a VVM_CONFIG_RUNTIME_ONLY value.
//
// Since Workstation 6.0
//