- Modify more functions to use KCB instead of PKEY_OBJECT.
svn path=/trunk/; revision=30026
KernelMode,
Class,
CreateOptions,
- (PKEY_OBJECT)Object,
+ ((PKEY_OBJECT)Object)->KeyControlBlock,
NULL,
(PVOID*)&KeyObject);
if (!NT_SUCCESS(Status))
RtlCreateUnicodeString(&KeyObject->Name, Start);
- ParentNode = (PCM_KEY_NODE)HvGetCell(KeyObject->ParentKey->KeyControlBlock->KeyHive,
- KeyObject->ParentKey->KeyControlBlock->KeyCell);
+ ParentNode = (PCM_KEY_NODE)HvGetCell(KeyObject->KeyControlBlock->ParentKcb->KeyHive,
+ KeyObject->KeyControlBlock->ParentKcb->KeyCell);
Node = (PCM_KEY_NODE)HvGetCell(KeyObject->KeyControlBlock->KeyHive,
KeyObject->KeyControlBlock->KeyCell);
- Node->Parent = KeyObject->ParentKey->KeyControlBlock->KeyCell;
+ Node->Parent = KeyObject->KeyControlBlock->ParentKcb->KeyCell;
Node->Security = ParentNode->Security;
KeyObject->KeyControlBlock->ValueCache.ValueList = Node->ValueList.List;
DPRINT("RemainingPath: %wZ\n", &RemainingPath);
- CmiAddKeyToList(KeyObject->ParentKey, KeyObject);
+ CmiAddKeyToList(((PKEY_OBJECT)Object), KeyObject);
VERIFY_KEY_OBJECT(KeyObject);
/* Remove the keep-alive reference */
ObDereferenceObject(KeyObject);
if (KeyObject->KeyControlBlock->KeyHive !=
- KeyObject->ParentKey->KeyControlBlock->KeyHive)
+ KeyObject->KeyControlBlock->ParentKcb->KeyHive)
{
/* Dereference again */
ObDereferenceObject(KeyObject);
KernelMode,
NULL,
REG_OPTION_VOLATILE,
- ParentKey,
+ ParentKey->KeyControlBlock,
NULL,
(PVOID*)&NewKey);
if (!NT_SUCCESS(Status))
NTAPI
CmpDeleteKeyObject(PVOID DeletedObject)
{
- PKEY_OBJECT ParentKeyObject;
PKEY_OBJECT KeyObject;
REG_KEY_HANDLE_CLOSE_INFORMATION KeyHandleCloseInfo;
REG_POST_OPERATION_INFORMATION PostOperationInfo;
DPRINT("Delete key object (%p)\n", DeletedObject);
KeyObject = (PKEY_OBJECT) DeletedObject;
- ParentKeyObject = KeyObject->ParentKey;
- ObReferenceObject (ParentKeyObject);
PostOperationInfo.Object = (PVOID)KeyObject;
KeyHandleCloseInfo.Object = (PVOID)KeyObject;
{
PostOperationInfo.Status = Status;
CmiCallRegisteredCallbacks(RegNtPostKeyHandleClose, &PostOperationInfo);
- ObDereferenceObject (ParentKeyObject);
return;
}
ASSERT((KeyObject->KeyControlBlock->Delete) == FALSE);
- ObDereferenceObject (ParentKeyObject);
-
if (KeyObject->SizeOfSubKeys)
{
ExFreePool(KeyObject->SubKeys);
PULONG ReturnLength,
IN KPROCESSOR_MODE PreviousMode)
{
+ DPRINT1("CmpQueryKeyName() called\n");
+ while (TRUE);
+#if 0
PKEY_OBJECT KeyObject;
NTSTATUS Status;
- DPRINT ("CmpQueryKeyName() called\n");
-
KeyObject = (PKEY_OBJECT)ObjectBody;
- if (KeyObject->ParentKey != KeyObject)
+ if (KeyObject->KeyControlBlock->ParentKcb != KeyObject->KeyControlBlock)
{
Status = ObQueryNameString (KeyObject->ParentKey,
ObjectNameInfo,
{
DPRINT ("Total path: %wZ\n", &ObjectNameInfo->Name);
}
+#endif
- return Status;
+ return STATUS_SUCCESS;
}
VOID
STANDARD_RIGHTS_REQUIRED,
CmpKeyObjectType,
KernelMode);
- NewKey->ParentKey = ParentKey;
+ //NewKey->ParentKey = ParentKey;
}
/* Preconditions: Must be called with CmpRegistryLock held. */
{\r
ULONG Type;\r
UNICODE_STRING Name;\r
- struct _KEY_OBJECT *ParentKey;\r
LIST_ENTRY KeyBodyList;\r
ULONG SubKeyCounts;\r
ULONG SizeOfSubKeys;\r
IN KPROCESSOR_MODE AccessMode,\r
IN PUNICODE_STRING Class,\r
IN ULONG CreateOptions,\r
- IN PKEY_OBJECT Parent,\r
+ IN PCM_KEY_CONTROL_BLOCK ParentKcb,\r
IN PCMHIVE OriginatingHive OPTIONAL,\r
OUT PVOID *Object\r
);\r
IN PUNICODE_STRING Name,\r
IN KPROCESSOR_MODE AccessMode,\r
IN PUNICODE_STRING Class,\r
- IN PKEY_OBJECT Parent,\r
+ IN PCM_KEY_CONTROL_BLOCK ParentKcb,\r
IN ULONG CreateOptions,\r
OUT PHCELL_INDEX KeyCell,\r
OUT PVOID *Object)\r
Kcb = CmpCreateKeyControlBlock(Hive,\r
*KeyCell,\r
KeyNode,\r
- Parent->KeyControlBlock,\r
+ ParentKcb,\r
0,\r
Name);\r
if (!Kcb)\r
KeyBody->SubKeyCounts = 0;\r
KeyBody->SubKeys = NULL;\r
KeyBody->SizeOfSubKeys = 0;\r
- KeyBody->ParentKey = Parent;\r
InsertTailList(&CmiKeyObjectListHead, &KeyBody->KeyBodyList);\r
\r
Quickie:\r
IN KPROCESSOR_MODE AccessMode,\r
IN PUNICODE_STRING Class OPTIONAL,\r
IN ULONG CreateOptions,\r
- IN PKEY_OBJECT Parent,\r
+ IN PCM_KEY_CONTROL_BLOCK ParentKcb,\r
IN PCMHIVE OriginatingHive OPTIONAL,\r
OUT PVOID *Object)\r
{\r
ExAcquirePushLockShared((PVOID)&((PCMHIVE)Hive)->FlusherLock);\r
\r
/* Check if the parent is being deleted */\r
- if (Parent->KeyControlBlock->Delete)\r
+ if (ParentKcb->Delete)\r
{\r
/* It has, quit */\r
ASSERT(FALSE);\r
}\r
\r
/* Sanity check */\r
- ASSERT(Cell == Parent->KeyControlBlock->KeyCell);\r
+ ASSERT(Cell == ParentKcb->KeyCell);\r
\r
/* Get the parent type */\r
ParentType = HvGetCellType(Cell);\r
}\r
\r
/* Don't allow children under symlinks */\r
- if (Parent->KeyControlBlock->Flags & KEY_SYM_LINK)\r
+ if (ParentKcb->Flags & KEY_SYM_LINK)\r
{\r
/* Fail */\r
ASSERT(FALSE);\r
Name,\r
AccessMode,\r
Class,\r
- Parent,\r
+ ParentKcb,\r
CreateOptions,\r
&KeyCell,\r
Object);\r
}\r
\r
/* Sanity checks */\r
- ASSERT(KeyBody->ParentKey->KeyControlBlock->KeyCell == Cell);\r
- ASSERT(KeyBody->ParentKey->KeyControlBlock->KeyHive == Hive);\r
- ASSERT(KeyBody->ParentKey == Parent);\r
+ ASSERT(KeyBody->KeyControlBlock->ParentKcb->KeyCell == Cell);\r
+ ASSERT(KeyBody->KeyControlBlock->ParentKcb->KeyHive == Hive);\r
+ ASSERT(KeyBody->KeyControlBlock->ParentKcb == ParentKcb);\r
+ //ASSERT(KeyBody->KeyControlBlock->ParentKcb->KcbMaxNameLen == KeyNode->MaxNameLen);\r
\r
/* Update the timestamp */\r
KeQuerySystemTime(&TimeStamp);\r
{\r
/* Do it */\r
KeyNode->MaxNameLen = Name->Length;\r
+ KeyBody->KeyControlBlock->ParentKcb->KcbMaxNameLen = Name->Length;\r
}\r
\r
/* Check if we need toupdate class length maximum */\r
RootKey->ProcessID = PsGetCurrentProcessId();\r
#else\r
RtlpCreateUnicodeString(&RootKey->Name, L"Registry", NonPagedPool);\r
- RootKey->ParentKey = RootKey;\r
RootKey->SubKeyCounts = 0;\r
RootKey->SubKeys = NULL;\r
RootKey->SizeOfSubKeys = 0;\r