| 353 | } |
| 354 | |
| 355 | VOID |
| 356 | Ext2FreeCcb (IN PEXT2_VCB Vcb, IN PEXT2_CCB Ccb) |
| 357 | { |
| 358 | ASSERT(Ccb != NULL); |
| 359 | ASSERT((Ccb->Identifier.Type == EXT2CCB) && |
| 360 | (Ccb->Identifier.Size == sizeof(EXT2_CCB))); |
| 361 | |
| 362 | DEBUG(DL_RES, ( "Ext2FreeCcb: Ccb = %ph.\n", Ccb)); |
| 363 | |
| 364 | if (Ccb->SymLink) { |
| 365 | DEBUG(DL_INF, ( "Ext2FreeCcb: Ccb SymLink: %wZ.\n", |
| 366 | &Ccb->SymLink->FullName)); |
| 367 | if (IsFileDeleted(Ccb->SymLink->Target)) { |
| 368 | Ext2UnlinkMcb(Vcb, Ccb->SymLink); |
| 369 | Ext2DerefMcb(Ccb->SymLink); |
| 370 | Ext2LinkHeadMcb(Vcb, Ccb->SymLink); |
| 371 | } else { |
| 372 | Ext2DerefMcb(Ccb->SymLink); |
| 373 | } |
| 374 | } |
| 375 | |
| 376 | if (Ccb->DirectorySearchPattern.Buffer != NULL) { |
| 377 | DEC_MEM_COUNT(PS_DIR_PATTERN, Ccb->DirectorySearchPattern.Buffer, |
| 378 | Ccb->DirectorySearchPattern.MaximumLength ); |
| 379 | Ext2FreePool(Ccb->DirectorySearchPattern.Buffer, EXT2_DIRSP_MAGIC); |
| 380 | } |
| 381 | |
| 382 | ExFreeToNPagedLookasideList(&(Ext2Global->Ext2CcbLookasideList), Ccb); |
| 383 | DEC_MEM_COUNT(PS_CCB, Ccb, sizeof(EXT2_CCB)); |
| 384 | } |
| 385 | |
| 386 | PEXT2_INODE |
| 387 | Ext2AllocateInode (PEXT2_VCB Vcb) |
no test coverage detected