mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 19:35:44 +00:00
[MSFS]
Addendum to r69475 svn path=/trunk/; revision=69476
This commit is contained in:
parent
ead10526aa
commit
a5031d7982
1 changed files with 130 additions and 0 deletions
130
reactos/drivers/filesystems/msfs/msfssup.c
Normal file
130
reactos/drivers/filesystems/msfs/msfssup.c
Normal file
|
@ -0,0 +1,130 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: drivers/filesystems/msfs/msfssup.c
|
||||
* PURPOSE: Mailslot filesystem
|
||||
* PROGRAMMER: Nikita Pechenkin (n.pechenkin@mail.ru)
|
||||
*/
|
||||
|
||||
/* INCLUDES ******************************************************************/
|
||||
#include "msfs.h"
|
||||
|
||||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
VOID NTAPI
|
||||
MsfsInsertIrp(PIO_CSQ Csq, PIRP Irp)
|
||||
{
|
||||
PMSFS_FCB Fcb;
|
||||
|
||||
Fcb = CONTAINING_RECORD(Csq, MSFS_FCB, CancelSafeQueue);
|
||||
InsertTailList(&Fcb->PendingIrpQueue, &Irp->Tail.Overlay.ListEntry);
|
||||
}
|
||||
|
||||
VOID NTAPI
|
||||
MsfsRemoveIrp(PIO_CSQ Csq, PIRP Irp)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(Csq);
|
||||
|
||||
RemoveEntryList(&Irp->Tail.Overlay.ListEntry);
|
||||
}
|
||||
|
||||
PIRP NTAPI
|
||||
MsfsPeekNextIrp(PIO_CSQ Csq, PIRP Irp, PVOID PeekContext)
|
||||
{
|
||||
PMSFS_FCB Fcb;
|
||||
PIRP NextIrp = NULL;
|
||||
PLIST_ENTRY NextEntry, ListHead;
|
||||
PIO_STACK_LOCATION Stack;
|
||||
|
||||
Fcb = CONTAINING_RECORD(Csq, MSFS_FCB, CancelSafeQueue);
|
||||
|
||||
ListHead = &Fcb->PendingIrpQueue;
|
||||
|
||||
if (Irp == NULL)
|
||||
{
|
||||
NextEntry = ListHead->Flink;
|
||||
}
|
||||
else
|
||||
{
|
||||
NextEntry = Irp->Tail.Overlay.ListEntry.Flink;
|
||||
}
|
||||
|
||||
for (; NextEntry != ListHead; NextEntry = NextEntry->Flink)
|
||||
{
|
||||
NextIrp = CONTAINING_RECORD(NextEntry, IRP, Tail.Overlay.ListEntry);
|
||||
|
||||
Stack = IoGetCurrentIrpStackLocation(NextIrp);
|
||||
|
||||
if (PeekContext)
|
||||
{
|
||||
if (Stack->FileObject == (PFILE_OBJECT)PeekContext)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
NextIrp = NULL;
|
||||
}
|
||||
|
||||
return NextIrp;
|
||||
}
|
||||
|
||||
VOID NTAPI
|
||||
MsfsAcquireLock(PIO_CSQ Csq, PKIRQL Irql)
|
||||
{
|
||||
PMSFS_FCB Fcb;
|
||||
|
||||
Fcb = CONTAINING_RECORD(Csq, MSFS_FCB, CancelSafeQueue);
|
||||
KeAcquireSpinLock(&Fcb->QueueLock, Irql);
|
||||
}
|
||||
|
||||
|
||||
VOID NTAPI
|
||||
MsfsReleaseLock(PIO_CSQ Csq, KIRQL Irql)
|
||||
{
|
||||
PMSFS_FCB Fcb;
|
||||
|
||||
Fcb = CONTAINING_RECORD(Csq, MSFS_FCB, CancelSafeQueue);
|
||||
KeReleaseSpinLock(&Fcb->QueueLock, Irql);
|
||||
}
|
||||
|
||||
VOID NTAPI
|
||||
MsfsCompleteCanceledIrp(PIO_CSQ Csq, PIRP Irp)
|
||||
{
|
||||
|
||||
UNREFERENCED_PARAMETER(Csq);
|
||||
|
||||
Irp->IoStatus.Status = STATUS_CANCELLED;
|
||||
Irp->IoStatus.Information = 0;
|
||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
}
|
||||
|
||||
VOID NTAPI
|
||||
MsfsTimeout(PKDPC Dpc,
|
||||
PVOID DeferredContext,
|
||||
PVOID SystemArgument1,
|
||||
PVOID SystemArgument2)
|
||||
{
|
||||
PMSFS_DPC_CTX Context;
|
||||
PIRP Irp;
|
||||
|
||||
Context = (PMSFS_DPC_CTX)DeferredContext;
|
||||
|
||||
Irp = IoCsqRemoveIrp(Context->Csq, &Context->CsqContext);
|
||||
if (Irp != NULL)
|
||||
{
|
||||
Irp->IoStatus.Status = STATUS_IO_TIMEOUT;
|
||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
}
|
||||
|
||||
ExFreePool(Context);
|
||||
}
|
||||
|
||||
/* EOF */
|
Loading…
Add table
Add a link
Reference in a new issue