mirror of
https://github.com/reactos/reactos.git
synced 2025-04-20 12:29:56 +00:00
- Implement NdisMRegisterUnloadHandler, NdisMRegisterDevice, and NdisMDeregisterDevice
svn path=/trunk/; revision=40614
This commit is contained in:
parent
7a499db296
commit
cc5eedd8a0
3 changed files with 125 additions and 64 deletions
|
@ -34,6 +34,12 @@ typedef struct _NDIS_M_DRIVER_BLOCK {
|
||||||
} NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
|
} NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
|
||||||
#endif
|
#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 */
|
/* resources allocated on behalf on the miniport */
|
||||||
#define MINIPORT_RESOURCE_TYPE_MEMORY 0
|
#define MINIPORT_RESOURCE_TYPE_MEMORY 0
|
||||||
typedef struct _MINIPORT_RESOURCE {
|
typedef struct _MINIPORT_RESOURCE {
|
||||||
|
|
|
@ -226,26 +226,6 @@ NdisGetReceivedPacket(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @unimplemented
|
|
||||||
*/
|
|
||||||
NDIS_STATUS
|
|
||||||
EXPORT
|
|
||||||
NdisMDeregisterDevice(
|
|
||||||
IN NDIS_HANDLE NdisDeviceHandle)
|
|
||||||
/*
|
|
||||||
* FUNCTION:
|
|
||||||
* ARGUMENTS:
|
|
||||||
* NOTES:
|
|
||||||
* NDIS 5.0
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED
|
|
||||||
|
|
||||||
return NDIS_STATUS_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
|
@ -266,50 +246,6 @@ NdisMPromoteMiniport(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @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
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2664,5 +2664,124 @@ NdisMGetDeviceProperty(
|
||||||
*AllocatedResourcesTranslated = Adapter->NdisMiniportBlock.AllocatedResourcesTranslated;
|
*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 */
|
/* EOF */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue