none
Inhalt einer Systemdatei auslesen RRS feed

  • Frage

  • Hallo Community

    Ich schreibe der Zeit an einem Programm das die MD5 einer Datei ausgibt. Das funktioniert so weit auch. Nur mit System Dateien, wie der atapi.sys, nicht, da ich immer keinen zugriff drauf habe, weil sie von einem anderen Prozess verwendet wird. Gibt es eine Möglichkeit den Inhalt der atapi.sys oder anderen Systemdateien auszulesen?

    MfG

    pc-jedi

    Dienstag, 13. Juli 2010 19:20

Antworten

  • Hallo pc-jedi!

    Bin Gerade auf die neue Version(Visual c++ 2010 Express Edition) umgestiegen.

    Die Express Edition kann keine x64 Programme erstellen.

    Funktioniert das Programm dann auch auf 32bit OS?

    Nein, natürlich nicht...
     Wenn Du bei 32-Bit bleiben willst, dann kannst Du alternativ auch die "File-System-Redirection" in Deinem Fall ausschalten. Dann sollte es auch mit Deinem 32-Bit Programm auf einem x64 System funktionierne. DU musst nur die entsprechenden Methode "dynamisch" ansprechen (LoadLibrary/GetProcAddress).

    Siehe: Wow64DisableWow64FsRedirection
    http://msdn.microsoft.com/en-us/library/aa365743

    File System Redirector
    http://msdn.microsoft.com/en-us/library/aa384187


    Jochen Kalmbach (MVP VC++)
    Mittwoch, 14. Juli 2010 08:29

Alle Antworten

  • > Ich schreibe der Zeit an einem Programm das die MD5 einer Datei ausgibt. Das funktioniert so weit auch. Nur mit System Dateien, wie der atapi.sys, nicht, da ich immer keinen zugriff drauf habe, weil sie von einem anderen Prozess verwendet wird. Gibt es eine Möglichkeit den Inhalt der atapi.sys oder anderen Systemdateien auszulesen?
     Siehe: CreateFile mit FILE_FLAG_BACKUP_SEMANTICS
    http://msdn.microsoft.com/en-us/library/aa363858

    Und auch: BackupRead:
    http://msdn.microsoft.com/en-us/library/aa362509

    Um die Privilegien anzupassen siehe auch:
    http://msdn.microsoft.com/en-us/library/ms717797

    Alternativ kannst Du Dich auch mit dem Volume Shadow Copy Service beschäftigen: Damit hast Du Zugriff auf einen Snapshot des Dateisystemes:
    Übersicht:
    http://msdn.microsoft.com/en-us/library/bb968832
    Backup:
    http://msdn.microsoft.com/en-us/library/aa384589


    Jochen Kalmbach (MVP VC++)
    Dienstag, 13. Juli 2010 19:44
  • Hi

    Vielen Dank für deine Hilfe.

    Zur Zeit hänge ich an meiner CreatFile funktion:

    hFile = CreateFile("C:\\Windows\\System32\\drivers\\atapi.sys", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
    

    GetLastError gibt immer 0x6 zurück, aber ich kann mir nicht erklären warum.

    Hoffe du kannst mir auch diesmal wieder helfen.

    MfG

    pc-jedi

    Dienstag, 13. Juli 2010 20:19
  • Was für ein Benutzer bist Du denn? Administrator?
    Ohne Administrator Benutzer (oder besser gesagt Backup-Benutzer) wirst Du das nicht hinbekommen...

    Aber "6" ist schon etwas merkwürdig.... ist das x64? Welches OS?

    Greetings
      Jochen


    Jochen Kalmbach (MVP VC++)
    Mittwoch, 14. Juli 2010 06:21
  • Zur Zeit hänge ich an meiner CreatFile funktion:

    hFile = CreateFile("C:\\Windows\\System32\\drivers\\atapi.sys", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
    
    

    GetLastError gibt immer 0x6 zurück, aber ich kann mir nicht erklären warum.


    Wenn ich diesen Code ausführe, dann öffnet er auf meinem Windows 7 Rechner brav die Datei...
    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Mittwoch, 14. Juli 2010 06:27
    Moderator
  • Was für ein Benutzer bist Du denn? Administrator?
    Ohne Administrator Benutzer (oder besser gesagt Backup-Benutzer) wirst Du das nicht hinbekommen...

    Aber "6" ist schon etwas merkwürdig.... ist das x64? Welches OS?

    Greetings
      Jochen


    Jochen Kalmbach (MVP VC++)

    Ich bin Administrator und habe auch eine manifestfile eingebunden.

    OS: Win7 x64

    Mittwoch, 14. Juli 2010 07:14
  • Bei mir geht ein simples Testprogramm auch ohne Probleme (Win7-x64).
    Du musst es aber als x64 auch starten, da die Datei im x86 Dateisystem nicht vorhanden ist!


    Jochen Kalmbach (MVP VC++)
    Mittwoch, 14. Juli 2010 07:32
  • Wie starte ich den ein Programm als x64?
    Mittwoch, 14. Juli 2010 07:35
  • > Wie starte ich den ein Programm als x64?

    Du musst es als x64 übersetzen!!!

    Welche VS-Version hast Du denn?

    Normalerweise musst Du zuerst eine "x64 "Konfiguration hinzufügen:
    "Build|Configuration Manager...|Active Solution Platform| New..."
    New platform: x64
    Copy from: Win32


    Jochen Kalmbach (MVP VC++)
    Mittwoch, 14. Juli 2010 08:00
  • Bin Gerade auf die neue Version(Visual c++ 2010 Express Edition) umgestiegen.

    Funktioniert das Programm dann auch auf 32bit OS?

    Mittwoch, 14. Juli 2010 08:10
  • Hallo pc-jedi!

    Bin Gerade auf die neue Version(Visual c++ 2010 Express Edition) umgestiegen.

    Die Express Edition kann keine x64 Programme erstellen.

    Funktioniert das Programm dann auch auf 32bit OS?

    Nein, natürlich nicht...
     Wenn Du bei 32-Bit bleiben willst, dann kannst Du alternativ auch die "File-System-Redirection" in Deinem Fall ausschalten. Dann sollte es auch mit Deinem 32-Bit Programm auf einem x64 System funktionierne. DU musst nur die entsprechenden Methode "dynamisch" ansprechen (LoadLibrary/GetProcAddress).

    Siehe: Wow64DisableWow64FsRedirection
    http://msdn.microsoft.com/en-us/library/aa365743

    File System Redirector
    http://msdn.microsoft.com/en-us/library/aa384187


    Jochen Kalmbach (MVP VC++)
    Mittwoch, 14. Juli 2010 08:29
  • Ok dann bedanke ich mich erst mal recht herzlich für diesen tollen Support :) und werde mich mal in diesen File System Redirector einlesen.
    Mittwoch, 14. Juli 2010 08:45
  • So eine Frage hätte ich noch:

    Die Funktion Wow64DisableWow64FsRedirection ist ja unter XP x86 nicht verfügbar. Wie mach ich es das die Anwendung, ohne sie für jede OS Version umzuprogrammieren auch auf XP x86 läuft?

    Mittwoch, 14. Juli 2010 16:04
  • > Die Funktion Wow64DisableWow64FsRedirection ist ja unter XP x86 nicht verfügbar. Wie mach ich es das die Anwendung, ohne sie für jede OS Version umzuprogrammieren auch auf XP x86 läuft?

    Hatte ich doch geschrieben... LoadLibrary und GetProcAddress...


    Jochen Kalmbach (MVP VC++)
    Mittwoch, 14. Juli 2010 16:28
  • > Die Funktion Wow64DisableWow64FsRedirection ist ja unter XP x86 nicht verfügbar. Wie mach ich es das die Anwendung, ohne sie für jede OS Version umzuprogrammieren auch auf XP x86 läuft?

    Als Beispiel, wie man sowas macht, kannst Du dies hier verwenden:
    http://msdn.microsoft.com/en-us/library/ms684139


    Jochen Kalmbach (MVP VC++)
    Mittwoch, 14. Juli 2010 17:00