Начиная с висты в ndis появилась пара функций NdisIfRegisterProvider и NdisIfDeregisterProvider
WinDbg традиционно не умеет показывать какие провайдеры были зарегистрированы в системе, так что запускаем дизассемблер например
Кусочек кода из NdisIfRegisterProvider:
mov edi, offset _ndisIfProviderListLock
add esp, 18h
mov ecx, edi
call ds:__imp_@KfAcquireSpinLock@4
mov ecx, _ndisIfProviderList
Как видим провайдеры хранятся в списке ndisIfProviderList и синхронизируются локом ndisIfProviderListLock, техника их получения многократно мною описана
Сами структуры _NDIS_IF_PROVIDER_BLOCK и _NDIS_IF_PROVIDER_CHARACTERISTICS одинаковы под всеми версиями windows и выглядят так:
struct _NDIS_IF_PROVIDER_CHARACTERISTICS
{
struct _NDIS_OBJECT_HEADER Header;
PBYTE QueryObjectHandler;
PBYTE SetObjectHandler;
PVOID Reserved1;
PVOID Reserved2;
};
struct _NDIS_IF_PROVIDER_BLOCK
{
LIST_ENTRY Link;
LIST_ENTRY IfList;
PVOID IfProviderContext;
struct _NDIS_IF_PROVIDER_CHARACTERISTICS ProviderCharacteristics;
};
Два провайдера регистрирует сам ndis.sys:
- QueryObjectHandler - ndisIfQueryLoopbackObject, SetObjectHandler - ndisIfSetObject
- QueryObjectHandler - ndisIfQueryObject, SetObjectHandler - ndisIfSetObject
Комментариев нет:
Отправить комментарий