Server 2008 R2 xenpci.sys BSOD

Based on customer feedback, we have come across an error that can occur when restoring your VM onto the new
platform. After completing steps 11-k in the ‘Migrate_Server2k8r2’ guide you are told to restore the server and you
should get to the login. Sometimes you will be presented with another BSOD instead stating ‘”xenpci.sys, the driver
unloaded without cancelling pending operations’. If you experience this, you will need to remove the xen drivers
manually.
1. Select ‘Launch Startup Repair (recommended)’.
a. Select the radio button ‘use recovery tools….’, and install the Virtio Storage drivers and make a note
of the drive letter assigned to the OS drive. In this case, I’ll refer to it as the ‘F:\’ drive but yours
might be different.
b. Wait for the ‘Startup Repair’ process to fail, or cancel it and click ‘Finish’.
c. From the ‘Choose a recovery tool’ window select ‘Command Prompt’.
d. Now type the following:
i. ‘rmdir /q /s “f:\Program Files (x86)\Xen PV Drivers”
ii. ‘del /q “f:\Windows\System32\drivers\xen*”
iii. ‘del /q f:\Windows\inf\oem1.inf
iv. ‘del /q f:\Windows\inf\oem2.inf
v. ‘del /q f:\Windows\inf\oem3.inf
vi. ‘del /q f:\Windows\inf\oem4.inf
vii. ‘del /q f:\Windows\inf\oem5.inf
viii. ‘del /q f:\Windows\inf\oem*.pnf
e. Now type ‘regedit’, then hit enter.
f. Select ‘HKLM’, go to ‘File\Load Hive
g. For this step, make sure you select the drive you are recovering and not the X: (boot) drive. Go to
C:\Windows\system32\config’ and open the ‘SYSTEM’ file.
h. Type any ‘Key Name’ you want, example ‘temp’.
i. Navigate to ‘HKLM\temp\ControlSet001\services’.
i. Delete Key Names ‘xennet’, ‘xenpci’, ‘xenvdb’.
j. Navigate to ‘HKLM\temp\ControlSet002\services’.
i. Delete Key Names ‘xennet’, ‘xenpci’, ‘xenvdb’.
k. Navigate back to ‘HKLM\temp’.
i. Press ‘Ctrl + f’ to find.
ii. Search for ‘upperfilters’ and keep pressing F3 to find any key with reference to ‘xenpci’ that
have the same class value as below and delete them.
1. ‘HKLM\***\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}
2. ‘HKLM\***\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}
3. ‘HKLM\***\Class\{4D36E97B-E325-11CE-BFC1-08002BE10318}
l. Check these values are still true:
i. intelide ‘3’
ii. msahci ‘0’
iii. pciide ‘0’
iv. LSI_SAS ‘3’
m. Navigate back to the ‘temp’ registry key and select ‘File\Unload Hive’, then press ‘Yes’.
n. Restart the server.
2. When your server has started, Login.

Сегодня мы будем решать проблему, с которой я столкнулся давеча. Итак, у нас есть виртуальная машина Windows Server 2008 R2 на борту с установленными паравиртуальными драйверами. Эта виртаулка крутится работает под XEN’ом. Необходимо ее перести на другой сервер под VirtualBox. Но не все так просто. Первое, что необходимо было сделать — это сконвертировать. Как это сделать, я уже писал в одной из своих заметок:
После того как вы сконвертируйте IMG в VDI формат и подключие к этот диск к новой виртуальной машине под VirtualBox, скорее всего вы получите первый BSOD с кодом 0x0000007B. 0x0000007B указывает, что  во время запуска операционная система Microsoft Windows потеряла доступ к системному разделу. Чтобы пофиксить эту проблему необходимо в настройках виртуальной машины удалить SATA-контроллер и добавить IDE-контроллер:
VirtualBox-IDE
Далее после попытки запустить сервер вы скорее всего получите второй BSOD (0x0000000d4 xenpci.sys), причиной которого будут установленные паравиртуальные драйверы. Давайте удалим их. Запускаем Windows в режиме восстановления и открываем командную строку. Далее по списку выполняем:
После удаления файлов перейдем к правке реестра. Введите команду regedit, выберите раздел HKLM и загрузите куст (File\Load Hive) C:\Windows\system32\config\SYSTEM с именем temp. В разделе HKLM\temp\ControlSet001\services и HKLM\temp\ControlSet002\services удаляем ключи xennetxenpcixenvdb.
Переходим обратно в HKLM\temp, жмем CTRL+F и ищем по фразе upperfilters (F3 для продолжения поиска). Как только в значение появится xenpci необходимо удалить этот раздел. У меня нашлись разделы:
  • HKLM\***\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}
  • HKLM\***\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}
  • HKLM\***\Class\{4D36E97B-E325-11CE-BFC1-08002BE10318}
Теперь вернемся к разделу temp и выгрузим куст (File\Unload Hive). После чего перезагрузим сервер и радуемся рабочему серверу.