NDIS Power Management Disable
От: perceptron Беларусь  
Дата: 06.01.11 11:21
Оценка:
Здравствуйте.
Проблема такая: нужно в Windows XP в свойствах Network Adapter выключить опцию энергосбережения — как такое можно сделать ?
Вот здесь http://support.microsoft.com/kb/837058 есть ответ на мой вопрос. То есть залезть в реестр и поменять значение, но эффект будет
только после перезагрузки. Как можно решить проблему без перезагрузки ?
Думаю нужно послать какое-то сообщение сетевому адаптеру чтобы тот, перечитал свои настройки (в моём случае изменённые в реестре).
Как такое можно сделать ? может есть другой путь решения проблемы ?
power management network card
Re: NDIS Power Management Disable
От: Геннадий Майко США  
Дата: 06.01.11 15:05
Оценка:
Здравствуйте, perceptron,

P>Проблема такая: нужно в Windows XP в свойствах Network Adapter выключить опцию энергосбережения — как такое можно сделать ?

P>Вот здесь http://support.microsoft.com/kb/837058 есть ответ на мой вопрос. То есть залезть в реестр и поменять значение, но эффект будет
P>только после перезагрузки. Как можно решить проблему без перезагрузки ?
--
Попробуйте перезапустить соответсвуюший драйвер (остановить и запустить снова).

С уважением,
Геннадий Майко.
Re[2]: NDIS Power Management Disable
От: perceptron Беларусь  
Дата: 08.01.11 16:01
Оценка:
Здравствуйте, Геннадий Майко, Вы писали:

ГМ>Попробуйте перезапустить соответсвуюший драйвер (остановить и запустить снова).


Так остановка драйвера вызовет потерю всех имеющихся в данный момент сетевых соединений. Винда параметры из диспетчера задач как-то корректно обрабатывает без остановок и перезапусков драйверов...
Re[3]: NDIS Power Management Disable
От: perceptron Беларусь  
Дата: 08.01.11 16:17
Оценка:
Поправлюсь: не из диспетчера задач — а из диспетчера устройств свойства сетевой карты меняются сразу и без перезагрузок.
То есть вызвав свойства своей сетевой карты через rundll32.exe devmgr.dll /DeviceID PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10\4&1674F76A&0&3840
Всё можно установить без перезагрузки и остановки драйвера.
Но как программно добраться до нужного таба Power Management и нужного чекбокса (без явного открытия диспетчера)? (например через cfgmgr32.dll и setupapi.dll?) (Этот таб есть не у всех драйверов NDIS...).
Re[4]: NDIS Power Management Disable
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 09.01.11 22:10
Оценка:
P>Поправлюсь: не из диспетчера задач — а из диспетчера устройств свойства сетевой карты меняются сразу и без перезагрузок.
P>То есть вызвав свойства своей сетевой карты через rundll32.exe devmgr.dll /DeviceID PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10\4&1674F76A&0&3840
в таких случаях можно предложить ставить специнструментарий или цеплять WinDbg — и смотреть какие IRP приходят устройству при операциях в диалоге.

по поводу идеи с правкой реестра — возможно, обновления состояния сетевого адаптера можно добиться через NetSh\WMI и\или манипуляции с соотв. конфигурациями (открыть\что-то изменить\закрыть).

P>Всё можно установить без перезагрузки и остановки драйвера.

P>Но как программно добраться до нужного таба Power Management и нужного чекбокса (без явного открытия диспетчера)? (например через cfgmgr32.dll и setupapi.dll?) (Этот таб есть не у всех драйверов NDIS...).
Во-первых, наличие таба Power Management и чекбокса определяется через WMI (GUID_POWER_DEVICE_ENABLE and
GUID_POWER_DEVICE_WAKE_ENABLE). Соответственно, требуется поддержка этого дела (и WMI) в драйверах, которым нужен таб.

Во-вторых, подозреваю, что NDIS устройству нужно так или иначе наладить некий set power request. Каким образом это сделать из UM — отдельный вопрос, см первый абзац и для игр с WMI — WMI cmd line tools.

Еще ссылки по теме:
Power Management for Network Devices in Windows 7
WMI script to enable WOL
... << RSDN@Home 1.2.0 alpha 4 rev. 1481>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[5]: NDIS Power Management Disable
От: perceptron Беларусь  
Дата: 10.01.11 07:46
Оценка:
Убедился, что значения изменённые в реестре перечитываются без перезагрузки если отключить/включить сетевой адаптер (чего не хотелось бы делать).
+ нашёл в инете такую цитату касательно моей проблемы:
to apply the changes you must restart the corresponding device driver. so you have to use the SetupDi... functions (windows DDK)
Поэкспериментировал с setupapi.dll (SetupDiGetClassDevs, SetupDiEnumDeviceInfo, SetupDiSetClassInstallParams, SetupDiCallClassInstaller) с выключением-включением сетевого адаптера: да программно включается-выключается. Даже если в SP_PROPCHANGE_PARAMS выставить свойство DICS_PROPCHANGE,
то происходит рестарт сетевого соединения со всеми вытекающими последствиями. Т.е. настройки из реестра перечитываются. Сетевой адаптер рестартует свой драйвер. Но мне рестарта как раз и не нужно. Походу прихожу к мысли, что рестарт сетевого драйвера всё-таки неизбежен...

Наткнулся ещё на упоминание INetCfg COM interfaces и конкретно интерфейс INetCfgComponentControl с его методом ApplyRegistryChanges()
Но ещё не пробовал...

P.s. Не хотелось бы использовать WMI и Win32_NetworkAdapterConfiguration class запуская скрипты на VB...
Re[6]: NDIS Power Management Disable
От: Геннадий Майко США  
Дата: 10.01.11 12:48
Оценка:
Здравствуйте, perceptron,

P>Поэкспериментировал с setupapi.dll (SetupDiGetClassDevs, SetupDiEnumDeviceInfo, SetupDiSetClassInstallParams, SetupDiCallClassInstaller) с выключением-включением сетевого адаптера: да программно включается-выключается. Даже если в SP_PROPCHANGE_PARAMS выставить свойство DICS_PROPCHANGE,

P>то происходит рестарт сетевого соединения со всеми вытекающими последствиями. Т.е. настройки из реестра перечитываются. Сетевой адаптер рестартует свой драйвер. Но мне рестарта как раз и не нужно. Походу прихожу к мысли, что рестарт сетевого драйвера всё-таки неизбежен...
--
Попробуйте определить, как (кем) происходит установка и считывание значение этого флага из registry, используя Process Monitor и выполняя функции SetipApi*.

C уважением,
Геннадий Майко.
Re[7]: NDIS Power Management Disable
От: perceptron Беларусь  
Дата: 10.01.11 13:46
Оценка:
ГМ>Попробуйте определить, как (кем) происходит установка и считывание значение этого флага из registry, используя Process Monitor и выполняя функции SetipApi*.

Если изменять состояния чекбокса вручную, то видно в ProcessMonitor, что Explorer.exe запускает WMI и тот с помощью services.exe опрашивает драйвер устройства (сетевой карты в моём случае). Далее видно, что при нажатии на "OK" сохраняются данные в ветку реестра HKLM\System\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0008\PnPCapabilities тем же самым процессом Explorer.exe
Больше ProcessMonitor никакой дополнительной инфы не даёт....

Тут надо как писал Valery A. Boronin "цеплять WinDbg — и смотреть какие IRP приходят устройству при операциях в диалоге".
Re[8]: NDIS Power Management Disable
От: Геннадий Майко США  
Дата: 10.01.11 18:22
Оценка:
Здравствуйте, perceptron,

ГМ>>Попробуйте определить, как (кем) происходит установка и считывание значение этого флага из registry, используя Process Monitor и выполняя функции SetipApi*.


P>Если изменять состояния чекбокса вручную, то видно в ProcessMonitor, что Explorer.exe запускает WMI и тот с помощью services.exe опрашивает драйвер устройства (сетевой карты в моём случае). Далее видно, что при нажатии на "OK" сохраняются данные в ветку реестра HKLM\System\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0008\PnPCapabilities тем же самым процессом Explorer.exe

P>Больше ProcessMonitor никакой дополнительной инфы не даёт....
--
1. Это означает, скорее всего, что перечитываться это значение из регистра будут только во время перестарта драйвера. Вряд ли кто-то посылает IRP для этого.

Попробуете перезапустить драйвер и проконтролируйте, кто и когда считывает это значение из регистра.

2. С помошью WMI в принципе можно не только считывать информацию из драйвера, но и записывать ее туда. Так что советую обратить внимание на сообщение Валеры, тем более, что вполне можно написать приложение на WMI и на С++/С.

C уважением,
Геннадий Майко.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.