mirror of
https://github.com/reactos/reactos.git
synced 2024-09-30 22:47:28 +00:00
[NTOSKRNL]
Add CmpDestroySecurityCache() and CmpDestroyHiveViewList() stubs and call them in CmpDestroyHive and CmUnloadKey(). CORE-6492 #resolve #comment Thank you Hermes! This is exactly what I needed! svn path=/trunk/; revision=68313
This commit is contained in:
parent
223bd478e0
commit
3a7d34ee38
|
@ -2241,7 +2241,11 @@ CmUnloadKey(IN PCM_KEY_CONTROL_BLOCK Kcb,
|
||||||
/* Remove the hive from the hive file list */
|
/* Remove the hive from the hive file list */
|
||||||
CmpRemoveFromHiveFileList(CmHive);
|
CmpRemoveFromHiveFileList(CmHive);
|
||||||
|
|
||||||
/* FIXME: More cleanup */
|
/* Destroy the security descriptor cache */
|
||||||
|
CmpDestroySecurityCache(CmHive);
|
||||||
|
|
||||||
|
/* Destroy the view list */
|
||||||
|
CmpDestroyHiveViewList(CmHive);
|
||||||
|
|
||||||
/* Free the hive storage */
|
/* Free the hive storage */
|
||||||
HvFree(Hive);
|
HvFree(Hive);
|
||||||
|
|
|
@ -257,6 +257,12 @@ CmpDestroyHive(IN PCMHIVE CmHive)
|
||||||
/* Delete the view lock */
|
/* Delete the view lock */
|
||||||
ExFreePoolWithTag(CmHive->ViewLock, TAG_CM);
|
ExFreePoolWithTag(CmHive->ViewLock, TAG_CM);
|
||||||
|
|
||||||
|
/* Destroy the security descriptor cache */
|
||||||
|
CmpDestroySecurityCache(CmHive);
|
||||||
|
|
||||||
|
/* Destroy the view list */
|
||||||
|
CmpDestroyHiveViewList(CmHive);
|
||||||
|
|
||||||
/* Free the hive storage */
|
/* Free the hive storage */
|
||||||
HvFree(&CmHive->Hive);
|
HvFree(&CmHive->Hive);
|
||||||
|
|
||||||
|
|
|
@ -29,3 +29,54 @@ CmpInitHiveViewList(IN PCMHIVE Hive)
|
||||||
Hive->PinnedViews = 0;
|
Hive->PinnedViews = 0;
|
||||||
Hive->UseCount = 0;
|
Hive->UseCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
CmpDestroyHiveViewList(IN PCMHIVE Hive)
|
||||||
|
{
|
||||||
|
PCM_VIEW_OF_FILE CmView;
|
||||||
|
PLIST_ENTRY EntryList;
|
||||||
|
|
||||||
|
/* Do NOT destroy the views of read-only hives */
|
||||||
|
ASSERT(Hive->Hive.ReadOnly == FALSE);
|
||||||
|
|
||||||
|
/* Free all the views inside the Pinned View List */
|
||||||
|
EntryList = RemoveHeadList(&Hive->PinViewListHead);
|
||||||
|
while (EntryList != &Hive->PinViewListHead)
|
||||||
|
{
|
||||||
|
CmView = CONTAINING_RECORD(EntryList, CM_VIEW_OF_FILE, PinViewList);
|
||||||
|
|
||||||
|
/* FIXME: Unmap the view if it is mapped */
|
||||||
|
|
||||||
|
ExFreePool(CmView);
|
||||||
|
|
||||||
|
Hive->PinnedViews--;
|
||||||
|
|
||||||
|
EntryList = RemoveHeadList(&Hive->PinViewListHead);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The Pinned View List should be empty */
|
||||||
|
ASSERT(IsListEmpty(&Hive->PinViewListHead) == TRUE);
|
||||||
|
ASSERT(Hive->PinnedViews == 0);
|
||||||
|
|
||||||
|
/* Now, free all the views inside the LRU View List */
|
||||||
|
EntryList = RemoveHeadList(&Hive->LRUViewListHead);
|
||||||
|
while (EntryList != &Hive->LRUViewListHead)
|
||||||
|
{
|
||||||
|
CmView = CONTAINING_RECORD(EntryList, CM_VIEW_OF_FILE, LRUViewList);
|
||||||
|
|
||||||
|
/* FIXME: Unmap the view if it is mapped */
|
||||||
|
|
||||||
|
ExFreePool(CmView);
|
||||||
|
|
||||||
|
Hive->MappedViews--;
|
||||||
|
|
||||||
|
EntryList = RemoveHeadList(&Hive->LRUViewListHead);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The LRU View List should be empty */
|
||||||
|
ASSERT(IsListEmpty(&Hive->LRUViewListHead) == TRUE);
|
||||||
|
ASSERT(Hive->MappedViews == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* EOF */
|
||||||
|
|
|
@ -35,3 +35,18 @@ CmpInitSecurityCache(IN PCMHIVE Hive)
|
||||||
InitializeListHead(&Hive->SecurityHash[i]);
|
InitializeListHead(&Hive->SecurityHash[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
CmpDestroySecurityCache(IN PCMHIVE Hive)
|
||||||
|
{
|
||||||
|
/* FIXME: clean Hive->SecurityHash and/or Hive->SecurityCache */
|
||||||
|
|
||||||
|
/* Reset data */
|
||||||
|
Hive->SecurityCount = 0;
|
||||||
|
Hive->SecurityCacheSize = 0;
|
||||||
|
Hive->SecurityHitHint = -1;
|
||||||
|
Hive->SecurityCache = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* EOF */
|
||||||
|
|
|
@ -552,6 +552,12 @@ CmpInitHiveViewList(
|
||||||
IN PCMHIVE Hive
|
IN PCMHIVE Hive
|
||||||
);
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
CmpDestroyHiveViewList(
|
||||||
|
IN PCMHIVE Hive
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Security Cache Functions
|
// Security Cache Functions
|
||||||
//
|
//
|
||||||
|
@ -561,6 +567,12 @@ CmpInitSecurityCache(
|
||||||
IN PCMHIVE Hive
|
IN PCMHIVE Hive
|
||||||
);
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
CmpDestroySecurityCache(
|
||||||
|
IN PCMHIVE Hive
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Value Cache Functions
|
// Value Cache Functions
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in a new issue