mirror of
https://github.com/reactos/reactos.git
synced 2024-11-09 08:08:38 +00:00
527f2f9057
* Create a branch for some evul shell experiments. svn path=/branches/shell-experiments/; revision=61927
79 lines
1.9 KiB
C
79 lines
1.9 KiB
C
/*
|
|
* PROJECT: ReactOS Named Pipe FileSystem
|
|
* LICENSE: BSD - See COPYING.ARM in the top level directory
|
|
* FILE: drivers/filesystems/npfs/cleanup.c
|
|
* PURPOSE: Pipes Cleanup
|
|
* PROGRAMMERS: ReactOS Portable Systems Group
|
|
*/
|
|
|
|
/* INCLUDES *******************************************************************/
|
|
|
|
#include "npfs.h"
|
|
|
|
// File ID number for NPFS bugchecking support
|
|
#define NPFS_BUGCHECK_FILE_ID (NPFS_BUGCHECK_CLEANUP)
|
|
|
|
/* FUNCTIONS ******************************************************************/
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
NpCommonCleanup(IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp)
|
|
{
|
|
PIO_STACK_LOCATION IoStack;
|
|
NODE_TYPE_CODE NodeTypeCode;
|
|
LIST_ENTRY DeferredList;
|
|
PNP_FCB Fcb;
|
|
PNP_CCB Ccb;
|
|
ULONG NamedPipeEnd;
|
|
PAGED_CODE();
|
|
|
|
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
|
InitializeListHead(&DeferredList);
|
|
|
|
NpAcquireExclusiveVcb();
|
|
NodeTypeCode = NpDecodeFileObject(IoStack->FileObject,
|
|
(PVOID*)&Fcb,
|
|
&Ccb,
|
|
&NamedPipeEnd);
|
|
if (NodeTypeCode == NPFS_NTC_CCB)
|
|
{
|
|
if (NamedPipeEnd == FILE_PIPE_SERVER_END)
|
|
{
|
|
ASSERT(Ccb->Fcb->ServerOpenCount != 0);
|
|
--Ccb->Fcb->ServerOpenCount;
|
|
}
|
|
|
|
NpSetClosingPipeState(Ccb, Irp, NamedPipeEnd, &DeferredList);
|
|
}
|
|
|
|
NpReleaseVcb();
|
|
NpCompleteDeferredIrps(&DeferredList);
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
NTSTATUS
|
|
NTAPI
|
|
NpFsdCleanup(IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp)
|
|
{
|
|
NTSTATUS Status;
|
|
PAGED_CODE();
|
|
|
|
FsRtlEnterFileSystem();
|
|
|
|
Status = NpCommonCleanup(DeviceObject, Irp);
|
|
|
|
FsRtlExitFileSystem();
|
|
|
|
if (Status != STATUS_PENDING)
|
|
{
|
|
Irp->IoStatus.Status = Status;
|
|
IoCompleteRequest(Irp, IO_NAMED_PIPE_INCREMENT);
|
|
}
|
|
|
|
return Status;
|
|
}
|
|
|
|
/* EOF */
|