Author: cgutman Date: Tue Apr 21 00:59:40 2009 New Revision: 40614
URL: http://svn.reactos.org/svn/reactos?rev=40614&view=rev Log: - Implement NdisMRegisterUnloadHandler, NdisMRegisterDevice, and NdisMDeregisterDevice
Modified: trunk/reactos/drivers/network/ndis/include/miniport.h trunk/reactos/drivers/network/ndis/ndis/50stubs.c trunk/reactos/drivers/network/ndis/ndis/miniport.c
Modified: trunk/reactos/drivers/network/ndis/include/miniport.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/ndis/includ... ============================================================================== --- trunk/reactos/drivers/network/ndis/include/miniport.h [iso-8859-1] (original) +++ trunk/reactos/drivers/network/ndis/include/miniport.h [iso-8859-1] Tue Apr 21 00:59:40 2009 @@ -33,6 +33,12 @@ #else } NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK; #endif + +/* There must be some defined struct to do this... */ +typedef struct _NDIS_M_DEVICE_BLOCK { + PDEVICE_OBJECT DeviceObject; + PNDIS_STRING SymbolicName; +} NDIS_M_DEVICE_BLOCK, *PNDIS_M_DEVICE_BLOCK;
/* resources allocated on behalf on the miniport */ #define MINIPORT_RESOURCE_TYPE_MEMORY 0
Modified: trunk/reactos/drivers/network/ndis/ndis/50stubs.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/ndis/ndis/5... ============================================================================== --- trunk/reactos/drivers/network/ndis/ndis/50stubs.c [iso-8859-1] (original) +++ trunk/reactos/drivers/network/ndis/ndis/50stubs.c [iso-8859-1] Tue Apr 21 00:59:40 2009 @@ -231,26 +231,6 @@ */ NDIS_STATUS EXPORT -NdisMDeregisterDevice( - IN NDIS_HANDLE NdisDeviceHandle) -/* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 5.0 - */ -{ - UNIMPLEMENTED - - return NDIS_STATUS_FAILURE; -} - - -/* - * @unimplemented - */ -NDIS_STATUS -EXPORT NdisMPromoteMiniport( IN NDIS_HANDLE MiniportAdapterHandle) /* @@ -263,50 +243,6 @@ UNIMPLEMENTED
return NDIS_STATUS_FAILURE; -} - - -/* - * @unimplemented - */ -NDIS_STATUS -EXPORT -NdisMRegisterDevice( - IN NDIS_HANDLE NdisWrapperHandle, - IN PNDIS_STRING DeviceName, - IN PNDIS_STRING SymbolicName, - IN PDRIVER_DISPATCH MajorFunctions[], - OUT PDEVICE_OBJECT *pDeviceObject, - OUT NDIS_HANDLE *NdisDeviceHandle) -/* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 5.0 - */ -{ - UNIMPLEMENTED - - return NDIS_STATUS_FAILURE; -} - - -/* - * @unimplemented - */ -VOID -EXPORT -NdisMRegisterUnloadHandler( - IN NDIS_HANDLE NdisWrapperHandle, - IN PDRIVER_UNLOAD UnloadHandler) -/* - * FUNCTION: - * ARGUMENTS: - * NOTES: - * NDIS 5.0 - */ -{ - UNIMPLEMENTED }
Modified: trunk/reactos/drivers/network/ndis/ndis/miniport.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/ndis/ndis/m... ============================================================================== --- trunk/reactos/drivers/network/ndis/ndis/miniport.c [iso-8859-1] (original) +++ trunk/reactos/drivers/network/ndis/ndis/miniport.c [iso-8859-1] Tue Apr 21 00:59:40 2009 @@ -2664,5 +2664,124 @@ *AllocatedResourcesTranslated = Adapter->NdisMiniportBlock.AllocatedResourcesTranslated; }
+/* + * @implemented + */ +VOID +EXPORT +NdisMRegisterUnloadHandler( + IN NDIS_HANDLE NdisWrapperHandle, + IN PDRIVER_UNLOAD UnloadHandler) +/* + * FUNCTION: + * ARGUMENTS: + * NOTES: + * NDIS 5.0 + */ +{ + PNDIS_M_DRIVER_BLOCK DriverBlock = NdisWrapperHandle; + + NDIS_DbgPrint(MAX_TRACE, ("Miniport registered unload handler\n")); + + DriverBlock->DriverObject->DriverUnload = UnloadHandler; +} + +/* + * @implemented + */ +NDIS_STATUS +EXPORT +NdisMRegisterDevice( + IN NDIS_HANDLE NdisWrapperHandle, + IN PNDIS_STRING DeviceName, + IN PNDIS_STRING SymbolicName, + IN PDRIVER_DISPATCH MajorFunctions[], + OUT PDEVICE_OBJECT *pDeviceObject, + OUT NDIS_HANDLE *NdisDeviceHandle) +/* + * FUNCTION: + * ARGUMENTS: + * NOTES: + * NDIS 5.0 + */ +{ + PNDIS_M_DRIVER_BLOCK DriverBlock = NdisWrapperHandle; + PNDIS_M_DEVICE_BLOCK DeviceBlock; + PDEVICE_OBJECT DeviceObject; + NDIS_STATUS Status; + UINT i; + + NDIS_DbgPrint(MAX_TRACE, ("Called\n")); + + Status = IoCreateDevice(DriverBlock->DriverObject, + 0, /* This space is reserved for us. Should we use it? */ + DeviceName, + FILE_DEVICE_NETWORK, + 0, + FALSE, + &DeviceObject); + + if (!NT_SUCCESS(Status)) + { + return Status; + } + + Status = IoCreateSymbolicLink(SymbolicName, DeviceName); + + if (!NT_SUCCESS(Status)) + { + IoDeleteDevice(DeviceObject); + return Status; + } + + DeviceBlock = ExAllocatePool(NonPagedPool, sizeof(NDIS_M_DEVICE_BLOCK)); + + if (!DeviceBlock) + { + IoDeleteDevice(DeviceObject); + IoDeleteSymbolicLink(SymbolicName); + return NDIS_STATUS_RESOURCES; + } + + for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) + DriverBlock->DriverObject->MajorFunction[i] = MajorFunctions[i]; + + DriverBlock->DriverObject->MajorFunction[IRP_MJ_PNP] = NdisIDispatchPnp; + DriverBlock->DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = NdisIShutdown; + + DeviceBlock->DeviceObject = DeviceObject; + DeviceBlock->SymbolicName = SymbolicName; + + *pDeviceObject = DeviceObject; + *NdisDeviceHandle = DeviceBlock; + + return NDIS_STATUS_SUCCESS; +} + +/* + * @implemented + */ +NDIS_STATUS +EXPORT +NdisMDeregisterDevice( + IN NDIS_HANDLE NdisDeviceHandle) +/* + * FUNCTION: + * ARGUMENTS: + * NOTES: + * NDIS 5.0 + */ +{ + PNDIS_M_DEVICE_BLOCK DeviceBlock = NdisDeviceHandle; + + IoDeleteDevice(DeviceBlock->DeviceObject); + + IoDeleteSymbolicLink(DeviceBlock->SymbolicName); + + ExFreePool(DeviceBlock); + + return NDIS_STATUS_SUCCESS; +} + /* EOF */