X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=sdk%2Ftools%2Fmkhive%2Fregistry.c;h=a3cc71218409c960dcf3af8cdef487d4ee5ef533;hp=cd238dcd95e83a43e2851bfa173617d63b7de852;hb=6a44c10d5de75886fd98d8e491c371b3832e1b27;hpb=81d435a181db3d7d0b93149dd61c971f5a0147ae diff --git a/sdk/tools/mkhive/registry.c b/sdk/tools/mkhive/registry.c index cd238dcd95e..a3cc7121840 100644 --- a/sdk/tools/mkhive/registry.c +++ b/sdk/tools/mkhive/registry.c @@ -30,10 +30,6 @@ * - Implement RegDeleteKeyW() and RegDeleteValueW() */ -#include -#include -#include - #define NDEBUG #include "mkhive.h" @@ -463,11 +459,18 @@ RegpCreateOrOpenKey( Volatile, &BlockOffset); } + else // if (BlockOffset == HCELL_NIL) + { + Status = STATUS_OBJECT_NAME_NOT_FOUND; // ERROR_PATH_NOT_FOUND; + } HvReleaseCell(&ParentRegistryHive->Hive, ParentCellOffset); if (!NT_SUCCESS(Status)) + { + DPRINT("RegpCreateOrOpenKey('%S'): Could not create or open subkey '%wZ'\n", KeyName, &KeyString); return ERROR_UNSUCCESSFUL; + } ParentCellOffset = BlockOffset; if (End) @@ -557,6 +560,7 @@ RegSetValueExW( PHHIVE Hive; PCM_KEY_NODE KeyNode; // ParentNode PCM_KEY_VALUE ValueCell; + ULONG ChildIndex; HCELL_INDEX CellIndex; UNICODE_STRING ValueNameString; @@ -600,12 +604,24 @@ RegSetValueExW( /* Initialize value name string */ RtlInitUnicodeString(&ValueNameString, lpValueName); - CellIndex = CmpFindValueByName(Hive, KeyNode, &ValueNameString); + if (!CmpFindNameInList(Hive, + &KeyNode->ValueList, + &ValueNameString, + &ChildIndex, + &CellIndex)) + { + /* Sanity check */ + ASSERT(CellIndex == HCELL_NIL); + /* Fail */ + // Status = STATUS_INSUFFICIENT_RESOURCES; + return ERROR_UNSUCCESSFUL; + } if (CellIndex == HCELL_NIL) { /* The value doesn't exist, create a new one */ Status = CmiAddValueKey(Key->RegistryHive, KeyNode, + ChildIndex, &ValueNameString, &ValueCell, &CellIndex); @@ -698,7 +714,7 @@ RegSetValueExW( } -// Synced with freeldr/windows/registry.c +// Synced with freeldr/ntldr/registry.c static VOID RepGetValueData( @@ -737,7 +753,7 @@ RepGetValueData( } } -// Similar to RegQueryValue in freeldr/windows/registry.c +// Similar to RegQueryValue in freeldr/ntldr/registry.c LONG WINAPI RegQueryValueExW( IN HKEY hKey, @@ -865,6 +881,7 @@ CreateSymLink( // IN PCWSTR TargetKeyPath OPTIONAL, IN HKEY TargetKeyHandle) { + LONG rc; PMEMKEY LinkKey, TargetKey; PREPARSE_POINT ReparsePoint; @@ -875,15 +892,20 @@ CreateSymLink( if (LinkKeyPath && !(LinkKeyHandle && *LinkKeyHandle)) { /* Create the link key */ - RegCreateKeyExW(NULL, - LinkKeyPath, - 0, - NULL, - REG_OPTION_VOLATILE, - 0, - NULL, - (HKEY*)&LinkKey, - NULL); + rc = RegCreateKeyExW(NULL, + LinkKeyPath, + 0, + NULL, + REG_OPTION_VOLATILE, + 0, + NULL, + (PHKEY)&LinkKey, + NULL); + if (rc != ERROR_SUCCESS) + { + free(ReparsePoint); + return FALSE; + } } else if (LinkKeyHandle) {