Программно включить общий доступ к подключению к Интернету

Я могу сделать это вручную, щелкнув правой кнопкой мыши на сетевом подключении, открыв вкладку «Общий доступ», установив флажок «Разрешить другим пользователям сети подключаться через подключение к Интернету этого компьютера» и выбрав «Подключение к домашней сети».

Обдумывая эту проблему, я обнаружил несколько наборов COM-интерфейсов:

1) Общий доступ к подключению Интернета и Интернет Интерфейсы брандмауэра подключения с INetSharingManager

В его документации говорится:

Брандмауэр подключения к Интернету может быть изменен или недоступен в последующих версиях. Вместо этого используйте API брандмауэра Windows.

Кроме того, INetSharingConfiguration.EnableSharing < Метод / a> не выглядит так, как будто он соответствует описанной выше процедуре, потому что его аргументы не включают «Подключение к домашней сети».

2) Брандмауэр Windows для Windows XP с интерфейсами SP2

Его документация ссылается на нас и далее:

Для Windows Vista и более поздних версий рекомендуется использовать брандмауэр Windows с API повышенной безопасности.

3) Брандмауэр Windows с повышенной безопасностью API

Есть только следующие интерфейсы: INetFwPolicy2, INetFwProduct, INetFwProducts, INetFwRule, INetFwRule2, INetFwRule3, INetFwRules, INetFwServiceRestriction. Не выглядит очень многообещающим.

Теперь я потерялся. Какой API мне следует использовать в Windows 7?


person utapyngo    schedule 06.09.2012    source источник
comment
Сможете ли вы поделиться на Github сутью скрипта, который вы наконец использовали?   -  person Mark K Cowan    schedule 01.09.2017
comment
@MarkKCowan: Наконец-то я написал это: github.com/utapyngo/icsmanager   -  person utapyngo    schedule 02.09.2017


Ответы (2)


Утапынго

Какой ваш окончательный выбор?

http://social.msdn.microsoft.com/Forums/en-tw/windowssdk/thread/19f7581d-29c7-4109-85d4-6a79ee4d1577.

«Мне удалось найти решение. Вы должны включить общедоступный интерфейс на адаптере, к которому вы подключаетесь, и разрешить совместное использование на частном интерфейсе для адаптера, который вы хотите использовать для сети».

person Simon Zhao    schedule 11.10.2012
comment
Поле ответа предназначено для ответов, а не для вопросов. - person johannes; 11.10.2012
comment
Спасибо. Теперь я вижу, что INetSharingConfiguration.EnableSharing - правильный метод, потому что INetSharingConfiguration соответствует одному соединению. Но, пожалуйста, отформатируйте свой ответ соответствующим образом. Вы можете использовать кнопку «Цитата» для цитирования. - person utapyngo; 11.10.2012
comment
Это решение больше не работает в Win 10 Anniversary Update - нарушение прав доступа (разыменование нулевого указателя происходит внутри hnetcfg.dll, когда приложение вызывает DisableSharing или EnableSharing) - person vond; 06.12.2016

Нарушение прав доступа происходит только при обновлении Win 10 Anniversary Update, если вызов выполняется 32-битной программой в 64-битной ОС. Он работает с 32-битной программой на 32-битной ОС или 64-битной программой на 64-битной ОС.

person Steve Smith    schedule 18.01.2017
comment
Отлично, спасибо за подсказку, теперь работает отлично, когда я начал использовать API из 64-битного приложения. - person vond; 02.08.2017