Hallo, ich möchte das Erstellungsdatum von pagefile.sys mit C++ (WIN32 API) auslesen. Leider bekomme ich mit CreateFile(), GetFileAttributeEx() und _stat() keinen Zugriff darauf. Kennt jemand noch einen weitere Möglichkeit? Alternativ geht auch 'irgendwas anderes'. Es geht nur darum, ein (möglichst) aktuelles Datum auszulesen - ohne die System-Uhr zu benutzen. Danke, Peter
Jan H. schrieb: > Temporäre Datei anlegen und davon Erstellungsdatum lesen? Es müsste wohl was sein, was von Windows beim Start selber generiert wird, um Uhrzeit-Manipulationen (größtenteils) auszuschließen. Wenn ich sowas anlege, dann bekomm ich vermutlich auch nur die System-Uhr.
Am besten beschreibst du erst einmal, was du bezweckst. Windows kann ich auch mit einer geänderten Zeit neustarten, damit schließt du schon einmal keine Manipulationen aus. Ein Webservice kann dir die echte Zeit geben, wenn du Internetzugriff voraussetzen kannst. Du könntest auch das Systemlog durchforsten, oder folgendes Dokument für Tipps: https://digital-forensics.sans.org/community/papers/gcfe/detection-backdating-system-clock-windows_2870
Ganz primitiv: "dir c:\pagefile.sys" aufrufen und Ausgabe parsen. Anderer Ansatz: System-Eventlog parsen und Eintrag für Systemstart extrahieren. Noch ein Ansatz: Wmic os get lastbootuptime und Ausgabe parsen -- oder das API-Äquivalent davon herausfinden und aufrufen.
Rufus Τ. F. (rufus) schrieb: >Ganz primitiv: >"dir c:\pagefile.sys" aufrufen und Ausgabe parsen. pagefile.sys ist üblicherweise hidden. Also wenn schon, dann "dir /a ..." Allerdings zeigt das wohl nur die Änderungszeit an. Wenn es wirklich um die Zeit der Erstellung geht, dann "dir /a /tc ...".
Ja, dir /ah ist irgendwie untergegangen.
> Allerdings zeigt das wohl nur die Änderungszeit an.
Die ist die Zeit des letzten Systemstarts.
Parsen ist nicht so meine Sache. Ich lese jetzt ein paar Systemordner ein und nehme das neueste Datum. Das ist genau genug. Danke für die Tipps.
Peter schrieb: > Ich lese jetzt ein paar Systemordner ein und nehme das neueste Datum. Was möchtest Du denn damit bestimmen? Welche Flags hast Du bei Deinem CreateFile-Aufruf für dwDesiredAccess verwendet?
Rufus Τ. F. schrieb: > Was möchtest Du denn damit bestimmen? > > Welche Flags hast Du bei Deinem CreateFile-Aufruf für dwDesiredAccess > verwendet? Es geht um eine Laufzeitbegrenzung einer Software. Die Demo soll bis zum Tag X laufen. Wenns dann ein paar Tage mehr sind macht es auch nichts. Ich nehme dazu FindFirstFile() und FindNextFile() und lese dann immer das letzte Änderungsdatum verschiedener Ordner aus. Das neueste Datum nehm ich dann. Danach kann ich das gefundene Datum dann noch einmal mit der Systemzeit vergleichen und erneut das neuere Datum nehmen. Danke.
Aha. Dann hilft Dir pagefile.sys nicht, das verändert nämlich seine Änderungszeit nur beim Booten, danach aber nicht mehr. Damit kann man sehr schön rausfinden, wann das System das letzte Mal gebootet wurde, aber das kann --je nach Uptime des Rechners-- auch schon mehrere Monate bis Jahre her sein. Du willst also abfangen, daß jemand die Systemzeit zurückstellt, um Dein Programm für längere Zeit nutzen zu können. Alternativ könntest Du die Aufrufe Deines Programmes und die (kumulierte) Laufzeit bestimmen, und nach X Aufrufen oder Y Stunden die Segel streichen. Natürlich kann jemand, der es drauf anlegt, auch solche Mechanismen umgehen. Du könntest natürlich auch einfach einen ntp-Zugriff auf einen Zeitserver im Internet machen -- und wenn der nicht möglich ist, die Funktion verweigern. Andererseits: Meinst Du, daß Deine Software so interessant ist, daß dieser ganze Benutzergängelungsaufriss nötig ist?
Das ist doch Pfusch. Viele haben heute gar keine Auslagerungsdatei mehr. RAM ist billig und die SSD wird auch geschont.
Rufus Τ. F. schrieb: > Alternativ könntest Du die Aufrufe Deines Programmes und die > (kumulierte) Laufzeit bestimmen, und nach X Aufrufen oder Y Stunden die > Segel streichen. > > Natürlich kann jemand, der es drauf anlegt, auch solche Mechanismen > umgehen. > > Du könntest natürlich auch einfach einen ntp-Zugriff auf einen > Zeitserver im Internet machen -- und wenn der nicht möglich ist, die > Funktion verweigern. > > Andererseits: Meinst Du, daß Deine Software so interessant ist, daß > dieser ganze Benutzergängelungsaufriss nötig ist? Nein, meine Software ist bei weitem nicht so interessant. Deshalb spar ich mir das Alles was Du da aufzählst und lese statt dessen nur ein paar Ordner-Infos ein.
Jan H. schrieb: > Am besten beschreibst du erst einmal, was du bezweckst. > > Windows kann ich auch mit einer geänderten Zeit neustarten, damit > schließt du schon einmal keine Manipulationen aus. > Dann starte W10 einmal mit der vorher im Bios vollkommen verstellten Uhr und wundere Dich über die Uhrzeit im Anmeldeschirm...
Peter schrieb: > und lese statt dessen nur ein paar Ordner-Infos ein. Wenns genauer werden soll, wäre NTP-Eintrag nützlich? NtpServer Registry Key? Wichtiger als Klimmzüge, die Kunden verärgern, ist ein guter Service. Schreib nach dem x-ten Aufruf nach x Tagen Deine Serviceadresse + Bestellhotline auf den Monitor. Die könnte ja jede Woche etwas größer werden?
Peter schrieb: > pagefile.sys mit C++ (WIN32 API) auslesen... Leider bekomme ich mit > CreateFile(), GetFileAttributeEx() und _stat() keinen Zugriff darauf. Bei mir geht es ohne W32API in C++ einfach mit stat() aus <sys/stat.h>, auch dann, wenn pagefile.sys versteckt ist. Neuestes Datum/Uhrzeit in struct stat liefert bei mir der Member st_ctime (Datum der letzten Statusänderung). Dies gilt hier zumind. für das Administrator-Konto meines Rechners. LG
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.