ReactOS 0.4.15-dev-7934-g1dc8d80
msfssup.c File Reference
#include "msfs.h"
#include <debug.h>
Include dependency graph for msfssup.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

VOID NTAPI MsfsInsertIrp (PIO_CSQ Csq, PIRP Irp)
 
VOID NTAPI MsfsRemoveIrp (PIO_CSQ Csq, PIRP Irp)
 
PIRP NTAPI MsfsPeekNextIrp (PIO_CSQ Csq, PIRP Irp, PVOID PeekContext)
 
VOID NTAPI MsfsAcquireLock (PIO_CSQ Csq, PKIRQL Irql)
 
VOID NTAPI MsfsReleaseLock (PIO_CSQ Csq, KIRQL Irql)
 
VOID NTAPI MsfsCompleteCanceledIrp (PIO_CSQ Csq, PIRP Irp)
 
VOID NTAPI MsfsTimeout (PKDPC Dpc, PVOID DeferredContext, PVOID SystemArgument1, PVOID SystemArgument2)
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 12 of file msfssup.c.

Function Documentation

◆ MsfsAcquireLock()

VOID NTAPI MsfsAcquireLock ( PIO_CSQ  Csq,
PKIRQL  Irql 
)

Definition at line 80 of file msfssup.c.

81{
83
84 Fcb = CONTAINING_RECORD(Csq, MSFS_FCB, CancelSafeQueue);
85 KeAcquireSpinLock(&Fcb->QueueLock, Irql);
86}
_In_ PFCB Fcb
Definition: cdprocs.h:159
_Out_ PKIRQL Irql
Definition: csq.h:179
IO_CSQ Csq
Definition: csqrtns.c:46
#define KeAcquireSpinLock(sl, irql)
Definition: env_spec_w32.h:609
Definition: msfs.h:25
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

◆ MsfsCompleteCanceledIrp()

VOID NTAPI MsfsCompleteCanceledIrp ( PIO_CSQ  Csq,
PIRP  Irp 
)

Definition at line 99 of file msfssup.c.

100{
101
103
104 Irp->IoStatus.Status = STATUS_CANCELLED;
105 Irp->IoStatus.Information = 0;
107}
_In_ PIRP Irp
Definition: csq.h:116
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
#define IoCompleteRequest
Definition: irp.c:1240
#define STATUS_CANCELLED
Definition: udferr_usr.h:170
#define IO_NO_INCREMENT
Definition: iotypes.h:598

◆ MsfsInsertIrp()

VOID NTAPI MsfsInsertIrp ( PIO_CSQ  Csq,
PIRP  Irp 
)

Definition at line 18 of file msfssup.c.

19{
21
22 Fcb = CONTAINING_RECORD(Csq, MSFS_FCB, CancelSafeQueue);
23 InsertTailList(&Fcb->PendingIrpQueue, &Irp->Tail.Overlay.ListEntry);
24}
#define InsertTailList(ListHead, Entry)

◆ MsfsPeekNextIrp()

PIRP NTAPI MsfsPeekNextIrp ( PIO_CSQ  Csq,
PIRP  Irp,
PVOID  PeekContext 
)

Definition at line 35 of file msfssup.c.

36{
38 PIRP NextIrp = NULL;
39 PLIST_ENTRY NextEntry, ListHead;
41
42 Fcb = CONTAINING_RECORD(Csq, MSFS_FCB, CancelSafeQueue);
43
44 ListHead = &Fcb->PendingIrpQueue;
45
46 if (Irp == NULL)
47 {
48 NextEntry = ListHead->Flink;
49 }
50 else
51 {
52 NextEntry = Irp->Tail.Overlay.ListEntry.Flink;
53 }
54
55 for (; NextEntry != ListHead; NextEntry = NextEntry->Flink)
56 {
57 NextIrp = CONTAINING_RECORD(NextEntry, IRP, Tail.Overlay.ListEntry);
58
60
61 if (PeekContext)
62 {
63 if (Stack->FileObject == (PFILE_OBJECT)PeekContext)
64 {
65 break;
66 }
67 }
68 else
69 {
70 break;
71 }
72
73 NextIrp = NULL;
74 }
75
76 return NextIrp;
77}
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
_In_opt_ PIRP _In_opt_ PVOID PeekContext
Definition: csq.h:160
#define NULL
Definition: types.h:112
Definition: typedefs.h:120
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
Definition: wdfrequest.h:639
* PFILE_OBJECT
Definition: iotypes.h:1998

◆ MsfsReleaseLock()

VOID NTAPI MsfsReleaseLock ( PIO_CSQ  Csq,
KIRQL  Irql 
)

Definition at line 90 of file msfssup.c.

91{
93
94 Fcb = CONTAINING_RECORD(Csq, MSFS_FCB, CancelSafeQueue);
95 KeReleaseSpinLock(&Fcb->QueueLock, Irql);
96}
#define KeReleaseSpinLock(sl, irql)
Definition: env_spec_w32.h:627

◆ MsfsRemoveIrp()

VOID NTAPI MsfsRemoveIrp ( PIO_CSQ  Csq,
PIRP  Irp 
)

Definition at line 27 of file msfssup.c.

28{
30
31 RemoveEntryList(&Irp->Tail.Overlay.ListEntry);
32}
#define RemoveEntryList(Entry)
Definition: env_spec_w32.h:986

◆ MsfsTimeout()

VOID NTAPI MsfsTimeout ( PKDPC  Dpc,
PVOID  DeferredContext,
PVOID  SystemArgument1,
PVOID  SystemArgument2 
)

Definition at line 110 of file msfssup.c.

114{
116 PIRP Irp;
117
119
120 /* Try to get the IRP */
121 Irp = IoCsqRemoveIrp(Context->Csq, &Context->CsqContext);
122 if (Irp != NULL)
123 {
124 /* It timed out, complete it (it's ours) and free context */
125 Irp->IoStatus.Status = STATUS_IO_TIMEOUT;
127 ExFreePoolWithTag(Context, 'NFsM');
128 }
129 else
130 {
131 /* We were racing with writing and failed, signal we're done */
133 }
134}
NTKERNELAPI PIRP NTAPI IoCsqRemoveIrp(_Inout_ PIO_CSQ Csq, _Inout_ PIO_CSQ_IRP_CONTEXT Context)
Remove anb IRP from the queue.
Definition: csq.c:326
#define FALSE
Definition: types.h:117
#define KeSetEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:476
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1109
struct _MSFS_DPC_CTX * PMSFS_DPC_CTX
#define STATUS_IO_TIMEOUT
Definition: udferr_usr.h:163
_In_opt_ PVOID DeferredContext
Definition: ketypes.h:687