| 91 | } |
| 92 | |
| 93 | NTSTATUS |
| 94 | Ext2LockVcb (IN PEXT2_VCB Vcb, |
| 95 | IN PFILE_OBJECT FileObject) |
| 96 | { |
| 97 | NTSTATUS Status = STATUS_SUCCESS; |
| 98 | |
| 99 | __try { |
| 100 | |
| 101 | if (FlagOn(Vcb->Flags, VCB_VOLUME_LOCKED)) { |
| 102 | DEBUG(DL_INF, ( "Ext2LockVolume: Volume is already locked.\n")); |
| 103 | Status = STATUS_ACCESS_DENIED; |
| 104 | __leave; |
| 105 | } |
| 106 | |
| 107 | if (Vcb->OpenHandleCount > (ULONG)(FileObject ? 1 : 0)) { |
| 108 | DEBUG(DL_INF, ( "Ext2LockVcb: There are still opened files.\n")); |
| 109 | |
| 110 | Status = STATUS_ACCESS_DENIED; |
| 111 | __leave; |
| 112 | } |
| 113 | |
| 114 | if (!Ext2IsHandleCountZero(Vcb)) { |
| 115 | DEBUG(DL_INF, ( "Ext2LockVcb: Thare are still opened files.\n")); |
| 116 | |
| 117 | Status = STATUS_ACCESS_DENIED; |
| 118 | __leave; |
| 119 | } |
| 120 | |
| 121 | SetLongFlag(Vcb->Flags, VCB_VOLUME_LOCKED); |
| 122 | Ext2SetVpbFlag(Vcb->Vpb, VPB_LOCKED); |
| 123 | Vcb->LockFile = FileObject; |
| 124 | |
| 125 | DEBUG(DL_INF, ( "Ext2LockVcb: Volume locked.\n")); |
| 126 | |
| 127 | } __finally { |
| 128 | // Nothing |
| 129 | } |
| 130 | |
| 131 | return Status; |
| 132 | } |
| 133 | |
| 134 | |
| 135 | NTSTATUS |
no test coverage detected