2 * PROJECT: ReactOS Named Pipe FileSystem
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * FILE: drivers/filesystems/npfs/cleanup.c
5 * PURPOSE: Pipes Cleanup
6 * PROGRAMMERS: ReactOS Portable Systems Group
9 /* INCLUDES *******************************************************************/
13 /* FUNCTIONS ******************************************************************/
17 NpCommonCleanup(IN PDEVICE_OBJECT DeviceObject
,
20 PIO_STACK_LOCATION IoStack
;
21 NODE_TYPE_CODE NodeTypeCode
;
22 LIST_ENTRY DeferredList
;
28 IoStack
= IoGetCurrentIrpStackLocation(Irp
);
29 InitializeListHead(&DeferredList
);
31 NpAcquireExclusiveVcb();
32 NodeTypeCode
= NpDecodeFileObject(IoStack
->FileObject
,
36 if (NodeTypeCode
== NPFS_NTC_CCB
)
38 if (NamedPipeEnd
== FILE_PIPE_SERVER_END
)
40 ASSERT(Ccb
->Fcb
->ServerOpenCount
!= 0);
41 --Ccb
->Fcb
->ServerOpenCount
;
44 NpSetClosingPipeState(Ccb
, Irp
, NamedPipeEnd
, &DeferredList
);
48 NpCompleteDeferredIrps(&DeferredList
);
50 return STATUS_SUCCESS
;
55 NpFsdCleanup(IN PDEVICE_OBJECT DeviceObject
,
61 FsRtlEnterFileSystem();
63 Status
= NpCommonCleanup(DeviceObject
, Irp
);
65 FsRtlExitFileSystem();
67 if (Status
!= STATUS_PENDING
)
69 Irp
->IoStatus
.Status
= Status
;
70 IoCompleteRequest(Irp
, IO_NAMED_PIPE_INCREMENT
);