Читаем Как писать драйвера полностью

 // start driver instances.

 //

 NdisMInitializeWrapper(&WrapperHandle, DriverObject, RegistryPath, NULL);

 NdisZeroMemory(&MChars, sizeof(NDIS_MINIPORT_CHARACTERISTICS));

 MChars.MajorNdisVersion = 4;

 MChars.MinorNdisVersion = 0;

 MChars.InitializeHandler = MPInitialize;

 MChars.QueryInformationHandler = MPQueryInformation;

 MChars.SetInformationHandler = MPSetInformation;

 MChars.ResetHandler = MPReset;

 MChars.TransferDataHandler = MPTransferData;

 MChars.HaltHandler = MPHalt;

 //

 // We will disable the check for hang timeout so we do not

 // need a check for hang handler!

 //

 MChars.CheckForHangHandler = NULL;

 MChars.SendHandler = MPSend;

 MChars.ReturnPacketHandler = MPReturnPacket;

 //

 // Either the Send or the SendPackets handler should be specified.

 // If SendPackets handler is specified, SendHandler is ignored

 //

 // MChars.SendPacketsHandler = MPSendPackets;

 Status = NdisIMRegisterLayeredMiniport(WrapperHandle, &MChars, sizeof(MChars), &DriverHandle);

 ASSERT(Status == NDIS_STATUS_SUCCESS);

 NdisMRegisterUnloadHandler(WrapperHandle, PtUnload);

 //

 // Now register the protocol.

 //

 NdisZeroMemory(&PChars, sizeof(NDIS_PROTOCOL_CHARACTERISTICS));

 PChars.MajorNdisVersion = 4;

 PChars.MinorNdisVersion = 0;

 //

 // Make sure the protocol-name matches the service-name under which this protocol is installed.

 // This is needed to ensure that NDIS can correctly determine the binding and call us to bind

 // to miniports below.

 //

 NdisInitUnicodeString(&Name, L"SFilter"); // Protocol name

 PChars.Name = Name;

 PChars.OpenAdapterCompleteHandler = PtOpenAdapterComplete;

 PChars.CloseAdapterCompleteHandler = PtCloseAdapterComplete;

 PChars.SendCompleteHandler = PtSendComplete;

 PChars.TransferDataCompleteHandler = PtTransferDataComplete;

 PChars.ResetCompleteHandler = PtResetComplete;

 PChars.RequestCompleteHandler = PtRequestComplete;

 PChars.ReceiveHandler = PtReceive;

 PChars.ReceiveCompleteHandler = PtReceiveComplete;

 PChars.StatusHandler = PtStatus;

 PChars.StatusCompleteHandler = PtStatusComplete;

 PChars.BindAdapterHandler = PtBindAdapter;

 PChars.UnbindAdapterHandler = PtUnbindAdapter;

 PChars.UnloadHandler = NULL;

 PChars.ReceivePacketHandler = PtReceivePacket;

 PChars.PnPEventHandler= PtPNPHandler;

 NdisRegisterProtocol(&Status, &ProtHandle, &PChars, sizeof(NDIS_PROTOCOL_CHARACTERISTICS));

 ASSERT(Status == NDIS_STATUS_SUCCESS);

 NdisIMAssociateMiniport(DriverHandle, ProtHandle);

 return(Status);

}

Майкрософт утверждает что нам нужны 4 функции минимум, присутствующие в DriverEntry:

NdisMInitializeWrapper;

NdisIMRegisterLayeredMiniport;

NdisRegisterProtocol;

NdisIMAssociateMiniport.

Перейти на страницу:

Похожие книги

C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных