PFFS_MCB FFSSearchMcb( PFFS_VCB Vcb, PFFS_MCB Parent, PUNICODE_STRING FileName) { PFFS_MCB TmpMcb = Parent->Child; while (TmpMcb) { if (!RtlCompareUnicodeString( &(TmpMcb->ShortName), FileName, TRUE)) break; TmpMcb = TmpMcb->Next; } if (TmpMcb) { FFSRefreshMcb(Vcb, TmpMcb); } return TmpMcb; }
PFFS_MCB FFSSearchMcbTree( PFFS_VCB Vcb, PFFS_MCB FFSMcb, ULONG Inode) { PFFS_MCB Mcb = NULL; PLIST_ENTRY List = NULL; BOOLEAN bFind = FALSE; PAGED_CODE(); List = Vcb->McbList.Flink; while ((!bFind) && (List != &(Vcb->McbList))) { Mcb = CONTAINING_RECORD(List, FFS_MCB, Link); List = List->Flink; if (Mcb->Inode == Inode) { bFind = TRUE; break; } } if (bFind) { ASSERT(Mcb != NULL); FFSRefreshMcb(Vcb, Mcb); } else { Mcb = NULL; } return Mcb; }