Суть такова. При установке на Windows OS, в частности Vista, 7, 8 программных продуктов виртуализации VirtualBox или VMWare, в сетевых подключениях появляются различные сетевые адаптеры, которые Windows Firewall помечает как адаптеры неопознанной сети. Поскольку, мне, обычно, не нужно каким либо образом идентифицировать эти сетевые элементы, я решил убрать эту надпись, мусолящую глаза «Неопознанная сеть». Решение проблемы я нашел на сайте brokenwire.net, вот ссылка на статью. К написанию этой статьи, меня склонило желание написать программу, для автоматизации выше указанных действий. Прошу под кат.
Работу с реестром будем рассматривать на примере программы. Ну что же, давай те писать.
У кого плохо с английским, расскажу вкратце Нужно в реестре Windows найти ключ, который соответствует нашему адаптеру, созданному VirtualBox’ом или VMWar’ом. После чего создать в нем поле типа DWORD с именем «*NdisDeviceType« и значением «1«. Необходимая ветка ключей реестра лежит в HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}.
Для работы с реестром, нам нужны классы RegistryKey и Registry. Подключим необходимое пространство имен.
using Microsoft.Win32;
Теперь откроем наш ключ, хранящий различные устройства, в том числе и необходимые нам сетевые адаптеры.
string vmsBaseKeyString = @"SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}"; RegistryKey vmsBaseKey = Registry.LocalMachine.OpenSubKey(vmsBaseKeyString);
Опишу, что мы сделали. Строка vmsBaseKeyString хранит относительный путь к необходимому ключу, но без первой глобальной ветки. В реестре Windows всего 5 глобальных веток. В коде, к ним можно обращаться через поля класса Registry, которые представляют собой объекты RegistryKey. В данном случае, нам было необходима ветка HKEY_LOCAL_MACHINE. Мы обратились к ней, используя Registry.LocalMachine и вызвали метод OpenSubKey. Этот метод возвращает вложенный раздел по заданному пути в виде объекта класса RegistryKey.
Теперь с помощью метода GetSubKeyNames класса RegistryKey, мы можем получить массив имен вложенных ключей.
string[] subNames = vmsBaseKey.GetSubKeyNames();
Далее нужно найти ключ, которому соответствует наш адаптер. В случае VMWare значение ProviderName должно быть равно «VMware, Inc.«, а для VirtualBox’а, у этого ключа значение DriverDesc должно быть равно «VirtualBox Host-Only Ethernet Adapter». Кроме того, необходимо учесть, что среди дочерних ключей нашего vmsBaseKey, есть ключ Properties, который мы не сможет открыть. При обнаружении ключа, создадим там сразу поле типа DWORD с именем «*NdisDeviceType« и значением 1.
foreach (var subName in subNames) { if (subName != "Properties") { RegistryKey potentialVmKey = vmsBaseKey.OpenSubKey(subName, true); if ((string)potentialVmKey.GetValue("ProviderName") == "VMware, Inc." || (string)potentialVmKey.GetValue("DriverDesc") == "VirtualBox Host-Only Ethernet Adapter") { potentialVmKey.SetValue("*NdisDeviceType", 1, RegistryValueKind.DWord); } } }
Здесь мы используем перегруженный метод OpenSubKey, передавая ему вторым параметром булевое значение true, что указывает на открытие ключа в режиме чтения и записи. Далее, используя метод GetValue и явное преобразование в string, мы проверяем значения полей данного ключа. Если необходимые значения полей совпадают с необходимыми нам значениями, используя метод SetValue, мы создаем новое поле, с именем *NdisDeviceType, со значением 1 и типом RegistryValueKind.DWord, что соответствует типу реестра DWORD.
Вот и все, осталось только выключить и включить сетевые адаптеры, созданные средствами виртуализации.
Задавайте свои ответы.
Спасибо за полезную информацию, не знал об этом.
Пожалуйста.
У меня строка с вызовом метода OpenSubKey, возвращает null, почему так?
Вернее, я знаю почему, но этот пусть существует. Что может быть не так?
Путь*
Очень странно, что возвращает null. Вы на 100% уверены, что такой путь существует? Попробуйте открыть другой ключ, по соседству с этим.
приветсвую помогите удалить эти ключи с реестра
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\PnpLockdownFiles\%SystemRoot%/system32/DRIVERS/VBoxNetAdp6.sys
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Setup\PnpLockdownFiles\%SystemRoot%/system32/DRIVERS/VBoxNetAdp6.sys
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\PnpLockdownFiles\%SystemRoot%/system32/DRIVERS/VBoxNetAdp6.sys
все делаю с правами админа ,и безопасным режиме тож не удаляются. Я админ своего ноута но какой то кусок кода не могу удалить Виндовс 8.1 про, х64
Может быть они не «не удаляются» а создаются вновь?
Кстати, зацените мой английский блог. Ссылка в шапке сайта.
Забыл написать что все дрова и все папки я удалил от VBOX.
Reg Organizer показывает эти ключи когда вбиваешь в поиске
VBoxNetAdp
VBoxUSB