Registry-Backup Programm Problem


  • Mod

    skullyan schrieb:

    Mag ja alles stimmen, ich hätte es aber gern zu lernzwecken als C++ Code. Wenn ich KEY_ALL_ACCESS auf 0 stelle, erstellt er die .reg Datei nicht.

    Wie wäre es mit etwas Studium der MSDN?
    Du willst lesen?
    Was hällst Du von KEY_READ?



  • Martin Richter schrieb:

    skullyan schrieb:

    Mag ja alles stimmen, ich hätte es aber gern zu lernzwecken als C++ Code. Wenn ich KEY_ALL_ACCESS auf 0 stelle, erstellt er die .reg Datei nicht.

    Wie wäre es mit etwas Studium der MSDN?
    Du willst lesen?
    Was hällst Du von KEY_READ?

    Ja! Das ist hier wohl das Sinnvollste.


  • Mod

    skullyan schrieb:

    Martin Richter schrieb:

    Wie wäre es mit etwas Studium der MSDN?
    Du willst lesen?
    Was hällst Du von KEY_READ?

    Ja! Das ist hier wohl das Sinnvollste.

    Auf welche Frage war das die Antwort:

    Wie wäre es mit etwas Studium der MSDN?
    Du willst lesen?
    Was hällst Du von KEY_READ?

    <duck&wech>



  • Martin Richter schrieb:

    Auf welche Frage war das die Antwort:
    Wie wäre es mit etwas Studium der MSDN?
    Du willst lesen?
    Was hällst Du von KEY_READ?

    Auf die Frage wegen dem Studium der MSDN. Ich sehe meinen Fehler allerdings immer noch nicht.
    😞

    Kann es vielleicht etwas mit den Rechten unter Vista zu tun haben? (bin als normaler User angemeldet)



  • Also um in HKEY_LOCAL_MACHINE SCHREIBEN zu können brauchst du Adminrechte. Beim lesen glaube ich aber nicht. Probiers aber einfach mal aus. Meld dich als Admin an und führ dein Prgramm als Administrator aus und schau ob es tut.


  • Mod

    Zusatz:
    1. Ein Progamm ohne Vista Manifest unterliegt der Virtualisierung und hat "scheinbar" Schreibrechte auf die Registry.
    2. Wenn man sich selbst als Admin unter Vista anmeldet wird dennoch jedes normal gestartete Programm ohne Admin-Token gestartet, sofern UAC aktiv ist.
    3. Nur ein Programm mit Vista-Manifest und das elevated gestartet wird, hat Schreibzugriff auf HKLM!



  • Martin Richter schrieb:

    1. Ein Progamm ohne Vista Manifest unterliegt der Virtualisierung und hat "scheinbar" Schreibrechte auf die Registry.
    2. Wenn man sich selbst als Admin unter Vista anmeldet wird dennoch jedes normal gestartete Programm ohne Admin-Token gestartet, sofern UAC aktiv ist.
    3. Nur ein Programm mit Vista-Manifest und das elevated gestartet wird, hat Schreibzugriff auf HKLM!

    Machen die bei M$ eigentlich alles falsch? *scnr



  • Martin Richter schrieb:

    Zusatz:
    1. Ein Progamm ohne Vista Manifest unterliegt der Virtualisierung und hat "scheinbar" Schreibrechte auf die Registry.
    2. Wenn man sich selbst als Admin unter Vista anmeldet wird dennoch jedes normal gestartete Programm ohne Admin-Token gestartet, sofern UAC aktiv ist.
    3. Nur ein Programm mit Vista-Manifest und das elevated gestartet wird, hat Schreibzugriff auf HKLM!

    Bedeutet das, dass ich in mein Programm so etwas wie ein "Vista-Manifest" hinzufügen muss? Wie schaut sowas denn aus? Kann mir da jemand helfen?

    🙂


  • Mod



  • Martin Richter schrieb:

    Gesucht hast Du nicht oder?

    http://blog.m-ri.de/index.php/2006/12/12/vista-und-die-notwendigkeit-eines-manifestes-fur-die-uac/

    http://blog.m-ri.de/index.php/tag/manifest/

    Sehr Ausführlich, danke. Ich habe die Headerfile in das Programm eingebunden. So etwa:

    #include <windows.h>
    #include <wininet.h>
    #include <process.h>
    #include <iostream>
    #include <fstream>
    #include <stdio.h>
    #include <conio.h>
    #include "header.h" // HIER DIE HEADERFILE EINGEBUNDEN
    
    using namespace std;
    
    void save();
    
    int main()
    {
            save();
            return EXIT_SUCCESS;
    
    }
    void save()
    {
        RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\", 0, KEY_ALL_ACCESS, 0);
        RegSaveKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\", "C:\\data.reg", 0);
    }
    

    Diese Headerfile:

    // Version 2.0 by Martin Richter [WWJD]
    // Supports VC-2005 and VC-2008
    #pragma once    
    
    #ifndef RC_INVOKED
    // Avoid problems with the resource compiler if included    
    
    // This defines bock the creation in the header files
    #pragma message("Using private assemblies for the MS runtimes")
    #define _STL_NOFORCE_MANIFEST
    #define _CRT_NOFORCE_MANIFEST
    #define _AFX_NOFORCE_MANIFEST
    //#define _ATL_NOFORCE_MANIFEST    
    
    // The next statements block the linker from including object files in the
    // CRT and the MFC, that would create manifest pragmas too.
    #ifdef __cplusplus
    extern "C" {            /* Assume C declarations for C++ */
    #endif    
    
    __declspec(selectany)       int _forceCRTManifest;
    __declspec(selectany)       int _forceMFCManifest;
    // __declspec(selectany)    int _forceAtlDllManifest;    
    
    // The next symbols are used by the several versions of VC 9.0
    __declspec(selectany)       int _forceCRTManifestRTM;
    __declspec(selectany)       int _forceMFCManifestRTM;
    __declspec(selectany)       int _forceMFCManifestCUR;    
    
    #ifdef __cplusplus
    }                        /* __cplusplus */
    #endif    
    
    // We use crtassem.h with the defines there. It just gives us the
    // versions and name parts for the dependencies.
    // Note that there is also a MFCassem.h but this include file has the
    // manifest pragma's already in it. So we can't use it
    //
    // Three files are controlling this crtassem.h, MFCassem.h and atlassem.h!
    // Happily __LIBRARIES_ASSEMBLY_NAME_PREFIX is used in CRT, MFC and ATL!
    // Doing it right would need to use _MFC_ASSEMBLY_VERSION for the MFC
    // but in fact _CRT_ASSEMBLY_VERSION and _MFC_ASSEMBLY_VERSION and
    // _ATL_ASSEMBLY_VERSION are the same
    //  - VC-2005 SP1 8.0.50727.762
    //  - VC-2008 RTM 9.0.21022.8
    //  - VC-2008 Feature Pack 9.0.30411.0 (used if _BIND_TO_CURRENT_VCLIBS_VERSION
    //    and _BIND_TO_CURRENT_MFC_VERSION are defined to 1)    
    
    #include <crtassem.h>
    
    // We don't have a seperate block for the Debug version. We just handle
    // this with a extra define here.
    #ifdef _DEBUG
    #define __LIBRARIES_SUB_VERSION    "Debug"
    #else
    #define __LIBRARIES_SUB_VERSION    ""
    #endif    
    
    // Manifest for the CRT
    #pragma comment(linker,"/manifestdependency:\"type='win32' "                        \
        "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX "." __LIBRARIES_SUB_VERSION "CRT' "   \
        "version='" _CRT_ASSEMBLY_VERSION "' "                                          \
        "processorArchitecture='x86' \"")    
    
    // Manifest for the MFC
    #pragma comment(linker,"/manifestdependency:\"type='win32' "                        \
        "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX "." __LIBRARIES_SUB_VERSION "MFC' "   \
        "version='" _CRT_ASSEMBLY_VERSION "' "                                          \
        "processorArchitecture='x86'\"")    
    
    // #pragma comment(linker,"/manifestdependency:\"type='win32' "                     \
    //     "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".MFCLOC' "                        \
    //     "version='" _CRT_ASSEMBLY_VERSION "' "                                       \
    //     "processorArchitecture='x86'\"")    
    
    // Manifest for the ATL
    // #pragma comment(linker,"/manifestdependency:\"type='win32' "                     \
    //    "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".ATL' "                            \
    //    "version='" _CRT_ASSEMBLY_VERSION "' "                                        \
    //    "processorArchitecture='x86' \"")    
    
    #endif // RC_INVOKED
    

    Das Programm kompiliert, meldet aber Fehler. Ich weiß auch nicht, wie ich das XML-Manifest einbinden soll...

    <?xml version=”1.0″ encoding=”utf-8″?>
    <assembly xmlns=”urn:schemas-microsoft-com:asm.v1″ manifestVersion=”1.0″>
      <trustInfo xmlns=”urn:schemas-microsoft-com:asm.v3″>
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel level=”asInvoker” /> <!-- Ich hab gelesen, dass man mit "asInvoker" die niedrigste Stufe von Rechten hat. Ich brauche aber doch Admin Rechte, oder habe ich was falsch verstanden? -->
    
          </requestedPrivileges>
        </security>
      </trustInfo>
    </assembly>
    

    Verzeiht, wenn ich alles falsch gemacht habe, bin noch blutiger Anfänger...

    Danke im Voraus. 👍


  • Mod

    MSDN lesen bildet!
    asInvoker heißt was es sagt: Du bekommst die rechte die der aufrufende hat. Ist er bereits elevated dann bist Du auch elevated. Ist er nicht elevated wirst Dein neuer Prozess auch nicht elevated.

    requireAdministrator heißt Du benötigst Admin rechte. Die Folge: UAC-Prompt und evtl., Eingabe der Credentials notwendig.



  • Martin Richter schrieb:

    MSDN lesen bildet!
    asInvoker heißt was es sagt: Du bekommst die rechte die der aufrufende hat. Ist er bereits elevated dann bist Du auch elevated. Ist er nicht elevated wirst Dein neuer Prozess auch nicht elevated.

    requireAdministrator heißt Du benötigst Admin rechte. Die Folge: UAC-Prompt und evtl., Eingabe der Credentials notwendig.

    Okay, das war aber nicht meine einzige Frage
    😃


  • Mod

    Und was war Deine Frage?
    Ich sehe nur das Du Manifest Code für das Laden der CRTs mit dem Manifest Code für UAC durcheinander wirfst...
    Ansonsten hast Du keine Frage gestellt, sondern eine Feststellung ohne Inhalt gemacht "Das Programm kompiliert, meldet aber Fehler."

    Wenn die Datei die Endung Manifest hat, dann kannst Du diese einfach dem Projekt hinzufügen.
    In VS2008 wird das Manifest automatisch erzeugt...

    Nochmal: MSDN lesen bildet!



  • Martin Richter schrieb:

    Und was war Deine Frage?
    Ich sehe nur das Du Manifest Code für das Laden der CRTs mit dem Manifest Code für UAC durcheinander wirfst...
    Ansonsten hast Du keine Frage gestellt, sondern eine Feststellung ohne Inhalt gemacht "Das Programm kompiliert, meldet aber Fehler."

    Wenn die Datei die Endung Manifest hat, dann kannst Du diese einfach dem Projekt hinzufügen.
    In VS2008 wird das Manifest automatisch erzeugt...

    Nochmal: MSDN lesen bildet!

    Der Inhalt des Fehlers lautet: Die Anwendung konnte aufgrund einer falschen Anwendungskonfiguration nicht gestartet werden. Überprüfen Sie die Manifestdatei auf mögliche Fehler.

    Ich hab ja nur die Headerdatei von Dir da eingefügt. Was muss ich sonst noch machen?


  • Mod

    Meine Header Daten sind nicht notwendig.
    UseMSPrivateAssmeblies hat einen ganz anderen Zweck.

    Es geht um dieses:
    http://blog.m-ri.de/index.php/2006/12/12/vista-und-die-notwendigkeit-eines-manifestes-fur-die-uac/



  • Martin Richter schrieb:

    Meine Header Daten sind nicht notwendig.
    UseMSPrivateAssmeblies hat einen ganz anderen Zweck.

    Es geht um dieses:
    http://blog.m-ri.de/index.php/2006/12/12/vista-und-die-notwendigkeit-eines-manifestes-fur-die-uac/

    Okay, das bringt mich schon weiter... Ich habe die Manifest-Datei in den Code eingebunden, aber die Kopie des SOFTWARE key's ist dennoch 0kb groß... Und jetzt kann ich die Manifes-Datei nicht mehr öffnen. Ich habe sie als einfache Textdatei mit entsprechender ".manifest" Endung eingebunden gehabt. Habe bei Einem Tutorial aber gesehen, dass man mit Visual Studio auch direkt .xml Dateien ins Projekt einfügen kann. Muss das so sein?

    😕


  • Mod

    1. Eine Datei im Visual-Studio wird anhand Ihrer Endung behandelt. Wenn eine .manifest-Datei ist eine XML Datei. Aber wenn diese die Endung Manifest nicht mehr hat, weiß VS nichts mehr damit anzufangen. Schon gar nicht es eben als Manifest an Dein Programm anfügen.
    Genaus wird eine TXT Datei nicht kompiliert wenn Du Sie in ein Projekt einfügst egal wieviel C++ Code Du da rein schreibst.
    2. Was ist Dein Problem?
    3. Verliere ich langsam den Spaß und das Verständnis für diesen Thread.



  • Martin Richter schrieb:

    1. Eine Datei im Visual-Studio wird anhand Ihrer Endung behandelt. Wenn eine .manifest-Datei ist eine XML Datei. Aber wenn diese die Endung Manifest nicht mehr hat, weiß VS nichts mehr damit anzufangen. Schon gar nicht es eben als Manifest an Dein Programm anfügen.
    Genaus wird eine TXT Datei nicht kompiliert wenn Du Sie in ein Projekt einfügst egal wieviel C++ Code Du da rein schreibst.
    2. Was ist Dein Problem?
    3. Verliere ich langsam den Spaß und das Verständnis für diesen Thread.

    Mein Problem ist ja nur, dass alles zwar funktioniert, der Effekt aber ausbleibt. Scheinbar hab ich immer noch nicht die Rechte, die ich brauche, um den SOFTWARE key zu kopieren.


Anmelden zum Antworten