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

Function Ext2LockControl

Ext4Fsd/lock.c:24–125  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

22#endif
23
24NTSTATUS
25Ext2LockControl (IN PEXT2_IRP_CONTEXT IrpContext)
26{
27 PDEVICE_OBJECT DeviceObject = NULL;
28 PFILE_OBJECT FileObject = NULL;
29 PEXT2_FCB Fcb = NULL;
30 PIRP Irp = NULL;
31
32 NTSTATUS Status = STATUS_UNSUCCESSFUL;
33 BOOLEAN CompleteContext = TRUE;
34 BOOLEAN CompleteIrp = TRUE;
35 BOOLEAN bFcbAcquired = FALSE;
36
37 __try {
38
39 ASSERT(IrpContext != NULL);
40
41 ASSERT((IrpContext->Identifier.Type == EXT2ICX) &&
42 (IrpContext->Identifier.Size == sizeof(EXT2_IRP_CONTEXT)));
43
44 DeviceObject = IrpContext->DeviceObject;
45
46 if (IsExt2FsDevice(DeviceObject)) {
47 Status = STATUS_INVALID_DEVICE_REQUEST;
48 __leave;
49 }
50
51 FileObject = IrpContext->FileObject;
52
53 Fcb = (PEXT2_FCB) FileObject->FsContext;
54 ASSERT(Fcb != NULL);
55 if (Fcb->Identifier.Type == EXT2VCB) {
56 Status = STATUS_INVALID_PARAMETER;
57 __leave;
58 }
59
60 ASSERT((Fcb->Identifier.Type == EXT2FCB) &&
61 (Fcb->Identifier.Size == sizeof(EXT2_FCB)));
62
63 if (FlagOn(Fcb->Mcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY)) {
64 Status = STATUS_INVALID_PARAMETER;
65 __leave;
66 }
67
68 ExAcquireResourceSharedLite(&Fcb->MainResource, TRUE);
69 bFcbAcquired = TRUE;
70
71 Irp = IrpContext->Irp;
72
73 CompleteIrp = FALSE;
74
75 Status = FsRtlCheckOplock( &Fcb->Oplock,
76 Irp,
77 IrpContext,
78 Ext2OplockComplete,
79 NULL );
80
81 if (Status != STATUS_SUCCESS) {

Callers 1

Ext2DispatchRequestFunction · 0.85

Calls 2

Ext2IsFastIoPossibleFunction · 0.85
Ext2CompleteIrpContextFunction · 0.85

Tested by

no test coverage detected