Какой формат значения DefaultConnectionSettings в реестре Windows? - PullRequest
1 голос
/ 26 ноября 2010

Раздел реестра Windows HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Connections содержит двоичное значение DefaultConnectionSettings, в котором хранятся все виды данных о конфигурации прокси-сервера пользователя.Каков точный формат этих данных?

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

Ответы [ 4 ]

5 голосов
/ 30 июня 2011

Я нашел это, возможно, это поможет вам!

0.  keep this value
    1.  "00" placeholder
    2.  "00" placeholder
    3.  "00" placeholder
    4.  "xx" increments if changed
    5.  "xx" increments if 4. is "FF"
    6.  "00" placeholder
    7.  "00" placeholder
    8.  "01"=proxy deaktivated; other value=proxy enabled
    9.  "00" placeholder
    10. "00" placeholder
    11. "00" placeholder
    12. "xx" length of "proxyserver:port"
    13. "00" placeholder
    14. "00" placeholder
    15. "00" placeholder
    "proxyserver:port"
if 'Bypass proxy for local addresses':::
    other stuff with unknown length
    "<local>"
    36 times "00"
if no 'Bypass proxy for local addresses':::
    40 times "00"
4 голосов
/ 26 ноября 2010

Вместо того, чтобы читать / записывать значение реестра напрямую, вы должны вместо этого использовать InternetQueryOption() и InternetSetOption() функции WinInet.

С учетом сказанного взгляните на это:

Как программно настроить «сценарий автоматической настройки» для подключения удаленного доступа?

http://www.visualbasicscript.com/fb.ashx?m=76412

1 голос
/ 19 апреля 2018

Ответ Стивена довольно полный, меня просто удивили многие «заполнители».Мои исследования показывают, что большинство из них на самом деле являются 32-битными целыми числами, хранящимися в формате с прямым порядком байтов (то есть младший байт сначала, т.е. 0xa1b2c3d4 хранится как 0xd4 0xc3 0xb2 0xa1 ).Это делает магию DefaultConnectionSettings довольно простой:

4 bytes int: 0x46 or 0x3C (whatever that means)
4 bytes int: counter, increment upon every change
4 bytes int: proxy settings, i.e. a merge of these bits:
                                 0x1 always present
                                 0x2 enable manual proxy
                                 0x4 enable autoconfig
                                 0x8 enable autodetect
4 bytes int: length of proxyServer string (can be 0)
proxyServer string in ASCII (i.e. server:port)
4 bytes int: length of proxyOverrides string (can be 0)
proxyOverrides string in ASCII (domains separated by ; 
                                use <local> for local override)
4 bytes int: length of autoconfigUrl string (can be 0)
autoconfigUrl string in ASCII
4 bytes int: 0x00 or 0x01 (whatever that means)
31 bytes: 0x00 (whatever that means)
1 голос
/ 26 июля 2017

Просто хочу расширить ответ Зейна Али (в качестве ответа, поскольку у меня недостаточно репутационных баллов, чтобы комментировать) и, конечно же, поблагодарить Зейна за публикацию информации, которую они сделали, так как она очень помогла мне, когда я был пытаясь понять остальное.

Номер 8 немного сложнее, чем просто показать, что прокси отключен или нет. Он также устанавливает два других флажка в настройках.

Установка числа от 8 до «01» снимает флажок для включения прокси и снимает флажок «Автоматически определять настройки» и флажок для использования сценария.

Установка числа 8 на «0f», однако, разрешает все.

Для ясности, этот 8-й байт в основном устанавливает флаги. Насколько я могу судить, младший бит байта всегда равен «1». Второй наименее значимый бит - «1», если установлен флажок ручных настроек прокси. Третий младший значащий бит - «1», если установлен флажок для использования сценария и указан адрес для сценария. 4-й младший значащий бит - установить флажок «Автоматически определять настройки» (в основном, установка этих битов в 1 устанавливает флажок, а в 0 снимает флажок)

Я установил для него значение «03», которое включает только ручной прокси

Кроме того, «Другие вещи с неизвестной длиной» не являются правильными, поскольку длина известна. После этого упоминается список исключений для прокси, разделенный точкой с запятой. Длина этого списка - байт сразу после «proxyserver: port». Это, вместе с 3 '00' s заполнения, объясняет разницу в 4 байта, которая была упомянута как отличающаяся в зависимости от того, что еще у вас было.

0.  keep this value
1.  "00" placeholder
2.  "00" placeholder
3.  "00" placeholder
4.  "xx" increments if changed
5.  "xx" increments if 4. is "FF"
6.  "00" placeholder
7.  "00" placeholder
8.  "03"=enable proxy, enable auto detect settings, auto script etc
9.  "00" placeholder
10. "00" placeholder
11. "00" placeholder
12. "xx" length of "proxyserver:port"
13. "00" placeholder
14. "00" placeholder
15. "00" placeholder
"proxyserver:port"
    "xx" length of proxy exception list
    "00" placeholder
    "00" placeholder
    "00" placeholder
Proxy Exception list delimited by semi-colons (use "<local>" to exclude local addresses)
36 times "00"

Я потратил довольно много времени, пытаясь понять все это, так что, надеюсь, я что-то не пропустил.

Я создал пакетный скрипт, в котором вы можете указать прокси-сервер и порт, а также список исключений, и он автоматически создаст двоичный код и вставит его в реестр, где он должен быть (при условии, что восьмой байт "03").

Было бы тривиально изменить код так, чтобы он просто распечатывал двоичный файл, просто заменив всю строку "reg add" на "echo% data%".

Также обратите внимание, что сценарий, который я предоставил ниже, изменяет ключ HKLM, поскольку я использовал сценарий для настройки прокси-сервера на уровне всей машины в сочетании с объектами групповой политики. Вместо этого следует исправить это на HKCU.

Это можно найти здесь (если вы хорошо разбираетесь в пакетном режиме, не стесняйтесь делать сценарий лучше, поскольку я не очень хорошо с ним знаком и думаю, что он, вероятно, будет показан в коде): https://gist.github.com/hallzy/b7dfba5f71c0251f1139f8c531cd7817

...