// MkTemp creates a temporary file in the guest operating system. // The user is responsible for removing the file when it is no longer needed. // // Since VMware Workstation 6.0 // Minimum Supported Guest OS: Microsoft Windows NT Series, Linux func (g *Guest) MkTemp() (string, error) { var jobHandle C.VixHandle = C.VIX_INVALID_HANDLE var err C.VixError = C.VIX_OK var tempFilePath *C.char jobHandle = C.VixVM_CreateTempFileInGuest(g.handle, 0, // options C.VIX_INVALID_HANDLE, // propertyListHandle nil, // callbackProc nil) // clientData defer C.Vix_ReleaseHandle(jobHandle) err = C.get_temp_filepath(jobHandle, tempFilePath) defer C.Vix_FreeBuffer(unsafe.Pointer(tempFilePath)) if C.VIX_OK != err { return "", &Error{ Operation: "guest.MkTemp", Code: int(err & 0xFFFF), Text: C.GoString(C.Vix_GetErrorText(err, nil)), } } return C.GoString(tempFilePath), nil }
// Ls lists a directory in the guest operating system. // // Parameters: // // dir: The path name of a directory to be listed. // // Remarks: // // * Only absolute paths should be used for files in the guest; the resolution // of relative paths is not specified. // // Since VMware Workstation 6.0 // Minimum Supported Guest OS: Microsoft Windows NT Series, Linux func (g *Guest) Ls(dir string) ([]*GuestFile, error) { var jobHandle C.VixHandle = C.VIX_INVALID_HANDLE var err C.VixError = C.VIX_OK var files []*GuestFile guestdir := C.CString(dir) defer C.free(unsafe.Pointer(guestdir)) jobHandle = C.VixVM_ListDirectoryInGuest(g.handle, guestdir, 0, nil, nil) defer C.Vix_ReleaseHandle(jobHandle) err = C.vix_job_wait(jobHandle) if C.VIX_OK != err { return nil, &Error{ Operation: "guest.Ls.ListDirectoryInGuest", Code: int(err & 0xFFFF), Text: C.GoString(C.Vix_GetErrorText(err, nil)), } } num := C.VixJob_GetNumProperties(jobHandle, C.VIX_PROPERTY_JOB_RESULT_ITEM_NAME) for i := 0; i < int(num); i++ { var name *C.char var size *C.int64 var modtime *C.int64 var attrs *C.int gfile := &GuestFile{} err = C.get_guest_file(jobHandle, C.int(i), name, size, modtime, attrs) if C.VIX_OK != err { return nil, &Error{ Operation: "guest.Ls.get_guest_file", Code: int(err & 0xFFFF), Text: C.GoString(C.Vix_GetErrorText(err, nil)), } } gfile.Path = C.GoString(name) C.Vix_FreeBuffer(unsafe.Pointer(name)) gfile.Size = int64(*size) gfile.Modtime = int64(*modtime) gfile.Attrs = FileAttr(*attrs) files = append(files, gfile) } return files, nil }
// SharedFoldersParentDir returns the parent dir for share folders in the Guest. func (g *Guest) SharedFoldersParentDir() (string, error) { var err C.VixError = C.VIX_OK var path *C.char err = C.get_property(g.handle, C.VIX_PROPERTY_GUEST_SHAREDFOLDERS_SHARES_PATH, unsafe.Pointer(&path)) defer C.Vix_FreeBuffer(unsafe.Pointer(path)) if C.VIX_OK != err { return "", &Error{ Operation: "guest.SharedFoldersParentDir", Code: int(err & 0xFFFF), Text: C.GoString(C.Vix_GetErrorText(err, nil)), } } return C.GoString(path), nil }
// Description returns user defined description for the snapshot. func (s *Snapshot) Description() (string, error) { var err C.VixError = C.VIX_OK var desc *C.char err = C.get_property(s.handle, C.VIX_PROPERTY_SNAPSHOT_DESCRIPTION, unsafe.Pointer(&desc)) defer C.Vix_FreeBuffer(unsafe.Pointer(desc)) if C.VIX_OK != err { return "", &Error{ Operation: "snapshot.Description", Code: int(err & 0xFFFF), Text: C.GoString(C.Vix_GetErrorText(err, nil)), } } return C.GoString(desc), nil }
// Name returns user defined name for the snapshot. func (s *Snapshot) Name() (string, error) { var err C.VixError = C.VIX_OK var name *C.char err = C.get_property(s.handle, C.VIX_PROPERTY_SNAPSHOT_DISPLAYNAME, unsafe.Pointer(&name)) defer C.Vix_FreeBuffer(unsafe.Pointer(name)) if C.VIX_OK != err { return "", &Error{ Operation: "snapshot.Name", Code: int(err & 0xFFFF), Text: C.GoString(C.Vix_GetErrorText(err, nil)), } } return C.GoString(name), nil }
// Ps lists the running processes in the guest operating system. // // Since Workstation 6.0 // Minimum Supported Guest OS: Microsoft Windows NT Series, Linux func (g *Guest) Ps() ([]*GuestProcess, error) { var jobHandle C.VixHandle = C.VIX_INVALID_HANDLE var err C.VixError = C.VIX_OK var processes []*GuestProcess jobHandle = C.VixVM_ListProcessesInGuest(g.handle, 0, nil, nil) defer C.Vix_ReleaseHandle(jobHandle) err = C.vix_job_wait(jobHandle) if C.VIX_OK != err { return nil, &Error{ Operation: "guest.Ps", Code: int(err & 0xFFFF), Text: C.GoString(C.Vix_GetErrorText(err, nil)), } } num := C.VixJob_GetNumProperties(jobHandle, C.VIX_PROPERTY_JOB_RESULT_ITEM_NAME) for i := 0; i < int(num); i++ { var name *C.char var pid *C.uint64 var owner *C.char var cmdline *C.char var isDebugged *C.Bool var startTime *C.int gprocess := &GuestProcess{} err = C.get_guest_process(jobHandle, C.int(i), name, pid, owner, cmdline, isDebugged, startTime) if C.VIX_OK != err { return nil, &Error{ Operation: "guest.Ps.get_guest_process", Code: int(err & 0xFFFF), Text: C.GoString(C.Vix_GetErrorText(err, nil)), } } gprocess.Name = C.GoString(name) C.Vix_FreeBuffer(unsafe.Pointer(name)) gprocess.Pid = uint64(*pid) gprocess.Owner = C.GoString(owner) C.Vix_FreeBuffer(unsafe.Pointer(owner)) gprocess.Cmdline = C.GoString(cmdline) C.Vix_FreeBuffer(unsafe.Pointer(cmdline)) if *isDebugged == 1 { gprocess.IsDebugged = true } else { gprocess.IsDebugged = false } gprocess.StartTime = int(*startTime) processes = append(processes, gprocess) } return processes, nil }