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

Function Ext2Write

Ext4Fsd/write.c:1337–1423  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1335
1336
1337NTSTATUS
1338Ext2Write (IN PEXT2_IRP_CONTEXT IrpContext)
1339{
1340 NTSTATUS Status;
1341 PEXT2_FCBVCB FcbOrVcb;
1342 PDEVICE_OBJECT DeviceObject;
1343 PFILE_OBJECT FileObject;
1344 PEXT2_VCB Vcb;
1345 BOOLEAN bCompleteRequest = TRUE;
1346
1347 ASSERT(IrpContext);
1348
1349 ASSERT((IrpContext->Identifier.Type == EXT2ICX) &&
1350 (IrpContext->Identifier.Size == sizeof(EXT2_IRP_CONTEXT)));
1351
1352 __try {
1353
1354 if (IsFlagOn(IrpContext->MinorFunction, IRP_MN_COMPLETE)) {
1355
1356 Status = Ext2WriteComplete(IrpContext);
1357 bCompleteRequest = FALSE;
1358
1359 } else {
1360
1361 DeviceObject = IrpContext->DeviceObject;
1362 if (IsExt2FsDevice(DeviceObject)) {
1363 Status = STATUS_INVALID_DEVICE_REQUEST;
1364 __leave;
1365 }
1366 FileObject = IrpContext->FileObject;
1367
1368 Vcb = (PEXT2_VCB) DeviceObject->DeviceExtension;
1369
1370 if (Vcb->Identifier.Type != EXT2VCB ||
1371 Vcb->Identifier.Size != sizeof(EXT2_VCB) ) {
1372 Status = STATUS_INVALID_PARAMETER;
1373 __leave;
1374 }
1375
1376 if (IsVcbReadOnly(Vcb)) {
1377 Status = STATUS_MEDIA_WRITE_PROTECTED;
1378 __leave;
1379 }
1380
1381 if (FlagOn(Vcb->Flags, VCB_VOLUME_LOCKED) &&
1382 Vcb->LockFile != FileObject ) {
1383 Status = STATUS_ACCESS_DENIED;
1384 __leave;
1385 }
1386
1387 FcbOrVcb = (PEXT2_FCBVCB) FileObject->FsContext;
1388
1389 if (FcbOrVcb->Identifier.Type == EXT2VCB) {
1390
1391 Status = Ext2WriteVolume(IrpContext);
1392 if (!NT_SUCCESS(Status)) {
1393 DbgBreak();
1394 }

Callers 1

Ext2DispatchRequestFunction · 0.85

Calls 4

Ext2WriteCompleteFunction · 0.85
Ext2WriteVolumeFunction · 0.85
Ext2WriteFileFunction · 0.85
Ext2CompleteIrpContextFunction · 0.85

Tested by

no test coverage detected