Deutsch
Stammtisch & Café

TNT und GetLastError

 
Guten Abend...

Ist es möglich bei anderen Prozessen den letzten aufgetretenen API-Fehler (GetLastError) auszulesen?

Hab grad einen Anruf bekommen => muß gleich arbeiten. Alles weitere deshalb morgen .

Gruß

Andreas
 
04.09.2006  
 



So, dann mal los...
Es geht um folgenden Quelltext:
KompilierenMarkierenSeparieren
Def @GetLastError(0) !"KERNEL32","GetLastError"
Def @SetLastError(1) !"KERNEL32","SetLastError"
DEF @GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
Def @FreeLibrary(1) !"kernel32","FreeLibrary"
Declare Error&,Zurück&,Prod&
WindowStyle 31
WindowTitle "SetLastError"
Window 0,0-640,440
LET Zurück&=@CreateButton(%HWND,"Fehler setzen",20,20,300,30)
LET Prod&=@CreateButton(%HWND,"Fehler produzieren",20,80,300,30)

While 0=0

    Waitinput

    IF @ButtonClicked(Zurück&)

        CLS
        Locate 15,0
        @SetLastError($0ABC1234)
        Print "$"+@HEX$(@GetLastError()),"      "+@str$(@GetLastError())

    ElseIF @ButtonClicked(Prod&)

        CLS
        Locate 15,0
        @FreeLibrary(0)
        Print @GetLastError()

    endif

wend


Nach dem Starten des Quelltextes wird zuerst der Button Fehler setzen angeklickt.
Jetzt starten wir mal [...]  und markieren den Prozess PROFAN.EXE.
Im Menü wird dann Programm/Optionen und Zahl in Bytefolge ausgewählt und in den dann erscheinenden Dialog $ABC1234 eingegeben. Nun Klicken wir rechts ins Treeview auf PROFAN.EXE, wählen Speicher durchsuchen aus und klicken danach (ohne im Dialog irgendetwas zu ändern) auf den Button Speicher durchsuchen. TNT sucht nun im Speicher von PROFAN.EXE nach der Zahl $ABC1234, die dem Wert von GetLastError entspricht.
Ziemlich am Ende des für den User zugänglichen virtuellen Prozessspeichers wird [...]  fündig:
Windows2000 (SP2 und SP4) => Adresse 2147344436

Ändern wir nun durch anklicken des Buttons Fehler produzieren den Wert von GetLastError, ändert sich auch der Wert, der im Speicher an dieser Stelle steht.

Diese Adresse bezieht sich aber scheinbar nicht nur auf diesen einen Prozess, sonder an dieser Adresse scheint in jedem Prozess der Wert von GetLastError zu stehen.
Was mich jetzt noch interessiert: Wie lautet die gefundene Adresse unter XP?
Kann mir da jemand helfen??
 
05.09.2006  
 



Unter nicht NT-basierenden Systemen sieht die Sache dagegen anders aus.
Da der virtuelle Speicher, in dem der Wert von GetLastError gespeichert wird, an dieser Stelle komplett anders verwaltet wird als unter NT, hat dort jeder Prozess eine andere Errorcodeadresse.
 
03.10.2006  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.039 Betrachtungen

Unbenanntvor 0 min.
H.Brill28.04.2018
Christian Hahn14.12.2011

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

unbekannt (3x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie