/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS NDIS User I/O driver * FILE: createclose.c * PURPOSE: IRP_MJ_CREATE and IRP_MJ_CLOSE handling * PROGRAMMERS: Cameron Gutman (cameron.gutman@reactos.org) */ #include "ndisuio.h" //#define NDEBUG #include NTSTATUS NTAPI NduDispatchCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp) { PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); ASSERT(DeviceObject == GlobalDeviceObject); DPRINT("Created file object 0x%x\n", IrpSp->FileObject); /* This is associated with an adapter during IOCTL_NDISUIO_OPEN_(WRITE_)DEVICE */ IrpSp->FileObject->FsContext = NULL; IrpSp->FileObject->FsContext2 = NULL; /* Completed successfully */ Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Information = FILE_OPENED; IoCompleteRequest(Irp, IO_NO_INCREMENT); /* Return success */ return STATUS_SUCCESS; } NTSTATUS NTAPI NduDispatchClose(PDEVICE_OBJECT DeviceObject, PIRP Irp) { PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); PNDISUIO_ADAPTER_CONTEXT AdapterContext = IrpSp->FileObject->FsContext; PNDISUIO_OPEN_ENTRY OpenEntry = IrpSp->FileObject->FsContext2; ASSERT(DeviceObject == GlobalDeviceObject); DPRINT("Closing file object 0x%x\n", IrpSp->FileObject); /* Check if this handle was ever associated with an adapter */ if (AdapterContext != NULL) { ASSERT(OpenEntry != NULL); DPRINT("Removing binding to adapter %wZ\n", &AdapterContext->DeviceName); /* Call the our helper */ DereferenceAdapterContextWithOpenEntry(AdapterContext, OpenEntry); } /* Completed */ Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Information = 0; IoCompleteRequest(Irp, IO_NO_INCREMENT); /* Return success */ return STATUS_SUCCESS; }