NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING str) { DbgBreakPoint(); NTSTATUS sta; global.contextnum = 0; global.mininum = 0; globalinfopool.count = 0; global.controlobj = NULL; NDIS_STATUS ndissta; NDIS_HANDLE wraphandle=NULL; NDIS_MINIPORT_CHARACTERISTICS minicha; NDIS_PROTOCOL_CHARACTERISTICS pc; NDIS_STRING ns = NDIS_STRING_CONST("zlzpass"); NdisZeroMemory(&global, sizeof(GLOBAL)); NdisInitializeWrapper(&wraphandle, driver, str, NULL); if (wraphandle == NULL) { return STATUS_UNSUCCESSFUL; } NdisZeroMemory(&minicha, sizeof(NDIS_MINIPORT_CHARACTERISTICS)); minicha.MajorNdisVersion = NDIS_MINIPORT_MAJOR_VERSION; minicha.MinorNdisVersion = NDIS_MINIPORT_MINOR_VERSION; minicha.InitializeHandler = MPInitialize; minicha.HaltHandler = MPHalt; minicha.SetInformationHandler = MPSetInformation; minicha.QueryInformationHandler = MPQueryInformation; minicha.ReturnPacketHandler = MPReturnPacket; minicha.ResetHandler = NULL; minicha.CheckForHangHandler = NULL; minicha.TransferDataHandler = MPTransferData; minicha.SendHandler = MPSend; ndissta=NdisIMRegisterLayeredMiniport(wraphandle, &minicha, sizeof(NDIS_MINIPORT_CHARACTERISTICS), &global.driverhandle); if (ndissta!=NDIS_STATUS_SUCCESS) { return STATUS_UNSUCCESSFUL; } sysadddevfunc = driver->DriverExtension->AddDevice; driver->DriverExtension->AddDevice = myAddDevice; pc.MajorNdisVersion = 5; pc.MinorNdisVersion = 0; pc.Name = ns; pc.CloseAdapterCompleteHandler = NdisProtCloseAdapterComplete; pc.SendCompleteHandler = NdisProtSendComplete; pc.TransferDataCompleteHandler = NdisProtTransferDataComplete; pc.ResetCompleteHandler = NdisProtResetComplete; pc.RequestCompleteHandler = NdisProtRequestComplete; pc.ReceiveHandler = NdisProtReceive; pc.ReceiveCompleteHandler = NdisProtReceiveComplete; pc.StatusHandler = NdisProtStatus; pc.StatusCompleteHandler = NdisProtStatusComplete; pc.BindAdapterHandler = NdisProtBindAdapter; pc.OpenAdapterCompleteHandler = NdisOpenAdapterComplete; pc.UnbindAdapterHandler = NdisProtUnbindAdapter; pc.UnloadHandler = NULL; pc.ReceivePacketHandler = NdisProtReceivePacket; pc.PnPEventHandler = NdisProtPnPEventHandler; pc.CoAfRegisterNotifyHandler = NdisProtRegisterAf; NdisRegisterProtocol(&ndissta,&global.protocolhandle, &pc, sizeof(NDIS_PROTOCOL_CHARACTERISTICS)); if (ndissta != NDIS_STATUS_SUCCESS) { return STATUS_UNSUCCESSFUL; } NdisIMAssociateMiniport(global.driverhandle, global.protocolhandle); sta = ZlzCreateDevice(driver,wraphandle); if (!NT_SUCCESS(sta)) { return STATUS_UNSUCCESSFUL; } NdisMRegisterUnloadHandler(wraphandle, unload); return STATUS_SUCCESS; }
NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) /*++ Routine Description: This is the entry routine for the localtalk driver. Arguments: DriverObject: The IO driver object for this driver object. RegistryPath: The path to the registry config for this driver. Return Value: STATUS_SUCCESS: If load was successful Error : Otherwise --*/ { NDIS_STATUS Status; NDIS_MAC_CHARACTERISTICS LtChar; static const NDIS_STRING MacName = NDIS_STRING_CONST("LT200"); DBGPRINT(DBG_COMP_INIT, DBG_LEVEL_INFO, ("Debugging breakpoint, Hit G <cr> to continue\n")); DBGBREAK(DBG_LEVEL_INFO); // Initialize the NDIS Wrapper. NdisInitializeWrapper( &LtNdisWrapperHandle, DriverObject, RegistryPath, NULL); // Setup the MAC Characteristics LtChar.MajorNdisVersion = NDIS_MAJOR_VERSION; LtChar.MinorNdisVersion = NDIS_MINOR_VERSION; LtChar.OpenAdapterHandler = LtInitOpenAdapter; LtChar.CloseAdapterHandler = LtInitCloseAdapter; LtChar.SendHandler = LtSend; LtChar.RequestHandler = LtRequest; LtChar.TransferDataHandler = LtRecvTransferData; LtChar.ResetHandler = LtReset; LtChar.QueryGlobalStatisticsHandler = LtReqQueryGlobalStatistics; LtChar.UnloadMacHandler = LtInitUnload; LtChar.AddAdapterHandler = LtInitAddAdapter; LtChar.RemoveAdapterHandler = LtInitRemoveAdapter; LtChar.Name = MacName; NdisRegisterMac( &Status, &LtMacHandle, LtNdisWrapperHandle, NULL, // Context for AddAdapter/Unload &LtChar, sizeof(LtChar)); if (Status != NDIS_STATUS_SUCCESS) { // Can only get here if something went wrong registering the MAC or // all of the adapters NdisTerminateWrapper(LtNdisWrapperHandle, DriverObject); } return Status; }