Announcement

Collapse
No announcement yet.

NTuser.dat kopieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • NTuser.dat kopieren

    Hi,

    ich versuche schon seit längerer Zeit, die ntuser.dat oder ähnliche, offene Dateien von Windows, des aktuell angemeldeten Benutzers zu kopieren.

    Im Fall der ntuser.dat scheitert dies natürlich. Gibt es eine Möglichkeit diese Dateien mit Hilfe von API Aufrufen zu kopieren?

    Ich habe bereits die bei Microsoft beschriebenen Privilegien erteilt: Restore und Backup, um dann mit Hilfe von

    hSrc := CreateFile(PChar('D:\WINNT\Profiles\xyz\ntuser.dat '),0,0,
    Nil,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,0);

    ein Dateihandle zu bekommen. Alles was ich in hSrc zurückbekomme ist: INVALID_HANDLE_VALUE

    Hat jemand dazu noch eine Idee? Der Benutzer hat Admin-Rechte und ich möchte diese Dateien nicht unter einem anderen User kopieren. In der Systemsteuerung-System-Benutzerprofile klappt dies ja auch recht gut, warum nicht mit den o.g. Funktionen.

    Danke im voraus,
    Michael

  • #2
    Die SysDM.cpl (Systemsteuerungsoption "System") benutzt eine endlose Anzahl nicht dokumentierter Funktionen.<br>
    Soweit ich weiß benutzt sie zum Kopieren von Benutzerprofilen eine Funktion der UserEnv.dll (User Environment) die nichtmal über ihren Namen, sondern nur über einen Index exportiert wird.<p>
    Die NtUser.dat des aktuellen Benutzers ist exklusiv durch den System-Prozeß geöffnet.<br>
    Ich kenne keine Möglichkeit, exklusiv geöffnete System-Dateien zu kopieren (mal abgesehen von der Möglichkeit, dies beim Booten zu tun--über Registry-Einträge).<p>
    Es gibt zwar die Möglichkeit, das Handle zu kopieren (vielleicht sollte "klauen" sagen ) indem man DuplicateHandle benutzt.<br>
    Dies funktioniert zwar hervorragend, doch um das richtige Datei-Handle im richtigen Prozeß zu finden sind Funktionen notwendig, die nicht offiziell dokumentiert sind (Zw/NtQueryInformationFile, TFileInformationClass, TFileNameInformation sind zwar dokumentiert, aber um an eine Liste von Handles zu kommen wird Zw/NtQuerySystemInformation benötigt).<p>
    Gruß Nico<p>
    PS: falls jemand eine "normale" Lösung einfällt, dann möge er sich melden ) (na Hagen, eine Idee?-

    Comment


    • #3
      Nico,

      danke für Deine Antwort. Hast Du auch schon mal probiert dies über die undokumentierten Funktionen zu erreichen?

      Ich bin mal im MSDN auf eine Funktion gestoßen, die CopyProfileDirectory heißt, siehe im Log-File Beispiel unter http://support.microsoft.com/support/kb/articles/Q154/1/20.ASP. jedoch finde ich diese Fkt nicht.

      Wenn ich in Win NT4 via Dateisuche in *.dll den Text CopyProfileDirectory suche, so erhalte ich die Datei Syssetup.dll leider exportiert die Syssetup.dll diese Fkt nicht sondern "versteckt" diese irgendwo. Auch woanders habe ich keinerlei Hinweise dazu gefunden.

      Vielleicht weiß jemand mehr darüber bzw. hat sonst noch eine Idee.

      Grüße, Michae

      Comment


      • #4
        Hallo,

        eine Funktion CopyProfileDirectory ist in der Hilfe des <i>Microsoft Platform SDK</i> nicht vorhanden.

        Neben der offiziellen Backup-Funktion von Windows NT/2000 können dieses Dateien (ntuser.dat) auch über eines der Kommandozeilen-Tools von NT/2000 in ein wählbares Verzeichnis gesichert werden. Microsoft hat dazu in seiner Knowlegde Base eine Beschreibung. Erst danach "darf" man selbst mit diesen Dateien hantieren. Und da die Systemstabilität von NT/2000 im Vordergrund steht, habe ich für diese Restriktionen vollstes Verständnis ;-

        Comment


        • #5
          Andreas,

          um welches Kommandozeilenprogramm handelt es sich denn hier?

          Michae

          Comment


          • #6
            Hi Michael,<br>
            <br>
            in dem von Dir genannten KB-Artikel wird eine Log-Datei angezeigt.<br>
            CopyProfileDirectory ist nur ein Kommentar in dieser Datei, der<br>
            einleitet, von wo, nach wo das Profil des Users beim Abmelden kopiert<br>
            wurde. (Dort wird also mit Roaming Profiles gearbeitet)<br>
            Mit Welcher Funktion dies vonstatten gegangen ist wird leider nicht<br>
            beschrieben.<br>
            <br>
            Ciao<br>
            Chri

            Comment


            • #7
              @Nico, jo hätt ich.
              Einfach eine Inject-DLL in den Systemprozess injezieren, die startet einen Thread und öffnet das File mit OPEN_EXISTING, kommt so ans Handle ran da ich annehme das der Systemprozess innerhalb seinen Prozessraumes sehr wohl selber die Datei mehrmals öffnen kann.

              Gruß Hage

              Comment


              • #8
                Nein, die Datei ist exclusiv geöffnet, aber ich habe auch schon erfolgreich getestet das Handle zu duplizieren (zum Auslesen), der System-Prozeß teilt ja so gerne mit sich selbst =) (dabei sind aber diverse Rechte-spielchen nötig)<br>
                Wie auch immer, keine Sache, die man unter mehr als einem netten Versuch einstufen sollte, ist eben nichts für production systems...

                Gruß Nic

                Comment


                • #9
                  Jo, wenn ich aber nun den Code direkt in den Systemprozess injeziere, "erbt" ja der Code auch alle Systemrechte (habs schon hingekriegt). Die Frage ist nur ob innerhalb des Systemprozesses die datei mehrfach geöffnet werden kann, und ich meine das sollte möglich sein. Ansonsten müsste der Systemprozess EINEN einzigsten handler für diese datei besitzen und alle Zugriffe müssten über diese handle gehen. Dann wäre es auch sehr wahrscheinlich das es eine undokumentirte System API-funktion dafür geben muss. So wie ich aber M$ technisches "Sachverständniss" kenne, werden sie sich die Mehrfachnutzung dieser datei über mehrere handles NICHT verbaut haben.

                  Gruß Hage

                  Comment

                  Working...
                  X