MCPcopy Create free account
hub / github.com/bobranten/Ext4Fsd / Ext2Flush

Function Ext2Flush

Ext4Fsd/flush.c:143–277  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

141
142
143NTSTATUS
144Ext2Flush (IN PEXT2_IRP_CONTEXT IrpContext)
145{
146 NTSTATUS Status = STATUS_SUCCESS;
147
148 PIRP Irp = NULL;
149 PIO_STACK_LOCATION IrpSp = NULL;
150
151 PEXT2_VCB Vcb = NULL;
152 PEXT2_FCB Fcb = NULL;
153 PEXT2_FCBVCB FcbOrVcb = NULL;
154 PEXT2_CCB Ccb = NULL;
155 PFILE_OBJECT FileObject = NULL;
156
157 PDEVICE_OBJECT DeviceObject = NULL;
158
159 BOOLEAN MainResourceAcquired = FALSE;
160
161 __try {
162
163 ASSERT(IrpContext);
164
165 ASSERT((IrpContext->Identifier.Type == EXT2ICX) &&
166 (IrpContext->Identifier.Size == sizeof(EXT2_IRP_CONTEXT)));
167
168 DeviceObject = IrpContext->DeviceObject;
169
170 //
171 // This request is not allowed on the main device object
172 //
173 if (IsExt2FsDevice(DeviceObject)) {
174 Status = STATUS_INVALID_DEVICE_REQUEST;
175 __leave;
176 }
177
178 Vcb = (PEXT2_VCB) DeviceObject->DeviceExtension;
179 ASSERT(Vcb != NULL);
180 ASSERT((Vcb->Identifier.Type == EXT2VCB) &&
181 (Vcb->Identifier.Size == sizeof(EXT2_VCB)));
182
183 ASSERT(IsMounted(Vcb));
184 if (IsVcbReadOnly(Vcb)) {
185 Status = STATUS_SUCCESS;
186 __leave;
187 }
188
189 Irp = IrpContext->Irp;
190 IrpSp = IoGetCurrentIrpStackLocation(Irp);
191
192 FileObject = IrpContext->FileObject;
193 FcbOrVcb = (PEXT2_FCBVCB) FileObject->FsContext;
194 ASSERT(FcbOrVcb != NULL);
195
196 Ccb = (PEXT2_CCB) FileObject->FsContext2;
197 if (Ccb == NULL) {
198 Status = STATUS_SUCCESS;
199 __leave;
200 }

Callers 1

Ext2DispatchRequestFunction · 0.85

Calls 5

Ext2VerifyVcbFunction · 0.85
Ext2FlushFilesFunction · 0.85
Ext2FlushFileFunction · 0.85
Ext2CompleteIrpContextFunction · 0.85
Ext2FlushVolumeFunction · 0.70

Tested by

no test coverage detected