Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> NDIS 6.20 - помогите разобраться в теории! Как открыть адаптер в чистом NDIS 6.20 
:(
    Опции темы
Jenaro
Дата 13.4.2012, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 13.4.2012

Репутация: нет
Всего: нет



Здравствуйте.

Недавно начал разбираться с NDIS. У меня возник вот такой вопрос: как открыть адаптер в "чистом" NDIS 6.20? Какие функции и структуры для этого использовать?

P.S.: DDK читал, но не вычитал... Там написано, что NdisOpenAdapter поддерживается NDIS 5.1, NdisOpenAdapterEx поддерживается только NDIS 6.0, а какая функция "родная" для NDIS 6.20 - там не написано.
PM MAIL   Вверх
feodorv
Дата 13.4.2012, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(Jenaro @  13.4.2012,  18:17 Найти цитируемый пост)
NdisOpenAdapterEx поддерживается только NDIS 6.0

Почему "только"?
Цитата

Supported for NDIS 6.0 drivers in Windows Vista.

То есть для версий 5.xx - NdisOpenAdapter, а для 6.xx - NdisOpenAdapterEx. Смена поколений)))


Цитата(Jenaro @  13.4.2012,  18:17 Найти цитируемый пост)
Какие функции и структуры для этого использовать?

Вы NdisOpenAdapterEx пробовали?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Jenaro
Дата 13.4.2012, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 13.4.2012

Репутация: нет
Всего: нет



Попробовал написать простейший протокольный драйвер, который регистрирует протокол, создает устройство и открывает адаптер. Проблема в том, что пр вызове NdisOpenAdapterEx получается BSOD и 0000007E (C0000005, ...), т.е.
acces vialetion. Вот DriverEntry. Может кто подскажет в чем дело?

Код
NDIS_STATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) 
{
    NDIS_STATUS status;
    NDIS_STATUS OpenErrorStatus;
    NDIS_HANDLE hProtocol;
    NDIS_HANDLE hBinding;
    NDIS_PROTOCOL_DRIVER_CHARACTERISTICS ch;
    NDIS_OPEN_PARAMETERS op;
    NDIS_STRING ProtocolName;
    NDIS_STRING AdapterName;
    PDEVICE_OBJECT ProtocolDeviceObject;
    UNICODE_STRING ProtocolDeviceName;
    PSRP_DX pdx;
    
    NDIS_MEDIUM MediumArray[1] = {NdisMedium802_3};
    NET_FRAME_TYPE FrameTypeArray[2] = {NDIS_ETH_TYPE_802_1X, NDIS_ETH_TYPE_802_1Q};
    UINT SelectedMediumIndex;
    
    NdisInitUnicodeString(&ProtocolName, L"SRP");
    NdisInitUnicodeString(&ProtocolDeviceName, L"\\Device\\srp_dev");
    NdisInitUnicodeString(&AdapterName, L"\\Device\\{2619D684-898C-4A27-8D6F-8BD15D12430E}");
    
    DriverObject->DriverUnload = DriverUnload;
    
    (NTSTATUS) status = IoCreateDevice(DriverObject, sizeof(SRP_DX), &ProtocolDeviceName, FILE_DEVICE_NETWORK, 0, FALSE, &ProtocolDeviceObject);
    if(status == STATUS_SUCCESS) {
       DbgPrint("SRP : protocol device created successful.");
    } else {
       DbgPrint("SRP : protocol device creating failed. status %08X", status);
    }  
    
    ch.MajorNdisVersion = 0x06;
    ch.MinorNdisVersion = 0x02;
    ch.MajorDriverVersion = 0x01;
    ch.MinorDriverVersion = 0x00;
    ch.Flags = 0;
    ch.Name = ProtocolName;
    ch.SetOptionsHandler = ProtocolSetOptions;
    ch.BindAdapterHandlerEx = ProtocolBindAdapterEx;
    ch.UnbindAdapterHandlerEx = ProtocolUnbindAdapterEx;
    ch.OpenAdapterCompleteHandlerEx = ProtocolOpenAdapterCompleteEx;
    ch.CloseAdapterCompleteHandlerEx = ProtocolCloseAdapterCompleteEx;
    ch.NetPnPEventHandler = ProtocolNetPnPEvent;
    ch.UninstallHandler = ProtocolUninstall;
    ch.OidRequestCompleteHandler = ProtocolOidRequestComplete;
    ch.StatusHandlerEx = ProtocolStatusEx;
    ch.ReceiveNetBufferListsHandler = ProtocolReceiveNetBufferLists;
    ch.SendNetBufferListsCompleteHandler = ProtocolSendNetBufferListsComplete;
    ch.DirectOidRequestCompleteHandler = ProtocolDirectOidRequestComplete;
    
    status = NdisRegisterProtocolDriver(NULL, &ch, &hProtocol);
    
    if(status != NDIS_STATUS_SUCCESS) {
    #ifdef DBG
       DbgPrint("SRP : protocol registered successful.");
    #endif   
    } else {
    #ifdef DBG
       DbgPrint("SRP : protocol registering failed.");
    #endif 
      pdx = (PSRP_DX) DriverObject->DeviceObject->DeviceExtension;
      pdx->hProtocol = hProtocol;    
    }
    
    NdisZeroMemory(&op, sizeof(NDIS_OPEN_PARAMETERS));
    op.Header.Revision = NDIS_OPEN_PARAMETERS_REVISION_1;
    op.Header.Size = sizeof(NDIS_OPEN_PARAMETERS);
    op.Header.Type = NDIS_OBJECT_TYPE_OPEN_PARAMETERS;
    op.AdapterName = &AdapterName;
    op.MediumArray = &MediumArray[0];
    op.MediumArraySize = sizeof(MediumArray) / sizeof(NDIS_MEDIUM);
    op.SelectedMediumIndex = &SelectedMediumIndex;
    op.FrameTypeArray = &FrameTypeArray[0];
    op.FrameTypeArraySize = sizeof(FrameTypeArray) / sizeof(NET_FRAME_TYPE);
    
    status = NdisOpenAdapterEx(hProtocol, NULL, &op, NULL, &hBinding);
    if(status == NDIS_STATUS_SUCCESS || status == NDIS_STATUS_PENDING) {
       DbgPrint("NdisOpenAdapterEx success.");
    } else {
       DbgPrint("NdisOpenAdapterEx failed.");
    }
    
    return NDIS_STATUS_SUCCESS; 
}

Спасибо.



[/code]
PM MAIL   Вверх
Олег2005
Дата 14.4.2012, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 6
Всего: 11



Гляньте вот здесь
PM MAIL WWW MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.