BIOS Aufruf zum System Reset - Geht das in C++



  • Kann man in Windows 7 oder Windows XP einfach so zwischen Real und Protected Mode hin und herschalten ?

    Oder müsste man dafür einen extra Treiber schreiben ?



  • In Windows (ab NT 3.51) kann man nicht umschalten... auch nicht mit einem Treiber... zumindest nicht so, dass man wieder zurpck kommt 😉

    Für was sollte sowas gut sein?



  • Irgendwie sind die Resultate noch nicht so, wie ich es mir vorstelle.
    Wahrscheinlich gehe ich irgendwie den falschen Weg bisher.

    Mal ein anderer Versuch:

    Gibt es eine Möglichkeit, per API einen RESET auszulösen? D.h. den gleichen Effekt, als ob man den Reset Knopf am PC drückt? Theoretisch müsste dieses doch direkt den Cache in Windows löschen und ggf. auch den Hardware Cache der Festplatte?

    Bei Microsoft habe ich nichts gefunen, das einen direkten Reset Befehl auslöst...

    Auch wenn es "Off Topic" ist: wäre das unter Linux einfacher zu gestalten? 😕

    Danke im voraus.



  • Du willst doch einen Stromausfall simulieren, was willst du da mit dem Reset Knopf, mach doch einfach einen Stromausfall, aka Stecker ziehen!?



  • Du willst doch einen Stromausfall simulieren, was willst du da mit dem Reset Knopf, mach doch einfach einen Stromausfall, aka Stecker ziehen!?

    Das bring nichts für meinen Einsatzzweck!

    Wie ich am Anfang geschrieben habe:

    Da ich über den Abschaltzeitpunkt weiss, was für Daten geschrieben wurden, kann ich nachher feststellen, wieviel Daten so verloren gingen.

    Schreibe ich mit der entsprechenden Software eine bestimmte Menge an Daten auf die Festplatte. Gleichzeitig läuft auf dem entsprechenden PC noch einiges an anderer Software, was auch auf die Festplatte zugreift. Zu einem fest definierten Zeitpunkt will ich eine Abschaltung bzw. Reset auslösen. Da ich diesen Zeitpunkt kenne und weiss, wieviel Daten eigentlich auf die Festplatte geschrieben werden sollten, kann ich feststellen, wieviel Daten durch den Cache verloren gingen.
    Diese Daten brauche ich dann pro Kundenpc, auf dem unsere komplette Software drauf läuft (ältere System, neuere System, Intel, AMD, etc.).

    Mittels "Stecker ziehen" kann ich keinen fest definierten Zeitpunkt erstellen und somit auch keine auswertbaren Messergebnisse.



  • @Annon Nemo:
    Was du da schreibst klingt nach bestenfalls Voodoo, schlimmstenfalls Pfusch.

    Auch verstehe ich nicht ganz was du damit erreichen willst.
    Wenn du Platten verwendest die korrekt flushen und Software die korrekt Flush Kommandos abschickt, dann ist das ganze Thema gegessen.

    Wenn du den Write-Cache der Platte und vom OS abdrehst im Prinzip genau so.

    Und wenn beides nicht geht, dann macht es IMO immer noch keinen Sinn da etwas zu "messen", weil du bloss irgendwelche Hausnummern rausbekommen wirst.

    Du kannst einfach nicht sicher sagen welche Daten wann geschrieben werden. Aussagen wie "es können max. die letzten 20 MB fehlen" sind daher auch nicht möglich.

    Bzw. falls es nicht um eine Messung/Aussage dieser Art geht, worum geht es dann?

    Also ich halte es für Unsinn, aber egal. Kann dir ja trotzdem deine Fragen beantworten 🙂

    Also. Nein, es gibt keinen solchen API Call. Es sollte allerdings möglich sein einen Triple-Fault zu erzwingen, der dann die CPU resettet. Ist allerdings auch nicht so einfach, und vor allem auch nicht ohne Treiber hinzubekommen. Und dann gibt es natürlich noch KeBugCheckEx und ähnliche Funktionen.
    Nichts von dem wird allerdings dazu führen dass die HDD ihre Caches flusht - wieso sollte sie das auch tun, wäre für sämtliche normalen Anwendungen total kontraproduktiv. Die Platte *soll* ja *nicht* Daten verlieren wenn man den PC resettet oder abschaltet.

    Was allerdings funktionieren sollte...

    Bau die Lösung über Relais das den Strom abschaltet.
    Dein Programm das die Daten schreibt sagt dann irgendwann "jetzt". Eine kurze Zeit später ist dann der Strom weg.

    Und um genau zu bestimmen wann, lässt du dein Programm einfach laufend Nachrichten an einen anderen PC schicken, wo ein anderes Programm diese aufzeichnet. Entweder übers Netz oder über ne serielle Schnittstelle oder was auch immer. Was du da verschickst bleibt dir überlassen - könnte die Systemzeit sein, oder auch die Anzahl der Bytes die das Programm momantan gerade in die Kontrolldatei geschrieben hast -- was du halt an Daten brauchst um diesen Zeitpunkt festnageln zu können.

    Sowohl Ethernet (eigene Verbindung vorausgesetzt wo nix los ist bis auf deine Datenpakete) als auch ne serielle Schnittstelle sind schnell genug dass du den Zeitpunkt auf wenige Millisekunden (einstellig) genau festnageln kannst.



  • Auch verstehe ich nicht ganz was du damit erreichen willst.
    Wenn du Platten verwendest die korrekt flushen und Software die korrekt Flush Kommandos abschickt, dann ist das ganze Thema gegessen.

    Wir verbauen eine Software in ein Produktionssystem. Überwachung der produzierten Waren auf Qualität. Die Software kaufen wir von einem Partnerunternehmen hinzu. Was die mit den Schreibzugriffen machen wissen wir nicht, interessiert uns auch nicht, da wir nicht in diesem Bereich der Entwicklung involviert sind.d.h. keine Möglichkeit Änderungen zu erreichen...

    Du kannst einfach nicht sicher sagen welche Daten wann geschrieben werden. Aussagen wie "es können max. die letzten 20 MB fehlen" sind daher auch nicht möglich.

    Bzw. falls es nicht um eine Messung/Aussage dieser Art geht, worum geht es dann?

    Auf die Festplatte werden die Ergebnisse der Überwachungssoftware geschrieben. Ein anderes Programm greift auf diese Logdateien zu. Je nach Ergebniss wir das Podukt zu Verpackung, Nachbearbeitung oder Vernichtung zugeführt.
    Da in dem System keine USV Verbaut werden kann, muss sichergestellt sein, dass bei einer Stomabschaltung der Maschine (externes Sicherheitssystem dass bei Fehlern den Strom abschaltet) alle ungeprüften Produkte neu überprüft werden.

    Der Endkunde hat nun die Anforderung, dass man den Zeitraum, für wieviele Produkte bei einer Stromabschaltung keine Logdaten mehr vorhanden sind.

    Da der Datenabgriff von unserem Kontrollsystem auf das Verteilungs-/Verpackungssystem von einem Kundenprogramm erfolgt haben wir auch hier keine Ahnung, was die Software genau macht. Übertragen werden die Daten per Netzwerk.

    Näheres kann/darf ich auch nicht dazu sagen. Abschließend nur eines: Industriekunden sind etwas anderes als kaufmännische Kunden. Wenn in deren Pflichtenheft steht, dass ein bestimmter Wert anzugeben ist (hier: wieviel Daten gehen bei einer Stromabschaltung verloren und wieviel muss daher neu Überpüft werden) dann ist dieses anzugeben. Keine Angabe == Kein Auftrag. Diskussionsvolumen: Nein, wenn keiner die Anforderung erfüllen kann, wird das gesamte Projekt neu geplant. Ob man dann nochmal bieten kann ist nicht planbar. Bei kaufmännischen Kunden kann man noch über Kleinigkeiten sprechen. Bei Industriekunden nicht.

    Daher auch das Problem mit einer Treiber Lösung: Stimmen die Werte auch, wenn der Treiber nicht installiert ist? Verändert der Treiber das Messverhalten? Was sagt die Versicherungen hierzu? etc.

    Ausserdem reden wir hier über grössere Beträge. Die Software/PC macht vieleicht 15% vom Gesamtvolumen aus.

    Danke für die Informationen. Ich werde das mit dem Parallel Relais verwenden.

    Moderator: Schliessen bitte... 😃



  • Du kannst das ganze ganz einfach mit einem Treiber lösen. Der Treiber startet dann den Rechner neu. Das geht... oder einfach ein BSOD im Treiber auslösen...

    Oder Du verwendest einfach das NotMyFault Proramm:
    http://download.sysinternals.com/Files/Notmyfault.zip (sogar mit Source).

    Damit kannst Du dann bequem einen Restart auslösen, wenn Du auf "Do Bug" drückst...



  • @Jochen:
    Was hat ein BSOD mit der Festplatte zu tun? Die hört ja deswegen nicht auf "heisse" Daten aus ihrem Writeback Cache auf die Platter zu schreiben.

    @Annon Nemo:

    Daher auch das Problem mit einer Treiber Lösung: Stimmen die Werte auch, wenn der Treiber nicht installiert ist? Verändert der Treiber das Messverhalten? Was sagt die Versicherungen hierzu? etc.

    Die Werte stimmen so oder so nicht, bzw. sind bestenfalls Annäherungen, ermöglichen allerdings keine Aussage über irgendwelche Maximal-/Minimalwerte.

    Was den Treiber angeht: ob ein Treiber der im Prinzip nix tut (bis zu dem Zeitpunkt wo man ihm sagt "jetzt tu mal resetten") installiert ist oder nicht ändert schonmal nix. Nur wirst du mit "Reset über den Treiber" eben nicht unbedingt die gleichen Werte bekommen wie mit "Strom aus".



  • @hustbaer: Ich verstehe ja immer noch nicht ganz was er will... aber belassen wir es jetzt dabei... so wirre Aussagen hab ich schon lange nicht mehr gehört...


Anmelden zum Antworten