mirror of
https://github.com/reactos/reactos.git
synced 2025-04-20 20:36:35 +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;
|
||||
#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
|
||||
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
|
||||
*/
|
||||
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -2664,5 +2664,124 @@ NdisMGetDeviceProperty(
|
|||
*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 */
|
||||
|
||||
|
|
Loading…
Reference in a new issue