Registry sichern



  • Hallo,

    ich bin mir zwar wieder mal nicht sicher ob es doch eher nach WinAPI
    gehören könnte, aber hier ist mein Problem 😃

    Mit diesem Code möchte ich einen Teil meiner Registry in die Datei
    backupreg.reg sichern:

    HKEY hkey; 
    CString sichern;
    sichern="c:\\backupreg.reg";
    DWORD err = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\",0, KEY_ALL_ACCESS, &hkey); 
    //DWORD err = RegOpenKeyEx(HKEY_LOCAL_MACHINE,NULL,NULL, NULL, &hkey); 
    err = RegSaveKeyEx(hkey, sichern, NULL,REG_NO_COMPRESSION );
    

    Somit sollte nach meinem Verständnis Local_Machine komplett gesichert
    werden.

    Leider erhalte ich nur eine Datei die 0 KB groß ist 🙄
    Ich bin mir sicher, dass es unter VC 6.0 immer klappte. Nur jetzt
    unter VC .net 03 nicht ?



  • OK, ich brauche also Backup Privilege. Wie kann ich diese
    erlangen ohne da einen großen Code und Akt von zu machen ?
    Handelt es sich um einen einzelnen Aufruf, oder ist es von
    komplizierterer Natur ?



  • Dieser Thread wurde von Moderator/in dEUs aus dem Forum MFC mit dem Visual C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hat niemand von euch eine Idee 😞



  • Null, NULL NULL. Die Datei wird einfach nicht mit den Registrywerten
    gefüllt. Egal wie ich es anstelle 😡 😞 😡

    Ich werde vor Weihnachten noch zum Stier :xmas2:



  • Hast du XP, sonst brauchst du RegSaveKey - ansonsten: was sagt GetLastError?!



  • Hi,

    ich nutze Windows XP. SE_BACKUP_NAME Privileg habe ich wie in der
    MSDN im Beispiel gezeigt gesetzt.

    Mein Code für die Rechte :

    TOKEN_PRIVILEGES tp;
    LUID luid;
    
    if ( !LookupPrivilegeValue( 
            NULL,            // lookup privilege on local system
            lpszPrivilege,   // privilege to lookup 
            &luid ) )        // receives LUID of privilege
    {
        printf("LookupPrivilegeValue error: %u\n", GetLastError() ); 
        return FALSE; 
    }
    
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    if (bEnablePrivilege)
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    else
        tp.Privileges[0].Attributes = 0;
    
    // Enable the privilege or disable all privileges.
    
    if ( !AdjustTokenPrivileges(
           hToken, 
           FALSE, 
           &tp, 
           sizeof(TOKEN_PRIVILEGES), 
           (PTOKEN_PRIVILEGES) NULL, 
           (PDWORD) NULL) )
    { 
          printf("AdjustTokenPrivileges error: %u\n", GetLastError() ); 
          return FALSE; 
    } 
    
    return TRUE;
    

    Mein Aufruf zum sichern:

    SetPrivilege(NULL,SE_BACKUP_NAME,TRUE);
    HKEY hkey; 
    
    DWORD err = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "",0, KEY_ALL_ACCESS, &hkey); 
    err = RegSaveKey(hkey, "c:\\231204.reg", NULL); 
    //err = RegSaveKeyEx(hkey, "c:\\231204.reg", NULL); 
    RegCloseKey(hkey);
    


  • Was sagt denn GetLastError? Ansonsten schau dir mal dieses Beispiel aus der MSDN-Library an 🙂



  • GetLastError gibt mir 6 zurück 😕



  • Ergänzung:

    if ( !AdjustTokenPrivileges( 
           hToken, 
           FALSE, 
           &tp, 
           sizeof(TOKEN_PRIVILEGES), 
           (PTOKEN_PRIVILEGES) NULL, 
           (PDWORD) NULL) ) 
    { 
          printf("AdjustTokenPrivileges error: %u\n", GetLastError() ); //hier ErrorCode "6"  
          return FALSE;
    


  • Dein hToken wird ungültig sein:

    6 - The handle is invalid. - ERROR_INVALID_HANDLE

    Hast du dir das Beipsiel mal angeschaut, denn dort siehst du, dass du das/den? Token erst mit OpenProcessToken öffnen musst 😉



  • Hi,
    ich habe jetzt zwar wie im Beispiel

    if (!OpenProcessToken(GetCurrentProcess(),
                              TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
                              &hToken ))
        {
            MessageBox("Failed OpenProcessToken\n");
            return ERROR_FUNCTION_FAILED;
        }
    

    mit eingebunden zu Beginn der Funktion, aber es wird noch immer nichts
    in die Datei geschrieben.
    GetLastError zeigt mir zwar nichts mehr an, allerdings verliere ich auch so
    langsam die Lust nach 19 neu angelegten Projekten 😞 😞

    Schöne Feiertage euch allen noch :xmas1: und lasst euch schön was schenken.



  • Hast du es mal direkt mir der Funktion ModifyPrivilege aus dem Beispiel versucht - dort wird ja z.B. auch noch LookupPrivilegeValue aufgerufen 🙄



  • Jap. Habe ich. Hab die ganze Funktion übernommen und damit
    experimentiert. Jetzt habe ich das mit shellexecute und regedit mit
    den exportparametern silent und export gemacht. geht schnell und ohne
    probleme.

    wenn doch noch jemand den winapi code lauffähig hat würde ich es
    aber auch gerne mal sehen, wie es damit geht.
    selbst hab ich aber keine böcke mehr das nochmal zu probieren.
    😃


Anmelden zum Antworten