mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 01:24:38 +00:00
a little work on the registry code
svn path=/trunk/; revision=442
This commit is contained in:
parent
b9354028e0
commit
169894bcc5
4 changed files with 85 additions and 4 deletions
|
@ -1,4 +1,8 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Object Manager structures and typedefs
|
||||||
|
*/
|
||||||
|
|
||||||
typedef struct _KEY_VALUE
|
typedef struct _KEY_VALUE
|
||||||
{
|
{
|
||||||
ULONG Flags;
|
ULONG Flags;
|
||||||
|
@ -10,6 +14,9 @@ typedef struct _KEY_VALUE
|
||||||
} KEY_VALUE, *PKEY_VALUE;
|
} KEY_VALUE, *PKEY_VALUE;
|
||||||
|
|
||||||
typedef struct _KEY_OBJECT
|
typedef struct _KEY_OBJECT
|
||||||
|
/*
|
||||||
|
* Type defining the Object Manager Key Object
|
||||||
|
*/
|
||||||
{
|
{
|
||||||
CSHORT Type;
|
CSHORT Type;
|
||||||
CSHORT Size;
|
CSHORT Size;
|
||||||
|
@ -30,7 +37,11 @@ typedef struct _KEY_OBJECT
|
||||||
struct _KEY_OBJECT *NextKey;
|
struct _KEY_OBJECT *NextKey;
|
||||||
} KEY_OBJECT, *PKEY_OBJECT;
|
} KEY_OBJECT, *PKEY_OBJECT;
|
||||||
|
|
||||||
/* key query information class */
|
#define KO_MARKED_FOR_DELETE 0x00000001
|
||||||
|
|
||||||
|
/*
|
||||||
|
* key query information class
|
||||||
|
*/
|
||||||
|
|
||||||
typedef enum _KEY_INFORMATION_CLASS
|
typedef enum _KEY_INFORMATION_CLASS
|
||||||
{
|
{
|
||||||
|
|
|
@ -70,6 +70,11 @@ typedef struct _OBJECT_TYPE
|
||||||
/*
|
/*
|
||||||
* PURPOSE: Called when an open attempts to open a file apparently
|
* PURPOSE: Called when an open attempts to open a file apparently
|
||||||
* residing within the object
|
* residing within the object
|
||||||
|
* RETURNS: a pointer to the object that corresponds to the child
|
||||||
|
* child of ParsedObject that is on Path. Path is modified to
|
||||||
|
* to point to the remainder of the path after the child. NULL
|
||||||
|
* should be return when a leaf is reached and Path should be
|
||||||
|
* left unchanged as a reault.
|
||||||
*/
|
*/
|
||||||
PVOID (*Parse)(PVOID ParsedObject, PWSTR* Path);
|
PVOID (*Parse)(PVOID ParsedObject, PWSTR* Path);
|
||||||
|
|
||||||
|
|
|
@ -88,8 +88,9 @@ TCHAR_OBJECTS = tchar/strdec.o tchar/strinc.o tchar/strninc.o tchar/strncnt.o t
|
||||||
|
|
||||||
TIME_OBJECTS = time/ctime.o time/difftime.o time/strftime.o time/time.o time/clock.o
|
TIME_OBJECTS = time/ctime.o time/difftime.o time/strftime.o time/time.o time/clock.o
|
||||||
|
|
||||||
|
# float/fpclass.o
|
||||||
FLOAT_OBJECTS = float/fpreset.o float/clearfp.o float/cntrlfp.o float/statfp.o float/logb.o\
|
FLOAT_OBJECTS = float/fpreset.o float/clearfp.o float/cntrlfp.o float/statfp.o float/logb.o\
|
||||||
float/chgsign.o float/fpclass.o float/isnan.o
|
float/chgsign.o float/isnan.o
|
||||||
|
|
||||||
SYS_STAT_OBJECTS = sys_stat/fstat.o sys_stat/stat.o sys_stat/futime.o
|
SYS_STAT_OBJECTS = sys_stat/fstat.o sys_stat/stat.o sys_stat/futime.o
|
||||||
|
|
||||||
|
|
|
@ -14,17 +14,23 @@
|
||||||
|
|
||||||
#include <internal/debug.h>
|
#include <internal/debug.h>
|
||||||
|
|
||||||
|
/* #define PROTO_REG 1 /* Comment out to disable */
|
||||||
|
|
||||||
/* FILE STATICS *************************************************************/
|
/* FILE STATICS *************************************************************/
|
||||||
|
|
||||||
POBJECT_TYPE CmKeyType = NULL;
|
POBJECT_TYPE CmKeyType = NULL;
|
||||||
PKEY_OBJECT RootKey = NULL;
|
PKEY_OBJECT RootKey = NULL;
|
||||||
|
|
||||||
|
#if PROTO_REG
|
||||||
|
static PVOID CmpObjectParse(PVOID ParsedObject, PWSTR* Path);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
CmInitializeRegistry(VOID)
|
CmInitializeRegistry(VOID)
|
||||||
{
|
{
|
||||||
#if 0
|
#if PROTO_REG
|
||||||
ANSI_STRING AnsiString;
|
ANSI_STRING AnsiString;
|
||||||
|
|
||||||
CmKeyType = ExAllocatePool(NonPagedPool, sizeof(OBJECT_TYPE));
|
CmKeyType = ExAllocatePool(NonPagedPool, sizeof(OBJECT_TYPE));
|
||||||
|
@ -110,7 +116,7 @@ ZwCreateKey(PHANDLE KeyHandle,
|
||||||
ULONG CreateOptions,
|
ULONG CreateOptions,
|
||||||
PULONG Disposition)
|
PULONG Disposition)
|
||||||
{
|
{
|
||||||
#if 0
|
#if PROTO_REG
|
||||||
/* FIXME: Should CurLevel be alloced to handle arbitrary size components? */
|
/* FIXME: Should CurLevel be alloced to handle arbitrary size components? */
|
||||||
WCHAR *S, *T, CurLevel[255];
|
WCHAR *S, *T, CurLevel[255];
|
||||||
PKEY_OBJECT ParentKey, CurSubKey, NewKey;
|
PKEY_OBJECT ParentKey, CurSubKey, NewKey;
|
||||||
|
@ -691,3 +697,61 @@ NTSTATUS RtlWriteRegistryValue(ULONG RelativeTo,
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
static PVOID
|
||||||
|
CmpObjectParse(PVOID ParsedObject, PWSTR* Path)
|
||||||
|
{
|
||||||
|
PWSTR S, SubKeyBuffer;
|
||||||
|
PKEY_OBJECT CurrentKey, ChildKey;
|
||||||
|
|
||||||
|
UNIMPLEMENTED
|
||||||
|
|
||||||
|
/* If the path is an empty string, we're done */
|
||||||
|
if (Path == NULL || Path[0] == 0)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Extract subkey name from path */
|
||||||
|
S = *Path;
|
||||||
|
while (*S != '\\')
|
||||||
|
{
|
||||||
|
S++;
|
||||||
|
}
|
||||||
|
SubKeyBuffer = ExAllocatePool(NonPagedPool, (S - *Path) * sizeof(WSTR));
|
||||||
|
wstrncpy(SubKeyBuffer, *Path, (S - *Path));
|
||||||
|
SubKeyBuffer[S - *Path] = 0;
|
||||||
|
|
||||||
|
/* %%% Scan Key for matching SubKey */
|
||||||
|
CurrentKey = (PKEY_OBJECT) ParsedObject;
|
||||||
|
ChildKey = CurrentKey->
|
||||||
|
/* Move Key Object pointer to first child */
|
||||||
|
ParentKey = ParentKey->SubKeys;
|
||||||
|
|
||||||
|
/* Extract the next path component from requested path */
|
||||||
|
wstrncpy(CurLevel, S, T-S);
|
||||||
|
CurLevel[T-S] = 0;
|
||||||
|
DPRINT("CurLevel:[%w]", CurLevel);
|
||||||
|
|
||||||
|
/* Walk through children looking for path component */
|
||||||
|
while (ParentKey != NULL)
|
||||||
|
{
|
||||||
|
if (wstrcmp(CurLevel, ParentKey->Name) == 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ParentKey = ParentKey->NextKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* %%% If SubKey is not found return NULL */
|
||||||
|
/* %%% Adjust path to next level */
|
||||||
|
/* %%% Return object for SubKey */
|
||||||
|
|
||||||
|
ExFreePool(SubKeyBuffer);
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue