1 /* 2 * COPYRIGHT: See COPYING in the top level directory 3 * PROJECT: ReactOS NDIS User I/O driver 4 * FILE: createclose.c 5 * PURPOSE: IRP_MJ_CREATE and IRP_MJ_CLOSE handling 6 * PROGRAMMERS: Cameron Gutman (cameron.gutman@reactos.org) 7 */ 8 9 #include "ndisuio.h" 10 11 //#define NDEBUG 12 #include <debug.h> 13 14 NTSTATUS 15 NTAPI 16 NduDispatchCreate(PDEVICE_OBJECT DeviceObject, 17 PIRP Irp) 18 { 19 PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); 20 21 ASSERT(DeviceObject == GlobalDeviceObject); 22 23 DPRINT("Created file object 0x%x\n", IrpSp->FileObject); 24 25 /* This is associated with an adapter during IOCTL_NDISUIO_OPEN_(WRITE_)DEVICE */ 26 IrpSp->FileObject->FsContext = NULL; 27 IrpSp->FileObject->FsContext2 = NULL; 28 29 /* Completed successfully */ 30 Irp->IoStatus.Status = STATUS_SUCCESS; 31 Irp->IoStatus.Information = FILE_OPENED; 32 IoCompleteRequest(Irp, IO_NO_INCREMENT); 33 34 /* Return success */ 35 return STATUS_SUCCESS; 36 } 37 38 NTSTATUS 39 NTAPI 40 NduDispatchClose(PDEVICE_OBJECT DeviceObject, 41 PIRP Irp) 42 { 43 PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); 44 PNDISUIO_ADAPTER_CONTEXT AdapterContext = IrpSp->FileObject->FsContext; 45 PNDISUIO_OPEN_ENTRY OpenEntry = IrpSp->FileObject->FsContext2; 46 47 ASSERT(DeviceObject == GlobalDeviceObject); 48 49 DPRINT("Closing file object 0x%x\n", IrpSp->FileObject); 50 51 /* Check if this handle was ever associated with an adapter */ 52 if (AdapterContext != NULL) 53 { 54 ASSERT(OpenEntry != NULL); 55 56 DPRINT("Removing binding to adapter %wZ\n", &AdapterContext->DeviceName); 57 58 /* Call the our helper */ 59 DereferenceAdapterContextWithOpenEntry(AdapterContext, OpenEntry); 60 } 61 62 /* Completed */ 63 Irp->IoStatus.Status = STATUS_SUCCESS; 64 Irp->IoStatus.Information = 0; 65 IoCompleteRequest(Irp, IO_NO_INCREMENT); 66 67 /* Return success */ 68 return STATUS_SUCCESS; 69 } 70