Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}