OT: Windows Registry Backup - hex: Datentyp

  • C#

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von -Franky-.

    OT: Windows Registry Backup - hex: Datentyp

    Moin,

    das Thema ist ein bissl OT.

    Ich möchte eine Backup Datei der Registry einlesen und die Möglichkeit bieten, diese zu bearbeiten.

    So sieht ein typischer Eintrag in der Backup Datei aus:

    [HKEY_LOCAL_MACHINE\BCD00000000\Objects\{1afa9c49-16ab-4a5c-901b-212802da9460}\Elements\14000006] "Element"=hex(7):7b,00,37,00,65,00,61,00,32,00,65,00,31,00,61,00,63,00,2d,00,\ 32,00,65,00,36,00,31,00,2d,00,34,00,37,00,32,00,38,00,2d,00,61,00,61,00,61,\ 00,33,00,2d,00,38,00,39,00,36,00,64,00,39,00,64,00,30,00,61,00,39,00,66,00,\ 30,00,65,00,7d,00,00,00,00,00

    Nach dem = kommt eine Kennzeichnung für das vorliegende Datenformat. Das sind dann z.B. "dword" oder "qword"

    Für Binary Daten, also RegistryValueKind.Binary in C# steht wie oben gezeigt, ein hex. Es gibt aber hex, hex(2), hex(7) und einiges mehr. Ich bin bisher nicht dahinter gestiegen, was der Wert in der Klammer zu bedeuten hat. Ich finde auch nichts im Netz.

    Was hat der Wert (x) in der Klammer für die Angabe ​hex(x) zu bedeuten? Kann mir da einer weiter helfen?

    Gruß

    MQ
    OK, ich habe aber auch hex(9). Wäre das dann REG_LINK ?

    REG_SZ, also String hat keine Kennung. Da bleibt nur REG_LINK.

    hm, RegistryValueKind kennt gar kein REG_LINK, dafür aber Unknown und None.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MasterQ“ ()

    hex = REG_BINARY R REG_NONE
    hex(1) = REG_SZ
    hex(2) = REG_EXPAND_SZ
    hex(3) = REG_BINARY
    hex(4) = REG_DWORD
    hex(5) = REG_DWORD_BIG_ENDIAN
    hex(6) = REG_LINK
    hex(7) = REG_MULTI_SZ
    hex(8) = REG_RESOURCE_LIST
    hex(9) = REG_FULL_RESOURCE_DESCRIPTOR
    hex(a) = REG_RESOURCE_REQUIREMENTS_LIST

    mehr weis ich grad nicht. Du könntest aber einen Fake Eintrag machen, alle Typen einmal, dann exportieren und die .REG studieren.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BitBrösel“ ()

    Da hatte sich beim reinkopieren oben ein Fehler eingeschlichen. In der winnt.h sind sie tatsächlich.

    C-Quellcode

    1. #define REG_NONE 0 /* no type */
    2. #define REG_SZ 1 /* string type (ASCII) */
    3. #define REG_EXPAND_SZ 2 /* string, includes %ENVVAR% (expanded by caller) (ASCII) */
    4. #define REG_BINARY 3 /* binary format, callerspecific */
    5. /* YES, REG_DWORD == REG_DWORD_LITTLE_ENDIAN */
    6. #define REG_DWORD 4 /* DWORD in little endian format */
    7. #define REG_DWORD_LITTLE_ENDIAN 4 /* DWORD in little endian format */
    8. #define REG_DWORD_BIG_ENDIAN 5 /* DWORD in big endian format */
    9. #define REG_LINK 6 /* symbolic link (UNICODE) */
    10. #define REG_MULTI_SZ 7 /* multiple strings, delimited by \0, terminated by \0\0 (ASCII) */
    11. #define REG_RESOURCE_LIST 8 /* resource list? huh? */
    12. #define REG_FULL_RESOURCE_DESCRIPTOR 9 /* full resource descriptor? huh? */
    13. #define REG_RESOURCE_REQUIREMENTS_LIST 10
    14. #define REG_QWORD 11 /* QWORD in little endian format */
    15. #define REG_QWORD_LITTLE_ENDIAN 11 /* QWORD in little endian format */

    Quellcode

    1. hex = REG_NONE
    2. hex(1) = REG_SZ
    3. hex(2) = REG_EXPAND_SZ
    4. hex(3) = REG_BINARY
    5. hex(4) = REG_DWORD
    6. hex(5) = REG_DWORD_BIG_ENDIAN
    7. hex(6) = REG_LINK
    8. hex(7) = REG_MULTI_SZ
    9. hex(8) = REG_RESOURCE_LIST
    10. hex(9) = REG_FULL_RESOURCE_DESCRIPTOR
    11. hex(a) = REG_RESOURCE_REQUIREMENTS_LIST
    12. hex(b) = REG_QWORD, REG_QWORD_LITTLE_ENDIAN
    Hi

    REG_NONE -> Kein definierter Werttyp. Bedeutet für mich, kann alles mögliche sein. Wenn der Eintrag zB nicht dem REG_SZ, REG_EXPAND_SZ usw. Format entspricht, könnte es ein REG_BINARY sein bzw. stopft man alles in REG_NONE, was nicht den anderen REG_xxx entspricht oder kann ein Mix aus zB. REG_SZ, REG_BINARY usw. enthalten. Grob gesagt kann ein REG_NONE Daten enthalten, die nur der Ersteller dieses REG Eintrages korrekt zurück parsen kann weil nur dieser weis, wie die Daten aufgebaut sind und am einfachsten lassen sich solche Daten im Binärformat speichern.
    Mfg -Franky-

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „-Franky-“ ()