ReactOS  0.4.14-dev-1007-g90d795b
createclose.c
Go to the documentation of this file.
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 
15 NTAPI
17  PIRP Irp)
18 {
20 
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;
33 
34  /* Return success */
35  return STATUS_SUCCESS;
36 }
37 
39 NTAPI
41  PIRP Irp)
42 {
44  PNDISUIO_ADAPTER_CONTEXT AdapterContext = IrpSp->FileObject->FsContext;
45  PNDISUIO_OPEN_ENTRY OpenEntry = IrpSp->FileObject->FsContext2;
46 
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;
66 
67  /* Return success */
68  return STATUS_SUCCESS;
69 }
VOID DereferenceAdapterContextWithOpenEntry(PNDISUIO_ADAPTER_CONTEXT AdapterContext, PNDISUIO_OPEN_ENTRY OpenEntry)
Definition: misc.c:149
NTSTATUS NTAPI NduDispatchCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp)
Definition: createclose.c:16
_In_ PIRP Irp
Definition: csq.h:116
LONG NTSTATUS
Definition: precomp.h:26
#define FILE_OPENED
Definition: nt_native.h:769
NTSTATUS NTAPI NduDispatchClose(PDEVICE_OBJECT DeviceObject, PIRP Irp)
Definition: createclose.c:40
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
Definition: ndisuio.h:53
smooth NULL
Definition: ftsmooth.c:416
#define IoCompleteRequest
Definition: irp.c:1240
void DPRINT(...)
Definition: polytest.cpp:61
UNICODE_STRING DeviceName
Definition: ndisuio.h:44
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
PDEVICE_OBJECT GlobalDeviceObject
Definition: main.c:14
IN PDEVICE_OBJECT DeviceObject
Definition: fatprocs.h:1560
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
Definition: iofuncs.h:2745
PFILE_OBJECT FileObject
Definition: iotypes.h:2813
_In_ PIO_STACK_LOCATION IrpSp
Definition: create.c:4157
#define IO_NO_INCREMENT
Definition: iotypes.h:566
return STATUS_SUCCESS
Definition: btrfs.c:2938