PRL_HANDLE hJobBeginEdit; PRL_HANDLE hJobCommit; PRL_RESULT nJobRetCode; // Timestamp the beginning of the configuration changes operation. hJobBeginEdit = PrlVm_BeginEdit(hVm); ret = PrlJob_Wait(hJobBeginEdit, 10000); PrlJob_GetRetCode(hJobBeginEdit, &nJobRetCode); if (PRL_FAILED(nJobRetCode)) { fprintf(stderr, "Error: %s\n", PRL_RESULT_TO_STRING(nJobRetCode)); PrlHandle_Free(hJobBeginEdit); return nJobRetCode; } // Modify boot options. // Set boot device list as follows: // 0. CD/DVD drive. // 1. Hard disk. // 2. Network adapter. // 3. Floppy disk drive. // PRL_UINT32 nDevCount; // Device count. PRL_HANDLE hDevice; // A handle to the device. PRL_DEVICE_TYPE devType; // Device type. // Get the total number of devices. ret = PrlVm_GetBootDevCount(hVm, &nDevCount); // Iterate through the device list. // Get a handle for each available device. // Set an index for a device in the boot list. for (int i = 0; i < nDevCount; ++i) { ret = PrlVm_GetBootDev(hVm, i, &hDevice); ret = PrlBootDev_GetType(hDevice, &devType); if (devType == PDE_OPTICAL_DISK) { PrlBootDev_SetSequenceIndex(hDevice, 0); } if (devType == PDE_HARD_DISK) { PrlBootDev_SetSequenceIndex(hDevice, 1); } else if (devType == PDE_GENERIC_NETWORK_ADAPTER) { PrlBootDev_SetSequenceIndex(hDevice, 2); } else if (devType == PDE_FLOPPY_DISK) { PrlBootDev_SetSequenceIndex(hDevice, 3); } else { PrlBootDev_Remove(hDevice); } } // Commit the changes. hJobCommit = PrlVm_Commit(hVm); // Check the results of the commit operation. ret = PrlJob_Wait(hJobCommit, 10000); PrlJob_GetRetCode(hJobCommit, &nJobRetCode); if (PRL_FAILED(nJobRetCode)) { fprintf(stderr, "Commit error: %s\n", PRL_RESULT_TO_STRING(nJobRetCode)); PrlHandle_Free(hJobCommit); return nJobRetCode; }