How to Use the vSphere Guest API
The vSphere Guest API defines functions and data types that you use to extract virtual machine data. This section covers the following topics:
vSphere Guest API Runtime Components
To use the vSphere Guest API, the runtime components must be installed in the guest operating system. The runtime components are dynamically loaded binary modules for 32-bit and 64-bit guests. When you install VMware Tools, the vSphere Guest API runtime components are installed as well. You can also download them from http://www.vmware.com/download/sdk/guest_sdk.html.
To make the vSphere Guest API functions available to your program, use your program’s standard methods to load the library.
In a Windows guest operating system, the library file is vmGuestLib.dll. The import library file is vmGuestLib.lib.
Important If you are using a Security-Enhanced Linux (SELinux) guest OS, its security policies might interfere with dynamic loading of libvmGuestLib.so. Refer to documentation about your SELinux policy configuration
The vSphere Guest SDK includes the test program vmGuestlibTest.c. If you are using a Windows environment, you must rebuild the test program. The vmGuestLib.dll library file is a non-Unicode DLL. In Microsoft Visual Studio, build the test program vmGuestlibTest.c as a non-Unicode executable file so that the program can access the DLL at runtime.
Enabling and Disabling the Runtime Components
The vSphere Guest API runtime components are enabled by default (disable = “FALSE”). To disable the runtime components, use the configuration editor in the vSphere Client to edit the configuration file for the virtual machine. The virtual machine must be powered off before you can use the configuration editor.
1
2
3
4
5
Click Configuration Parameters.
6
isolation.tools.guestlibGetInfo.disable = "TRUE"
The default value for the disable setting is FALSE. The default setting enables the runtime components. Reinstalling VMware Tools does not affect the disable setting. If you disable the vSphere Guest API and reinstall VMware Tools, the vSphere Guest API remains unavailable until you change the configuration setting guestLibGetInfo.disable to FALSE.
vSphere Guest API Data Types
The vSphere Guest API uses the data types listed in Data Types to support access to virtual machine data.
Reference to virtual machine data. VMGuestLibHandle is defined in vmGuestLib.h.
Use VMGuestLib_GetSessionId to obtain a valid session ID. A session ID is opaque. You cannot compare a virtual machine session ID with the session IDs from any other virtual machines.You must always call VMGuestLib_GetSessionId after calling VMGuestLib_UpdateInfo.
VMSessionID is defined in vmSessionId.h.
Status code that indicates success or failure. Each function returns a VMGuestLibError code. For information about specific error codes, see vSphere Guest API Error Codes . VMGuestLibError is an enumerated type defined in vmGuestLib.h.
vSphere Guest API Functions
The vSphere Guest SDK contains the header file vmGuestLib.h. This file declares the functions and data types that you use to call the vSphere Guest API. The following sections describe the vSphere Guest API functions:
Context Functions
The vSphere Guest API provides a set of functions that initialize and manipulate the context where the Guest API operates. Before your application can use the accessor functions to retrieve information about a virtual machine, use the following functions to initialize the vSphere Guest API environment.
1
Call the VMGuestLib_OpenHandle function to obtain a handle for accessing information about the virtual machine. The guest library handle is a parameter to every Guest API function.
2
Call the VMGuestLib_UpdateInfo function to update the information available through the handle.
3
Call the VMGuestLib_GetSessionId function to retrieve a session ID.
Example: Initializing the vSphere Guest API Environment shows a C code fragment that illustrates the function calls for initialization. (The code fragments in this section do not perform error handling. For information about error handling, see vSphere Guest API Error Codes .)
Example: Initializing the vSphere Guest API Environment
VMGuestLibHandle glHandle;
VMGuestLibError glError;
VMSessionId sid = 0;
glError = VMGuestLib_OpenHandle(&glHandle);
glError = VMGuestLib_UpdateInfo(glHandle);
glError = VMGuestLib_GetSessionId(glHandle, &sid);
 
You can use the session ID to detect changes that invalidate previously retrieved data. Example: Detecting Stale Data shows a code fragment that illustrates how to use the session ID to detect stale data. (The ResetStats function in the following fragment represents application code to handle the session change.)
Example: Detecting Stale Data
VMGuestLibHandle glHandle;
VMGuestLibError glError;
VMSessionId oldSid;
VMSessionId newSid;
 
/* [...code here would access data based on an existing, valid session ID (oldSid)...] */
 
/* Update the library, get the session ID, and compare it to the previous session ID */
glError = VMGuestLib_UpdateInfo(glHandle);
glError = GuestLib_GetSessionId(glHandle, &newSid);
if (oldSid != newSid) {
ResetStats();
oldSid = newSid;
}
 
Open, Close, and Update Functions lists the context functions for creating and releasing handles, updating information, and obtaining session IDs.
Releases a handle acquired with VMGuestLib_OpenHandle.
VMGuestLib_UpdateInfo requires similar CPU resources to a system call and therefore can affect performance. If you are concerned about performance, minimize the number of calls to VMGuestLib_UpdateInfo.
Retrieves the VMSessionID for the current session. Call this function after calling VMGuestLib_UpdateInfo. If VMGuestLib_UpdateInfo has never been called, VMGuestLib_GetSessionId returns VMGUESTLIB_ERROR_NO_INFO.
Accessor Functions (Virtual Machine)
Accessor functions retrieve information about a virtual machine. When you call an accessor function, you pass a guest library handle (type VMGuestLibHandle) to the function. If the function is successful, it returns the requested data as an output parameter. The function return value is an error code (type VMGuestLibError) that indicates success or failure. Example: Using an Accessor Function shows a C code fragment that illustrates an example of calling VMGuestLib_GetCpuLimitMHz to retrieve the processor limit available to the virtual machine.
Example: Using an Accessor Function
uint32 cpuLimitMHz = 0;
glError = VMGuestLib_GetCpuLimitMHz(glHandle, &cpuLimitMHz);
 
When a call completes successfully, the function returns the value VMGUESTLIB_ERROR_SUCCESS. If the call is unsuccessful, the error code name contains an appropriate description. For details, see vSphere Guest API Error Codes .
Call VMGuestLib_UpdateInfo once to refresh all statistics before calling an accessor function or a series of accessor functions.
handle is an input parameter specifying the guest library handle.
bufferSize is an input/output parameter. It is a pointer to the size of the pathBuffer in bytes. If bufferSize is not large enough to accommodate the path (including a NULL terminator), the function returns VMGUESTLIB_ERROR_BUFFER_TOO_SMALL. In this case, the function uses the bufferSize parameter to return the number of bytes required for the string.
pathBuffer is an output parameter. It is a pointer to a buffer that receives the resource pool path string. The path string is NULL-terminated.
For more information about ESXi resource management, see the vSphere Resource Management Guide, available on the VMware Web site.
Limits and Reservations
You use the Guest API to retrieve information about limits and reservations for CPU and memory. To set limits and reservations, you can use the vSphere (Web) Client or the vSphere API. Setting limits and reservations on a virtual machine ensures that resources are available to that machine and to other virtual machines that draw resources from the same resource pool.
To use the vSphere Client to set limits or reservations:
1
2
3
4
5
For more information, see online help for the vSphere Client.
To use the vSphere API to set limits or reservations, call the ReconfigVM_Task method. In the method call, use the VirtualMachineConfigSpec data object to set the cpuAllocation or memoryAllocation property. These properties are of type ResourceAllocationInfo, which has limit and reservation properties. For more information, see the VMware vSphere API Reference Documentation.
vSphere Guest API Error Codes
Each vSphere Guest API function returns an error code. If successful, the returned error code is VMGUESTLIB_ERROR_SUCCESS. If the function is unable to complete its task, the error code provides information for diagnosing the problem.
Use the VMGuestLib_GetErrorText function to retrieve the error text associated with a particular error code. When you call the function, pass the error code to the function; VMGuestLib_GetErrorText returns a pointer to a string containing the error text.
Example: Error Handling shows error handling. The C code fragment declares a guest library handle and calls the function VMGuestLib_OpenHandle. If the call is not successful, the code calls VMGuestLib_GetErrorText and displays the error text.
Example: Error Handling
VMGuestLibHandle glHandle;
glError = VMGuestLib_OpenHandle(&glHandle);
if (glError != VMGUESTLIB_ERROR_SUCCESS) {
printf("OpenHandle failed: %s\n", VMGuestLib_GetErrorText(glError));
}
 
Error Codes lists all error codes defined for the vSphere Guest API.
The handle data structure does not contain any information. You must call VMGuestLib_UpdateInfo to update the data structure.
The buffer is too small to accommodate the function call. For example, when you call VMGuestLib_GetResourcePoolPath, if the path buffer is too small for the resulting resource pool path, the function returns this error. To resolve this error, allocate a larger buffer.