diff --git a/reactos/tools/mkhive/mkhive.c b/reactos/tools/mkhive/mkhive.c index c14b597a4b4..1bfa3c5070c 100644 --- a/reactos/tools/mkhive/mkhive.c +++ b/reactos/tools/mkhive/mkhive.c @@ -52,7 +52,7 @@ void usage (void) { - printf ("Usage: mkhive \n\n"); + printf ("Usage: mkhive [addinf]\n\n"); printf (" srcdir - inf files are read from this directory\n"); printf (" dstdir - binary hive files are created in this directory\n"); printf (" addinf - additional inf files with full path\n"); diff --git a/reactos/tools/mkhive/reginf.c b/reactos/tools/mkhive/reginf.c index 5cbd8992c8c..901c500d406 100644 --- a/reactos/tools/mkhive/reginf.c +++ b/reactos/tools/mkhive/reginf.c @@ -358,6 +358,37 @@ do_reg_operation(HKEY KeyHandle, return TRUE; } +ULONG get_flags(PINFCONTEXT Context) +{ + CHAR Buffer[MAX_INF_STRING_LENGTH], *p; + ULONG Ret = 0; + + if (!InfHostGetStringField (Context, 4, Buffer, MAX_INF_STRING_LENGTH, NULL)) + { + p = strtok(Buffer, " |"); + while(p) + { + if(isdigit(*p))Ret|=strtol(p, NULL, 0); + else if(strcmp(p, "BINVALUETYPE")==0) Ret|= FLG_ADDREG_BINVALUETYPE; + else if(strcmp(p, "NOCLOBBER")==0) Ret|= FLG_ADDREG_NOCLOBBER; + else if(strcmp(p, "DELVAL")==0) Ret|= FLG_ADDREG_DELVAL; + else if(strcmp(p, "APPEND")==0) Ret|= FLG_ADDREG_APPEND; + else if(strcmp(p, "KEYONLY")==0) Ret|= FLG_ADDREG_KEYONLY; + else if(strcmp(p, "OVERWRITEONLY")==0) Ret|= FLG_ADDREG_OVERWRITEONLY; + else if(strcmp(p, "TYPE_SZ")==0) Ret|= FLG_ADDREG_TYPE_SZ; + else if(strcmp(p, "TYPE_MULTI_SZ")==0) Ret|= FLG_ADDREG_TYPE_MULTI_SZ; + else if(strcmp(p, "TYPE_EXPAND_SZ")==0) Ret|= FLG_ADDREG_TYPE_EXPAND_SZ; + else if(strcmp(p, "TYPE_BINARY")==0) Ret|= FLG_ADDREG_TYPE_BINARY; + else if(strcmp(p, "TYPE_DWORD")==0) Ret|= FLG_ADDREG_TYPE_DWORD; + else if(strcmp(p, "TYPE_NONE")==0) Ret|= FLG_ADDREG_TYPE_NONE; + else if(strcmp(p, "TYPE_MASK")==0) Ret|= FLG_ADDREG_TYPE_MASK; + p = strtok(NULL, " |"); + } + } + + return Ret; +} + /*********************************************************************** * registry_callback @@ -400,12 +431,7 @@ registry_callback (HINF hInf, PCHAR Section, BOOL Delete) { Flags = FLG_ADDREG_DELVAL; } - else - { - /* get flags */ - if (InfHostGetIntField (Context, 4, (PLONG)&Flags) != 0) - Flags = 0; - } + else Flags = get_flags(Context); DPRINT("Flags: %lx\n", Flags);