GetLastError für einen anderen Prozessthread

Tag,
wie ist es am einfachsten den Error-Code eines anderen Threads zu bekommen? Gibt es auch eine Möglichkeit ihn zu bekommen, ohne die WinAPI in dem gewünschtem Prozess auszuführen? Von wo bekommt eigentlich GetLastError die Rückgabewerte, also wo ist der Error-Code hinterlegt?

Danke!
 
der wert wird in einer static var in dem modul von gle u. sle liegen ... prozesskontext

injecte einfach nen eigenn thread in d. process und lass den das via memfiles durchballern

<7drunk<
 
http://en.wikipedia.org/wiki/Win32_Thread_Information_Block

Der Errorcode wird dann auf FS:[0x34] gespeichert.
Dieser ganze Block ist jedoch Thread-spezifisch.
Aber auch das kann man "umgehen":

Code:
    CONTEXT ThreadContext;
    LDT_ENTRY Selector;
    DWORD TIB;

    ThreadContext.ContextFlags = CONTEXT_SEGMENTS;

    GetThreadContext(hThread,&ThreadContext);
    GetThreadSelectorEntry(hThread, ThreadContext.SegFs, &Selector);

    TIB = (Selector.HighWord.Bits.BaseHi << 24) + (Selector.HighWord.Bits.BaseMid << 16) + Selector.BaseLow;

Jetzt noch 0x34 addieren und als Pointer casten.
Den Wert auslesen und schon solltest du den Error-Code besitzen.

MfG
Inliferty
 
Deine Lösung ist recht elegant, hat aber den Haken, dass NtQuery...-Funktion auch mal entfernt werden könnte in zukünftigen Windowsversionen. Da aber keine echte Alternative dazu besteht, sehe ich das aber nicht.
 
Zurück
Oben