2 * PROJECT: ReactOS Named Pipe FileSystem
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * FILE: drivers/filesystems/npfs/flushbuf.c
5 * PURPOSE: Buffers Flushing Support
6 * PROGRAMMERS: ReactOS Portable Systems Group
9 /* INCLUDES *******************************************************************/
13 // File ID number for NPFS bugchecking support
14 #define NPFS_BUGCHECK_FILE_ID (NPFS_BUGCHECK_FLUSHBUF)
16 /* FUNCTIONS ******************************************************************/
20 NpCommonFlushBuffers(IN PDEVICE_OBJECT DeviceObject
,
23 NODE_TYPE_CODE NodeTypeCode
;
27 PNP_DATA_QUEUE FlushQueue
;
30 NodeTypeCode
= NpDecodeFileObject(IoGetCurrentIrpStackLocation(Irp
)->FileObject
,
34 if (NodeTypeCode
!= NPFS_NTC_CCB
) return STATUS_PIPE_DISCONNECTED
;
36 ExAcquireResourceExclusiveLite(&Ccb
->NonPagedCcb
->Lock
, TRUE
);
38 if (NamedPipeEnd
== FILE_PIPE_SERVER_END
)
40 FlushQueue
= &Ccb
->DataQueue
[FILE_PIPE_OUTBOUND
];
44 FlushQueue
= &Ccb
->DataQueue
[FILE_PIPE_INBOUND
];
47 if (FlushQueue
->QueueState
== WriteEntries
)
49 Status
= NpAddDataQueueEntry(NamedPipeEnd
,
61 Status
= STATUS_SUCCESS
;
64 ExReleaseResourceLite(&Ccb
->NonPagedCcb
->Lock
);
70 NpFsdFlushBuffers(IN PDEVICE_OBJECT DeviceObject
,
76 FsRtlEnterFileSystem();
79 Status
= NpCommonFlushBuffers(DeviceObject
, Irp
);
82 FsRtlExitFileSystem();
84 if (Status
!= STATUS_PENDING
)
86 Irp
->IoStatus
.Status
= Status
;
87 IoCompleteRequest(Irp
, IO_NAMED_PIPE_INCREMENT
);