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 // File ID number for NPFS bugchecking support
14 #define NPFS_BUGCHECK_FILE_ID (NPFS_BUGCHECK_CLEANUP)
16 /* FUNCTIONS ******************************************************************/
20 NpCommonCleanup(IN PDEVICE_OBJECT DeviceObject
,
23 PIO_STACK_LOCATION IoStack
;
24 NODE_TYPE_CODE NodeTypeCode
;
25 LIST_ENTRY DeferredList
;
31 IoStack
= IoGetCurrentIrpStackLocation(Irp
);
32 InitializeListHead(&DeferredList
);
34 NpAcquireExclusiveVcb();
35 NodeTypeCode
= NpDecodeFileObject(IoStack
->FileObject
,
39 if (NodeTypeCode
== NPFS_NTC_CCB
)
41 if (NamedPipeEnd
== FILE_PIPE_SERVER_END
)
43 ASSERT(Ccb
->Fcb
->ServerOpenCount
!= 0);
44 --Ccb
->Fcb
->ServerOpenCount
;
47 NpSetClosingPipeState(Ccb
, Irp
, NamedPipeEnd
, &DeferredList
);
51 NpCompleteDeferredIrps(&DeferredList
);
53 return STATUS_SUCCESS
;
58 NpFsdCleanup(IN PDEVICE_OBJECT DeviceObject
,
64 FsRtlEnterFileSystem();
66 Status
= NpCommonCleanup(DeviceObject
, Irp
);
68 FsRtlExitFileSystem();
70 if (Status
!= STATUS_PENDING
)
72 Irp
->IoStatus
.Status
= Status
;
73 IoCompleteRequest(Irp
, IO_NAMED_PIPE_INCREMENT
);