Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan > Anregungen & Bugreports

Anregungen & Bugreports Für Vorschläge an den Autor Roland und neue XProfan-Versionen

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag Dateien lassen sich nicht...
Aufrufe: 8, Antworten: 1
Gehe zum ersten neuen Beitrag Suche Programm um Werbung zu...
Aufrufe: 39, Antworten: 2
Gehe zum ersten neuen Beitrag McAfee AVERT Stinger...
Aufrufe: 2, Antworten: 0
Gehe zum ersten neuen Beitrag Sticky Password 6.0.2...
Aufrufe: 3, Antworten: 0
Gehe zum ersten neuen Beitrag Sicher Löschen 3.19 (Windows)
Aufrufe: 2, Antworten: 0
Gehe zum ersten neuen Beitrag Cleaning Suite 2.1 (Windows)
Aufrufe: 2, Antworten: 0
Gehe zum ersten neuen Beitrag GoodSync 9.2.0.0 (Windows,...
Aufrufe: 2, Antworten: 0
Gehe zum ersten neuen Beitrag GoodSync 9.2.0.0 (Windows)
Aufrufe: 2, Antworten: 0
Gehe zum ersten neuen Beitrag Trillian 1.3.0 (37) (Mac OS X)
Aufrufe: 2, Antworten: 0
Gehe zum ersten neuen Beitrag Maxthon Browser 2.6.5...
Aufrufe: 2, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 05.02.2010, 19:54   #1 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.776
Standard Problem mit Fehlerauswertungen?

Ich glaube, das hier ist evtl. das gleiche Problem...
Wenn ich ab Vista eine EXE im Ordner Program Files (Rechte und Umleitung des Ordners beachten) öffne (kein Manifest), erzeugt folgender Quelltext
Code:
Declare File$, F#
File$ = LoadFile$("Datei laden", "*.*")
'Set("FileMode",0)
IF File$ <> ""
 Assign #2, File$
 OpenRw #2
 DIM f#, FileSize(File$)
 Assign #1, File$
 OpenRw #1
 Print FileSize(File$)
 BlockRead(File$, f#, 0, FileSize(File$))
 $B "Test"
 Print Char$(f#, 0, SizeOf(f#))
 $B "Test 2"
 CloseRw #1
 CloseRw #2
 dispose f#
endif
bei mir folgenden Fehler:


Wie kommt das?
OpenRW schlägt hier fehl, da zum Öffnen (Read / Write) einer EXE im Ordner Program Files Adminrechte erforderlich sind - die hat das Programm aber nicht.
Normalerweise würde hier in VirtualStore umgeleitet werden - bei bestimmten Dateiendungen findet aber eine solche Umleitung nicht statt (unter anderem EXE und DLL Dateien). Profan merkt sich hier, das OpenRW fehlgeschlagen ist (Errorcode 5 = Zugriff verweigert). BlockRead würde hier problemlos funktionieren, aufgrund des vorangegangenen Fehlers schlägt der Befehl hier aber fehl. Muss das sein?
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 05.02.2010, 20:09   #2 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.776
Standard

@Roland:
Das Problem ist schon sehr alt. Blätter mal einige Jahre in deinem Forum zurück, da hast du damals dazu angeraten, vor jeder Dateiaktion %IORESULT auszulesen und damit auf 0 zu setzen.
Ich persönlich denke, dass man Fehler dort auswerten sollte, wo sie passieren und nicht einen Fehlercode mitschleppen und dann auf die Sachen anwenden sollte, bei denen gar kein Fehler passiert...
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Alt 05.02.2010, 21:13   #3 (Direktlink)
RGH
Forenmaskottchen
 
Benutzerbild von RGH
 
Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
Standard

@AHT: Hier handelt sich um das ganz normale Verhalten von Pascal-Dateioperationen. Wenn man sich an meinen Rat hält, kann man damit gut umgehen. Gerade nach einem Öffnen einer Datei sollte man immer überprüfen, ob es geklappt hat.

Aber in diesem speziellen Fall spricht natürlich nichts dagegen, dass ich in der BlockRead-Funktion %IOResult sicherheitshalber selbst zurücksetze. In XProfan 12 wird es so sein.

Gruß
Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c
AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c


http://www.xprofan.de
RGH ist offline   Mit Zitat antworten
Alt 05.02.2010, 22:23   #4 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.776
Standard

Das ganze ist eine böse Falle. Im Prinzip müsste man dann ja wirklich vor jeder Dateioperation
  • Print #
  • Input #
  • Rewrite
  • OpenRw
  • Open
  • Close
  • CloseRw
  • BlockRead
  • BlockWrite
  • GetFileSize
  • GetFAttr
  • GetFDate$
  • GetFTime$
  • Append
  • Seek
  • ...?
zumindestens folgendes verwenden:
Code:
io%=%IOResult
Ab Vista läuft bei Dateien sehr viel schief, da selbst ein Admin normalerweise keine Adminrechte hat - ob etwas schief läuft und wann, das ist unter anderem von der Datei selbst und den Systemgegebenheiten abhängig (auch davon, wie das Programm gestartet wurde) - wie man in meinem Beispiel sieht, sogar von der Dateiendung.
Ein Programm läuft unter Umständen (setzt man nicht zurück) dann auf dem einen Rechner, auf dem nächsten läuft es aber wiederum nicht. Da nicht genau fest steht, welche Profanbefehle überhaupt intern auf %IORESULT reagieren, weiß man auch nicht genau, was man überhaupt zurücksetzen muss und was nicht...
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Alt 05.02.2010, 22:56   #5 (Direktlink)
RGH
Forenmaskottchen
 
Benutzerbild von RGH
 
Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
Standard

Zitat:
Zitat von AHT Beitrag anzeigen
Das ganze ist eine böse Falle. Im Prinzip müsste man dann ja wirklich vor jeder Dateioperation ...
Nein, nicht vor, sondern nach jeder Dateioperation sollte man überprüfen, ob sie funktioniert hat, in dem man %IOResult abfragt. Also auf alle Fälle nach OpenRW, Reset, Append, Rewrite und natürlich nach allen Schreib- und Leseoperationen, bei denen eine Dateinummer einer geöffneten Datei anzugeben ist.
Die genannten Rechteprobleme zeigen sich in der Regel ja bereits beim Öffnen der Datei. Wenn das schon nicht klappt, sind weitere Schreib- oder Leseoperationen hinfällig.
Auch nach dem Schließen der Datei mit Close sollte mit %IOResult überprüft werden, ob es funkionierte.

Tatsächlich wird bei den allermeisten Dateioperationen allerdings %IOResult bereits von mir vor Ausführung der Funktion zurückgesetzt. Bei BlockWrite und BlockRead war das bisher nicht der Fall, wird aber in XProfan 12 auch so sein.

Gruß
Roland


Gruß
Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c
AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c


http://www.xprofan.de

Geändert von RGH (05.02.2010 um 23:02 Uhr)
RGH ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 05.02.2010, 23:21   #6 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.776
Standard

Zitat:
Zitat von RGH Beitrag anzeigen
Nein, nicht vor, sondern nach jeder Dateioperation sollte man überprüfen, ob sie funktioniert hat, in dem man %IOResult abfragt. Also auf alle Fälle nach OpenRW, Reset, Append, Rewrite und natürlich nach allen Schreib- und Leseoperationen, bei denen eine Dateinummer einer geöffneten Datei anzugeben ist.
Nach welchen Befehlen genau? Zum Beispiel auch bei GetFileSize? Siehe auch hier! Was setzt denn jetzt %IORESULT überhaupt alles?

Zitat:
Zitat von RGH Beitrag anzeigen
Die genannten Rechteprobleme zeigen sich in der Regel ja bereits beim Öffnen der Datei. Wenn das schon nicht klappt, sind weitere Schreib- oder Leseoperationen hinfällig.
Das Problem dabei ist aber, dass die darauffolgenden Aktion nichts mit dem vorher geschehenen Fehler zu tun haben muss und trotzdem fehlschlägt, obwohl sie eigentlich funktionieren würde.

Zitat:
Zitat von RGH Beitrag anzeigen
Tatsächlich wird bei den allermeisten Dateioperationen allerdings %IOResult bereits von mir vor Ausführung der Funktion zurückgesetzt.
Bei welchen genau und bei welchen Befehlen wird das nicht getan? Was reagiert überhaupt genau auf %IORESULT?
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Alt 05.02.2010, 23:45   #7 (Direktlink)
RGH
Forenmaskottchen
 
Benutzerbild von RGH
 
Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
Standard

Zitat:
Zitat von AHT Beitrag anzeigen
Nach welchen Befehlen genau? Zum Beispiel auch bei GetFileSize? Siehe auch hier! Was setzt denn jetzt %IORESULT überhaupt alles?
Wie ich schon schrieb: alle Dateioperationen, die eine Dateinummer als Parameter erwarten.

Zitat:
Das Problem dabei ist aber, dass die darauffolgenden Aktion nichts mit dem vorher geschehenen Fehler zu tun haben muss und trotzdem fehlschlägt, obwohl sie eigentlich funktionieren würde.
Das ist natürlich konstruierbar: Du öffnest Datei A. Dann öffnest Du Datei B, ohne dich darum zu kümmern, ob es funktioniert hat. Es schlägt fehl und Du merkst es nicht. Nun machst Du wieder etwas mit Datei A und der Fehler schlägt zu, weil Du versäumt hast, ihn zuvor abzufangen.

Gruß
Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c
AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c


http://www.xprofan.de
RGH ist offline   Mit Zitat antworten
Alt 06.02.2010, 05:54   #8 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

Bitte die RTF nicht vergessen, da scheint das gleiche Problem zu sein
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Alt 06.02.2010, 12:19   #9 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.776
Standard

@Roland:
GetFilesize schlägt aber nicht fehl, wenn %IORESULT von einer anderen Aktion gesetzt wurde.

Problem bei der ganzen Sache
%IORESULT dürfte von GetLastError gesetzt werden. Die Adresse des von GetLastError ausgelesenen Errorcodes (LastErrorValue) ist aber ein Member des TEB (das weiß jedes Kleinkind), und der TEB kann problemlos von jeder anderen Anwendung ermittelt und der Inhalt von LastError geändert werden.
Reagieren irgendwelche Profanbefehle also blind auf %IORESULT, kann man das Funktionieren einer Anwendung problemlos von außen steuern - das dazu nötige Programmierwissen geht gegen null.
Bitte mal sehr genau überdenken, was da evtl. noch zu ändern ist...
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Alt 06.02.2010, 12:52   #10 (Direktlink)
RGH
Forenmaskottchen
 
Benutzerbild von RGH
 
Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
Standard

Zitat:
Zitat von AHT Beitrag anzeigen
@Roland:
GetFilesize schlägt aber nicht fehl, wenn %IORESULT von einer anderen Aktion gesetzt wurde.
Ja, das ist die berühmte Ausnahme von der Regel. Da die zugrundeliegende Delphi-Funktion IOResult nicht setzt, frage ich es auch nicht ab.

Zitat:
%IORESULT dürfte von GetLastError gesetzt werden.
Hier liegst Du falsch! %IOResult entspricht exakt der Delphi-Systemvariablen IOResult, die ausschließlich von Delphi-Dateioperationen gesetzt wird, und das mit den in der Hilfe zu %IOResult genannten Werten. Und IOResult gab es schon lange, bevor sich bei Microsoft irgend jemand das GetLastError ausgedacht hatte.

Gruß
Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c
AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c


http://www.xprofan.de
RGH ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 06.02.2010, 17:30   #11 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.776
Standard

Zitat:
Zitat von RGH Beitrag anzeigen
Hier liegst Du falsch!
Hab's gerade getestet, damit liegst du leider falsch

Wie von mir bereits angedeutet lassen sich Profanbefehle durch das Setzen des Fehlercodes ins Nirwana schicken (von einem Fremdprogramm aus). Getestet habe ich das mit BlockRead .

Edit: Kommando zurück, hatte noch einen Copy / Paste Fehler drin . Extern scheint da zum Glück nichts möglich zu sein.
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT

Geändert von AHT (06.02.2010 um 17:39 Uhr)
AHT ist offline   Mit Zitat antworten
Alt 07.02.2010, 08:43   #12 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.776
Standard

Kleiner Zusatz: Was natürlich möglich ist, ist sich einen Pointer auf die interne IORESULT Variable zu verschaffen und diese von einem fremden Prozess aus direkt zu ändern (gestern getestet). In der Praxis wäre ein Hooking da aber besser und leichter auszuführen. Mir ging es da erst mal um einen Zusammenhang mit dem LastErrorValue, und der besteht zum Glück nicht.
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Antwort

  Paules-PC-Forum.de > Programmierung > XProfan > Anregungen & Bugreports

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Direct3D Problem NEUES PROBLEM Bonser Treiber-Forum 3 28.11.2007 14:42
Problem mit Game. Grafiktreiber Problem?!?! Chillers Hardware - Problemlösungen 4 16.05.2006 16:13
Counter Strike: Server Problem sowie Online Problem Simon@Xp Computerspiele 4 10.04.2006 14:30
Bildschirm friert ein - DirectX Problem - ATI-Problem LudBri Allgemein 1 01.01.2006 13:02
Problem (Keine Ahnung, welches Problem das ist) Der_Gast Hardware - Problemlösungen 3 11.10.2003 18:17



Alle Zeitangaben in WEZ +2. Es ist jetzt 21:59 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2