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/inclu…
==============================================================================
--- 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/…
==============================================================================
--- 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/…
==============================================================================
--- 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 */