IOCTL_TCP_QUERY_INFORMATION_EX + Vista
От: Andrew S Россия http://alchemy-lab.com
Дата: 12.02.08 20:29
Оценка:
Всем привет.

Есть некий user mode функционал перечисления параметров сетевых адаптеров через TDI (сделано так для совместимости с NT4, ну и вроде как работало раньше везде).
На висте, понятное дело, проблемы.
В общем, смысл примерно такой.
1. Получаем список TDI Entity. Это работает.
2. Далее пробуем получать тип:

                theObjectID.toi_entity    = pEntityIDs[i];
                theObjectID.toi_class    = INFO_CLASS_GENERIC;    //    0x100
                theObjectID.toi_type    = INFO_TYPE_PROVIDER;    //    0x100
                theObjectID.toi_id        = ENTITY_TYPE_ID;        //    0x001

                memset(&tcpRequest, 0, sizeof(tcpRequest));
                tcpRequest.ID = theObjectID;


Это уже не работает с ошибкой "invalid function".

Пробовалось и для \device\tcp и для \device\tcp6 — монопенесуально. Ковырять вистовый inetmib1, понятное дело, не хочется.
Собственно, вопрос в следующем — можно ли как-нибудь попроще вывернуться (не используя ip helper, дабы не дублировать функциональность для NT4 отдельно) или таки придется использовать ip helper и плодить легаси код?
Спасибо!
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re: IOCTL_TCP_QUERY_INFORMATION_EX + Vista
От: TarasCo  
Дата: 14.02.08 20:15
Оценка: 12 (1)
В принципе, можно попробовать сразу затребовать нужный код, вы ведь знаете, что вам нужно. Например, для получения таблицы локальных адресов можно сляпать такой запрос:

    tcp_req.ID.toi_entity.tei_entity = CL_NL_ENTITY;
    tcp_req.ID.toi_entity.tei_instance = 0;
    tcp_req.ID.toi_class = INFO_CLASS_PROTOCOL;
    tcp_req.ID.toi_type = INFO_TYPE_PROVIDER;
    tcp_req.ID.toi_id = IP_MIB_ADDRTABLE_ENTRY_ID;


и это работает под Vista в том числе. Правда, надо заметить, что аналогичный запрос для таблицы маршрутизации ( IP_MIB_RTTABLE_ENTRY_ID ) под вистой не работает и возвращает пресловутый "invalid function". И очень возможно, что в Windows 7.0 IOCTL_TCP_QUERY_INFORMATION_EX вообще уберут. В этом свете использование ip helper ( или другого API ) IMHO более предпочтительно — лучше думать о поддержке Vista и последующих систем, а не NT 4.
Да пребудет с тобою сила
Re[2]: IOCTL_TCP_QUERY_INFORMATION_EX + Vista
От: Andrew S Россия http://alchemy-lab.com
Дата: 14.02.08 20:22
Оценка:
TC>В принципе, можно попробовать сразу затребовать нужный код, вы ведь знаете, что вам нужно. Например, для получения таблицы локальных адресов можно сляпать такой запрос:

TC>
TC>    tcp_req.ID.toi_entity.tei_entity = CL_NL_ENTITY;
TC>    tcp_req.ID.toi_entity.tei_instance = 0;
TC>    tcp_req.ID.toi_class = INFO_CLASS_PROTOCOL;
TC>    tcp_req.ID.toi_type = INFO_TYPE_PROVIDER;
TC>    tcp_req.ID.toi_id = IP_MIB_ADDRTABLE_ENTRY_ID;
TC>


TC>и это работает под Vista в том числе. Правда, надо заметить, что аналогичный запрос для таблицы маршрутизации ( IP_MIB_RTTABLE_ENTRY_ID ) под вистой не работает и возвращает пресловутый "invalid function". И очень возможно, что в Windows 7.0 IOCTL_TCP_QUERY_INFORMATION_EX вообще уберут. В этом свете использование ip helper ( или другого API ) IMHO более предпочтительно — лучше думать о поддержке Vista и последующих систем, а не NT 4.


Ну вот есть мнение, что такой подход и будет в большинстве наших кейсов давать invalid function — там все несколько сложнее, фактически свой adapter helper + protocol helper. В общем, придется, видимо, бранч на ip helper делать, млин. Ну нафига так все было уродовать, непонятно

Спасибо за ответ
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[3]: IOCTL_TCP_QUERY_INFORMATION_EX + Vista
От: ClickF1 http://kz-clickf1.livejournal.com
Дата: 15.02.08 10:48
Оценка:
Можно дизассемблировать tcpip.sys вистовский, и посмотреть в обработчике IOCTL, что именно делает вызов invalid function.
Я IP Help не использую, я сам из ядра делаю IOCTL запросы девайсам ip и tcp.
Дело в том что висту я пока не ставил, да и не ковырял вообще её, поэтому ничего сказать не могу.
437843 | clickf1.kz@gmail.com | NT+/xBSD Kernel Researcher
Re[4]: IOCTL_TCP_QUERY_INFORMATION_EX + Vista
От: Andrew S Россия http://alchemy-lab.com
Дата: 15.02.08 19:17
Оценка:
CF>Можно дизассемблировать tcpip.sys вистовский, и посмотреть в обработчике IOCTL, что именно делает вызов invalid function.
CF>Я IP Help не использую, я сам из ядра делаю IOCTL запросы девайсам ip и tcp.
CF>Дело в том что висту я пока не ставил, да и не ковырял вообще её, поэтому ничего сказать не могу.

Насколько я понимаю, там во всей этой кухне уже далеко не только tcpip.sys участвует. В общем, проще ip helper заюзать, там есть хоть какие-то шансы, что все останется работоспособным и далее...
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[5]: IOCTL_TCP_QUERY_INFORMATION_EX + Vista
От: TarasCo  
Дата: 15.02.08 23:20
Оценка:
AS>Насколько я понимаю, там во всей этой кухне уже далеко не только tcpip.sys участвует. В общем, проще ip helper заюзать, там есть хоть какие-то шансы, что все останется работоспособным и далее...

В висте tcpip.sys в этом бардаке вообще не участвует . У него более нет интерфейса, доступного из UM ( из KM он тоже "не доступен" ), соответственно он не занимается обработкой запросов IOCTL_TCP_QUERY_INFORMATION_EX.
Да пребудет с тобою сила
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.