| 1265 | } |
| 1266 | |
| 1267 | NTSTATUS |
| 1268 | Ext2SetDispositionInfo( |
| 1269 | PEXT2_IRP_CONTEXT IrpContext, |
| 1270 | PEXT2_VCB Vcb, |
| 1271 | PEXT2_FCB Fcb, |
| 1272 | PEXT2_CCB Ccb, |
| 1273 | BOOLEAN bDelete |
| 1274 | ) |
| 1275 | { |
| 1276 | PIRP Irp = IrpContext->Irp; |
| 1277 | PIO_STACK_LOCATION IrpSp; |
| 1278 | NTSTATUS status = STATUS_SUCCESS; |
| 1279 | PEXT2_MCB Mcb = Fcb->Mcb; |
| 1280 | |
| 1281 | IrpSp = IoGetCurrentIrpStackLocation(Irp); |
| 1282 | |
| 1283 | DEBUG(DL_INF, ( "Ext2SetDispositionInfo: bDelete=%x\n", bDelete)); |
| 1284 | |
| 1285 | if (bDelete) { |
| 1286 | |
| 1287 | DEBUG(DL_INF, ( "Ext2SetDispositionInformation: Removing %wZ.\n", |
| 1288 | &Mcb->FullName)); |
| 1289 | |
| 1290 | if (Ccb->SymLink || IsInodeSymLink(&Mcb->Inode)) { |
| 1291 | /* always allow deleting on symlinks */ |
| 1292 | } else { |
| 1293 | status = Ext2IsFileRemovable(IrpContext, Vcb, Fcb, Ccb); |
| 1294 | } |
| 1295 | |
| 1296 | if (NT_SUCCESS(status)) { |
| 1297 | SetLongFlag(Fcb->Flags, FCB_DELETE_PENDING); |
| 1298 | IrpSp->FileObject->DeletePending = TRUE; |
| 1299 | } |
| 1300 | |
| 1301 | } else { |
| 1302 | |
| 1303 | ClearLongFlag(Fcb->Flags, FCB_DELETE_PENDING); |
| 1304 | IrpSp->FileObject->DeletePending = FALSE; |
| 1305 | } |
| 1306 | |
| 1307 | return status; |
| 1308 | } |
| 1309 | |
| 1310 | NTSTATUS |
| 1311 | Ext2SetRenameInfo( |
no test coverage detected