| 141 | |
| 142 | |
| 143 | NTSTATUS |
| 144 | Ext2Flush (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 | } |
no test coverage detected