Name
VixVM_LoginInGuest
Description
VixHandle
VixVM_LoginInGuest(VixHandle vmHandle,
char *userName,
char *password,
int options,
VixEventProc *callbackProc,
void *clientData);
This function establishes a guest operating system authentication context
that can be used with guest functions for the given virtual machine handle.
Parameters
- vmHandle
-
Identifies a virtual machine. Call VixVM_Open() to create a virtual machine handle.
- userName
-
The name of a user account on the guest operating system.
- password
-
The password of the account identified by userName.
- options
-
Must be 0 or VIX_LOGIN_IN_GUEST_REQUIRE_INTERACTIVE_ENVIRONMENT.
- callbackProc
-
A callback function that will be invoked when the
operation is complete.
- clientData
-
A parameter that will be passed to the callbackProc function.
Return Value
VixHandle. A job handle that describes the state of this asynchronous operation.
Remarks
- This function validates the account name and password in the guest OS. You must
call this function before calling functions to perform operations on the guest OS,
such as those below. Otherwise you do not need to call this function.
- This function does not load system environment variables.
- The option
VIX_LOGIN_IN_GUEST_REQUIRE_INTERACTIVE_ENVIRONMENT
should be used to be sure the function
VixVM_OpenUrlInGuest
works correctly.
- The following functions require that you call VixVM_LoginInGuest():
- VixVM_RunProgramInGuest()
- VixVM_ListProcessesInGuest()
- VixVM_KillProcessInGuest()
- VixVM_RunScriptInGuest()
- VixVM_OpenUrlInGuest()
- VixVM_CopyFileFromHostToGuest()
- VixVM_CopyFileFromGuestToHost()
- VixVM_DeleteFileInGuest()
- VixVM_FileExistsInGuest()
- VixVM_RenameFileInGuest()
- VixVM_CreateTempFileInGuest()
- VixVM_ListDirectoryInGuest()
- VixVM_CreateDirectoryInGuest()
- VixVM_DeleteDirectoryInGuest()
- VixVM_DirectoryExistsInGuest()
- VixVM_WriteVariable() when writing a VIX_GUEST_ENVIRONMENT_VARIABLE value.
- VixVM_CaptureScreenImage()
- All guest operations for a particular VM handle are done using the identity
you provide to VixVM_LoginInGuest(). As a result, guest operations are restricted
by file system privileges in the guest OS that apply to the user specified
in VixVM_LoginInGuest(). For example, VixVM_DeleteDirectoryInGuest() might fail
if the user named in VixVM_LoginInGuest() does not have access permissions
to the directory in the guest OS.
- VixVM_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.
- You must call VixVM_LoginInGuest() for each VM handle that uses guest operations.
- 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 VixVM_WaitForToolsInGuest()
to wait for the tools to run.
- Once VixVM_LoginInGuest() has succeeded, the user session remains valid until
- VixVM_LogoutFromGuest() is called successfully,
- VixVM_LoginInGuest() is called successfully with different user credentials,
- the virtual machine handle's reference count reaches 0, or
- the client applications exits.
- To log in as a Windows Domain user, you should specify the 'userName' parameter
in the form "domain\username".
- The special login type VIX_CONSOLE_USER_NAME is no longer supported.
- This function does not respect access permissions on guest operating systems
Windows 95, Windows 98, and Windows ME, due to limitations of the
permissions model in those operating systems.
Side Effects
None.
Requirements
vix.h, since VMware Server 1.0
Example
This example copies a compiled object file from a virtual machine to be
run on the host.
VixError err = VIX_OK;
VixHandle hostHandle = VIX_INVALID_HANDLE;
VixHandle jobHandle = VIX_INVALID_HANDLE;
VixHandle vmHandle = VIX_INVALID_HANDLE;
int isLoggedIn = 0;
jobHandle = VixHost_Connect(VIX_API_VERSION,
VIX_SERVICEPROVIDER_VMWARE_WORKSTATION,
NULL, // hostName
0, // hostPort
NULL, // userName
NULL, // password
0, // options
VIX_INVALID_HANDLE, // propertyListHandle
NULL, // callbackProc
NULL); // clientData
err = VixJob_Wait(jobHandle,
VIX_PROPERTY_JOB_RESULT_HANDLE,
&hostHandle,
VIX_PROPERTY_NONE);
if (VIX_OK != err) {
// Handle the error...
goto abort;
}
Vix_ReleaseHandle(jobHandle);
jobHandle = VixVM_Open(hostHandle,
"c:\\Virtual Machines\\vm1\\win2000.vmx",
NULL, // callbackProc
NULL); // clientData
err = VixJob_Wait(jobHandle,
VIX_PROPERTY_JOB_RESULT_HANDLE,
&vmHandle,
VIX_PROPERTY_NONE);
if (VIX_OK != err) {
// Handle the error...
goto abort;
}
Vix_ReleaseHandle(jobHandle);
// Power on the virtual machine before copying file.
jobHandle = VixVM_PowerOn(vmHandle,
0, // powerOnOptions
VIX_INVALID_HANDLE, // propertyListHandle
NULL, // callbackProc
NULL); // clientData
err = VixJob_Wait(jobHandle,VIX_PROPERTY_NONE);
if (VIX_OK != err) {
// Handle the error...
goto abort;
}
Vix_ReleaseHandle(jobHandle);
// Wait until guest is completely booted.
jobHandle = VixVM_WaitForToolsInGuest(vmHandle,
300, // timeoutInSeconds
NULL, // callbackProc
NULL); // clientData
err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
if (VIX_OK != err) {
// Handle the error...
goto abort;
}
Vix_ReleaseHandle(jobHandle);
// Authenticate for guest operations.
jobHandle = VixVM_LoginInGuest(vmHandle,
"vixuser", // userName
"secret", // password
0, // options
NULL, // callbackProc
NULL); // clientData
err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
if (VIX_OK != err) {
// Handle the error...
goto abort;
}
isLoggedIn = 1;
Vix_ReleaseHandle(jobHandle);
// Copy the file.
jobHandle = VixVM_CopyFileFromGuestToHost(vmHandle,
"c:\\guestDir\\helloworld.o", // src name
"c:\\hostDir\\helloworld.o", // dest name
0, // options
VIX_INVALID_HANDLE, // propertyListHan
NULL, // callbackProc
NULL); // clientData
err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
if (VIX_OK != err) {
// Handle the error...
goto abort;
}
abort:
if (isLoggedIn) {
Vix_ReleaseHandle(jobHandle);
// Clear the authentication
jobHandle = VixVM_LogoutFromGuest(vmHandle,
NULL, // callbackProc
NULL); // clientData
err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
if (VIX_OK != err) {
// Handle the error, but do not go to abort.
}
}
Vix_ReleaseHandle(jobHandle);
Vix_ReleaseHandle(vmHandle);
VixHost_Disconnect(hostHandle);