Something went wrong. Try again.
Reactos
Something went wrong. Try again.
2.4 kB · 93 lines
C
at master
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394/* * PROJECT: ReactOS Named Pipe FileSystem * LICENSE: BSD - See COPYING.ARM in the top level directory * FILE: drivers/filesystems/npfs/flushbuf.c * PURPOSE: Buffers Flushing Support * PROGRAMMERS: ReactOS Portable Systems Group */
/* INCLUDES *******************************************************************/
#include "npfs.h"
// File ID number for NPFS bugchecking support#define NPFS_BUGCHECK_FILE_ID (NPFS_BUGCHECK_FLUSHBUF)
/* FUNCTIONS ******************************************************************/
NTSTATUSNTAPINpCommonFlushBuffers(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp){ NODE_TYPE_CODE NodeTypeCode; PNP_CCB Ccb; ULONG NamedPipeEnd; NTSTATUS Status; PNP_DATA_QUEUE FlushQueue; PAGED_CODE();
NodeTypeCode = NpDecodeFileObject(IoGetCurrentIrpStackLocation(Irp)->FileObject, NULL, &Ccb, &NamedPipeEnd); if (NodeTypeCode != NPFS_NTC_CCB) return STATUS_PIPE_DISCONNECTED;
ExAcquireResourceExclusiveLite(&Ccb->NonPagedCcb->Lock, TRUE);
if (NamedPipeEnd == FILE_PIPE_SERVER_END) { FlushQueue = &Ccb->DataQueue[FILE_PIPE_OUTBOUND]; } else { FlushQueue = &Ccb->DataQueue[FILE_PIPE_INBOUND]; }
if (FlushQueue->QueueState == WriteEntries) { Status = NpAddDataQueueEntry(NamedPipeEnd, Ccb, FlushQueue, WriteEntries, 2, 0, Irp, NULL, 0); } else { Status = STATUS_SUCCESS; }
ExReleaseResourceLite(&Ccb->NonPagedCcb->Lock); return Status;}
NTSTATUSNTAPINpFsdFlushBuffers(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp){ NTSTATUS Status; PAGED_CODE();
FsRtlEnterFileSystem(); NpAcquireSharedVcb();
Status = NpCommonFlushBuffers(DeviceObject, Irp);
NpReleaseVcb(); FsRtlExitFileSystem();
if (Status != STATUS_PENDING) { Irp->IoStatus.Status = Status; IoCompleteRequest(Irp, IO_NAMED_PIPE_INCREMENT); }
return Status;}
/* EOF */