MCPcopy Create free account
hub / github.com/bobranten/Ext4Fsd / Ext2AllocateMcb

Function Ext2AllocateMcb

Ext4Fsd/memory.c:1427–1533  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1425}
1426
1427PEXT2_MCB
1428Ext2AllocateMcb (
1429 IN PEXT2_VCB Vcb,
1430 IN PUNICODE_STRING FileName,
1431 IN PUNICODE_STRING Parent,
1432 IN ULONG FileAttr
1433)
1434{
1435 PEXT2_MCB Mcb = NULL;
1436 NTSTATUS Status = STATUS_SUCCESS;
1437
1438 /* need wake the reaper thread if there are many Mcb allocated */
1439 if (Ext2Global->PerfStat.Current.Mcb > (((ULONG)Ext2Global->MaxDepth) * 4)) {
1440 KeSetEvent(&Ext2Global->McbReaper.Wait, 0, FALSE);
1441 }
1442
1443 /* allocate Mcb from LookasideList */
1444 Mcb = (PEXT2_MCB) (ExAllocateFromNPagedLookasideList(
1445 &(Ext2Global->Ext2McbLookasideList)));
1446
1447 if (Mcb == NULL) {
1448 return NULL;
1449 }
1450
1451 /* initialize Mcb header */
1452 RtlZeroMemory(Mcb, sizeof(EXT2_MCB));
1453 Mcb->Identifier.Type = EXT2MCB;
1454 Mcb->Identifier.Size = sizeof(EXT2_MCB);
1455 Mcb->FileAttr = FileAttr;
1456
1457 Mcb->Inode.i_priv = (PVOID)Mcb;
1458 Mcb->Inode.i_sb = &Vcb->sb;
1459
1460 /* initialize Mcb names */
1461 if (FileName) {
1462
1463#if EXT2_DEBUG
1464 if ( FileName->Length == 2 &&
1465 FileName->Buffer[0] == L'\\') {
1466 DEBUG(DL_RES, ( "Ext2AllocateMcb: Root Mcb is to be created !\n"));
1467 }
1468
1469 if ( FileName->Length == 2 &&
1470 FileName->Buffer[0] == L'.') {
1471 DbgBreak();
1472 }
1473
1474 if ( FileName->Length == 4 &&
1475 FileName->Buffer[0] == L'.' &&
1476 FileName->Buffer[1] == L'.' ) {
1477 DbgBreak();
1478 }
1479#endif
1480
1481 if (( FileName->Length >= 4 && FileName->Buffer[0] == L'.') &&
1482 ((FileName->Length == 4 && FileName->Buffer[1] != L'.') ||
1483 FileName->Length >= 6 )) {
1484 SetFlag(Mcb->FileAttr, FILE_ATTRIBUTE_HIDDEN);

Callers 3

Ext2InitializeVcbFunction · 0.85
Ext2LookupFileFunction · 0.85
Ext2LoadInternalJournalFunction · 0.85

Calls 2

Ext2BuildNameFunction · 0.85
Ext2FreePoolFunction · 0.85

Tested by

no test coverage detected