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



  • @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