Есть ли чистый способ получить эксклюзивный доступ к физическому разделу под Windows?

11

В Windows 7 я пытаюсь запустить виртуальную машину с VMWare Player из операционной системы, установленной в физическом разделе. Однако, когда я загружаю виртуальную машину, VMWare Player говорит, что не может получить доступ к физическому диску для записи.

Похоже, что это общепризнанная проблема в сообществе VMWare, поскольку в Windows Vista появилась новая привлекательная функция безопасности, которая делает невозможным запись на сырой диск без предварительного эксклюзивного доступа к нему.

Я погуглил проблему и нашел несколько обходных путей. Однако чистые , похоже, работают только на целых физических дисках, а не на разделах.

Так что я остался бы с грязным решением . Короче говоря, он вмешивается в MBR, чтобы стереть любые следы используемых разделов, заставляет Windows забыть о них, а затем восстанавливает MBR, чтобы мы могли запустить виртуальную машину.

Я не уверен, что хочу это сделать. Есть ли способ позволить VMWare получить эксклюзивный доступ к разделу, не требуя от меня его уничтожения? Полагаю, я бы искал способ перевести в автономный режим только разделы вместо целых физических дисков.


Больше информации, связанной с щедростью.

У меня двойная загрузка: Mac OS - моя основная операционная система, и у меня также установлена ​​Windows. Я могу запускать Windows на виртуальной машине, если не хочу перезагружаться, но я бы хотел иметь возможность запускать Mac OS на виртуальной машине, когда я нахожусь под Windows.

Моя цель - запустить мой основной раздел Mac OS из VMWare под Windows, так же, как я запускаю Windows из VMWare Fusion. (Поскольку это моя основная ОС, я не планирую исправлять ядро ​​или что-то еще, чтобы оно работало на виртуальной машине.) Я создал виртуальную машину из VMWare Fusion (так как она имеет тип виртуальной машины «Mac OS X Server») ) затем переместил его в Windows и изменил его из VMWare Player. Кажется, почти работает, когда ОС попадает на экран загрузки, а затем виртуальная машина умирает, потому что она не может получить доступ \\.\PhysicalDrive0.

Virtual Box дает сбой еще сильнее, так как он запускает Mac OS в подробном режиме и очень быстро падает (но, похоже, может получить доступ к разделу), поэтому я думаю, что было бы проще получить доступ к моему разделу VMWare, чем запускать Virtual Box Это.

С юридической точки зрения, я бы запустил одну копию Mac OS X на одном компьютере с Apple, так что я в порядке.

zneak
источник
Интересная проблема. Работает ли это, если вы создаете пустой, неформатированный раздел?
nhinkle
@nhinkle У меня нет свободной комнаты для разделов, которую я могу проверить на своем внутреннем диске. Однако из того, что я прочитал, похоже, что Windows заблокирует любой раздел, который может распознать; и я могу подтвердить, что он все еще заблокирует те, у которых также нет точки монтирования.
zneak
@zneak: в прошлом я использовал TrueCrypt для обхода ограничений Windows. Поскольку он имеет собственный драйвер диска, он может записывать данные на диск. Почему бы вам не попробовать превратить раздел в виртуальный диск TrueCrypt?
harrymc
@harrymc Я не пробовал. Нужно ли шифровать раздел Mac OS?
zneak
Вам нужно будет создать раздел TrueCrypt в разделе (потерять весь контент). Это может помочь показать, как, но см. Также справку TrueCrypt.
harrymc

Ответы:

5

Я встречал только одно возможное решение, используя бесплатный драйвер виртуального диска imdisk вместе с devio (удаленный доступ к накопителю и получение данных). Поскольку imdisk является драйвером ядра, он может выполнять запись в раздел. К сожалению, поскольку devio работает в пользовательском режиме, я не слишком уверен, будет ли этот подход работать для вас.

devio может получить физический раздел и опубликовать его в сети. Например:

devio -r 9000 \\.\PhysicalDrive0 2

публикует с первого диска второй раздел по TCP-порту 9000 и будет ожидать подключения к этому порту. Лучше отключите брандмауэр во время тестирования и запустите devio от имени администратора.

Чтобы определить этот опубликованный раздел как новый и автономный жесткий диск, используйте:

imdisk -a -t proxy -o ip -f 127.0.0.1 -m R:

который с помощью localhost создаст новый жесткий диск с именем R, который не является разделом чего-либо. Теперь вы можете попытаться использовать настоящий виртуальный жесткий диск R в виртуальной машине VMware.

Этот подход подробно объясняется в Devio: Удаленный доступ к накопителю и его приобретение .

Если это не сработает, вам придется:

  1. Примите опасное решение, которое изменяет MBR.
  2. Откажитесь от использования MacOS в Win7 в качестве виртуальной машины, используя файлы в разделе Mac через приложения Windows (с проблемами символов конца строки).
  3. Используйте продукт Виртуальной файловой системы, такой как ELDOS Callback File System , хотя я сомневаюсь, что эта проблема стоит для вас несколько тысяч долларов.
  4. Отказаться от Windows 7 и перейти на XP.
  5. Измените источник imdisk так, чтобы в качестве драйвера ядра он создавал диск с притвором непосредственно в физическом разделе, без необходимости использования devio.
harrymc
источник
Если все сделано правильно, редактирование MBR не должно представлять слишком большой угрозы. Даже если он будет поврежден, это не основной раздел ОС, так кого это волнует? Вы можете легко это исправить!
Прорыв
@ Прорыв, я думаю, вы упускаете тот факт, что обе ОС находятся на одном диске.
zneak
@zneak: Я думаю, что @Breakthrough прав - есть несколько программ, которые могут сохранить, а затем восстановить MBR в экстренном случае.
Harrymc
Кроме того, для справки, VMWare, к сожалению, не может использовать виртуальный диск из imdisk.
zneak
Это правильно, потому что ImDisk не регистрируется правильно в NT Mount Manager, используя управляющий код IOCTL_MOUNTMGR_CREATE_POINT ; вместо этого он напрямую создает символическую ссылку на букву диска, и, конечно, ядро ​​не считает этот объем допустимым. Я пытался заставить его работать раньше, но мне не очень удалось. (Это та же причина, по которой вы не можете использовать том ImDisk для, скажем, монтирования VHD.)
user541686
2

Это зависит от того, насколько вы отчаянно пытаетесь заставить это работать, но я бы сказал, что это возможно, с помощью «всего лишь» двух «простых» (читай: жестоких) шагов:

  1. Напишите драйвер, чтобы обойти ограничение, установленное Windows, используя (полу -?) Документированный флаг SL_FORCE_DIRECT_WRITE.

  2. Хук CreateFileи / или WriteFileвызов от VMWare , используя библиотеку как EasyHook (я сказал вам , что это было легко!) Общаться с файлом вручную с помощью драйвера, возможно , связь с водителем , используя DeviceIoControl.

На самом деле это звучит не так уж плохо, если вы знаете, где искать информацию для обхода ограничений ... Я подключил такие приложения, как Nero, для проверки IOCTL_SCSI_PASS_THROUGHвызовов, чтобы я мог создать свою собственную библиотеку для записи компакт-дисков, и это не будет слишком сложно; Написание драйвера будет сложнее, но управляемым.


Редактировать:

Я предполагаю, что вы уже поняли это, но структура, которую вам нужно изменить, называется FLT_IO_PARAMETER_BLOCK для IRP_MJ_READ. Не уверен, насколько легко это будет, но это не должно быть слишком сложно.

user541686
источник
Звучит смешно. Я посмотрю на это завтра.
zneak
@zneak: Если вы посмотрите на мой ответ, imdisk - это доступный драйвер виртуального диска с открытым исходным кодом, который почти уже выполняет то, что вы хотите.
harrymc
@ Mehrdad У меня очень похожая проблема, не могли бы вы мне помочь? CreateFile: «Доступ запрещен» даже с правами администратора - Win7
Али