Deutsch
Forum

Brauche Hilfe bei API ZwOpenProcess...

 
Hallo Leute...

Die API ZwQueryVirtualMemory habe ich ja noch gut hinbekommen, aber bei ZwOpenProcess stehe ich im Augenblick auf dem Schlauch.
Folgender Quellcode:
KompilierenMarkierenSeparieren
Def @ZwOpenProcess(4) !"NTDLL.DLL","ZwOpenProcess"
DEF @LsaNtStatusToWinError(1) !"advapi32","LsaNtStatusToWinError"
Def @GetCurrentProcessID(0) !"KERNEL32","GetCurrentProcessId"
Def @CloseHandle(1) !"KERNEL32","CloseHandle"
Def @GetLastError(0) !"KERNEL32","GetLastError"
Def @SetLastError(1) !"KERNEL32","SetLastError"
DEF @AHFormatMessage(7) !"KERNEL32","FormatMessageA"
Declare AHRückgabe&,AHGETERROR_Buffer#,AHGETERROR_Buffer$
Declare NT_Fehler&,WIN_FEHLER&,P_Handle&,P_ID&
Windowstyle 31
WindowTitle "ZwOpenProcess"
Window 0,0-780,440
LET P_ID&=@GetCurrentProcessID()
@SetLastError(0)
LET NT_FEHLER&=@ZwOpenProcess(@ADDR(P_Handle&),$400,0,P_ID&)
LET AHRückgabe&=@GetLastError()
Fehlercode_bestimmen
PRINT "Letzter API-Fehler nach ZwOpenProcess: "+AHGETERROR_Buffer$
LET WIN_FEHLER&=@LsaNtStatusToWinError(NT_FEHLER&)
LET AHRückgabe&=WIN_FEHLER&
Fehlercode_bestimmen
PRINT "Rückmeldung von ZwOpenProcess: "+AHGETERROR_Buffer$+" ("+@STR$(NT_FEHLER&)+")"
Print "ID des Prozesses: "+@STR$(P_ID&)
PRINT "Handle des Prozesses: "+@STR$(P_Handle&)
Print ""

IF P_Handle&<>0

    @SetLastError(0)
    LET Win_Fehler&=@CloseHandle(P_Handle&)
    LET AHRückgabe&=@GetLastError()
    Fehlercode_bestimmen
    PRINT "Letzter API-Fehler nach CloseHandle: "+AHGETERROR_Buffer$
    LET AHRückgabe&=WIN_FEHLER&
    Fehlercode_bestimmen
    PRINT "Rückmeldung von CloseHandle: "+AHGETERROR_Buffer$

Endif

While 0=0

    Waitinput

wend

Proc Fehlercode_bestimmen

    DIM AHGETERROR_Buffer#,32000
    @AHFormatMessage($1000,0,AHRückgabe&,0,AHGETERROR_Buffer#,32000,0) Wandelt Fehlercode in Landesspezifische Message um.
    Let AHGETERROR_Buffer$=@TRIM$(@STRING$(AHGETERROR_Buffer#,0))
    Dispose AHGETERROR_Buffer#

Endproc


Was mache ich da für Fehler???
 
12.09.2006  
 




Sebastian
König
Hallo Andreas,

hast Du mal einen guten Link zu Informationen über ZwOpenProcess()?

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
12.09.2006  
 



Hallo Sebastian...
Ich habe im Augenblick nur [...] . Def letzte Parameter dürfte bei mir also nicht stimmen..
 
12.09.2006  
 



...und der zweite ebenfalls.
 
12.09.2006  
 



Der zweite Parameter wirds wohl sein, den ersten könnte ich vielleicht auf 0 setzen.
Hier Link: [...] 
 
12.09.2006  
 




Sebastian
König
Ich nehme an, du beziehst dich auf das hier:
[quote:7063508387]NTSYSAPI
NTSTATUS
NTAPI
ZwOpenProcess(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId OPTIONAL
);

The ClientId parameter is a structure (defined in ntifs.h) that allows
you to specify a process ID to open. Once the function succeeds, call
ObReferenceObjectByHandle on the returned ProcessHandle to get at the
PEPROCESS.[/quote:7063508387]
Die Definitionen für CLIENT_ID und OBJECT_ATTRIBUTES habe ich schonmal gefunden:
[quote:7063508387]
typedef struct _OBJECT_ATTRIBUTES {
ULONG Length;
HANDLE RootDirectory;
PUNICODE_STRING ObjectName;
ULONG Attributes;
PVOID SecurityDescriptor;
PVOID SecurityQualityOfService;
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;

typedef struct _CLIENT_ID {
HANDLE UniqueProcess;
HANDLE UniqueThread;
} CLIENT_ID, *PCLIENT_ID;
[/quote:7063508387]
Leider muss man das ganze wohl auch noch passend füllen - zumindest die ObjectAttributes, ClientId ist ja wohl optional.

Mit
KompilierenMarkierenSeparieren
declare attr#
dim attr#,24
clear attr#
Let Nt_fehler&=@Zwopenprocess(@Addr(P_handle&),$400,attr#,0)

kommt immerhin schonmal nur noch Falscher Parameter. Irgendwie muss man ja auch angeben, welchen Prozess man überhaupt öffnen möchte - entweder wohl in ClientId oder vielleicht in ObjectName...
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
12.09.2006  
 



[quote:0009d0d868=Sebastian König]kommt immerhin schonmal nur noch Falscher Parameter. Irgendwie muss man ja auch angeben, welchen Prozess man überhaupt öffnen möchte - entweder wohl in ClientId oder vielleicht in ObjectName...[/quote:0009d0d868]
Angeben muß man das scheinbar in ObjectName, CLIENT_ID kann ja 0 sein.
Der Objektname könnte der Name des Prozesses aus dem Taskmanasger sein. RootDirectory macht mir etwas Kopfzerbrechen - keine Ahnung was da hinkommt. SecurityDescriptor könnte auch evtl 0 sein (zur not bastele ich mir selbst einen), bin mir da aber nicht ganz sicher. Bei SecurityQualityOfService bin ich mir auch noch nicht ganz sicher...

CLIENT_ID fehlte mir noch, besten Dank.
 
12.09.2006  
 



Bin zwar noch nicht am Ziel, aber schon etwas weiter:
KompilierenMarkierenSeparieren
DEF @MultiByteToWideChar(6) !"kernel32","MultiByteToWideChar"
Def @ZwOpenProcess(4) !"NTDLL.DLL","ZwOpenProcess"
DEF @LsaNtStatusToWinError(1) !"advapi32","LsaNtStatusToWinError"
Def @GetCurrentProcessID(0) !"KERNEL32","GetCurrentProcessId"
Def @CloseHandle(1) !"KERNEL32","CloseHandle"
Def @GetLastError(0) !"KERNEL32","GetLastError"
Def @SetLastError(1) !"KERNEL32","SetLastError"
DEF @AHFormatMessage(7) !"KERNEL32","FormatMessageA"
Declare AHRückgabe&,AHGETERROR_Buffer#,AHGETERROR_Buffer$
Declare NT_Fehler&,WIN_FEHLER&,P_Handle&,P_ID&,Objekt_name$
Declare Attr#,Unicode_STR#
Windowstyle 31
WindowTitle "ZwOpenProcess"
Window 0,0-780,440
LET P_ID&=@GetCurrentProcessID()
@SetLastError(0)
Dim Attr#,24
Clear Attr#
Long Attr#,0=24
LET Objekt_name$="F:ProgrammeXProfan9PROFAN.EXE"
Dim Unicode_STR#,513
@MultiByteToWideChar(0,0,@ADDR(Objekt_name$),-1,Unicode_STR#,256)
Long Attr#,8=Unicode_STR#
Let Nt_fehler&=@Zwopenprocess(@Addr(P_handle&),$400,Attr#,0)
Dispose Attr#
LET AHRückgabe&=@GetLastError()
Fehlercode_bestimmen
PRINT "Letzter API-Fehler nach ZwOpenProcess: "+AHGETERROR_Buffer$
LET WIN_FEHLER&=@LsaNtStatusToWinError(NT_FEHLER&)
LET AHRückgabe&=WIN_FEHLER&
Fehlercode_bestimmen
PRINT "Rückmeldung von ZwOpenProcess: "+AHGETERROR_Buffer$+" ("+@STR$(NT_FEHLER&)+")"
Print "ID des Prozesses: "+@STR$(P_ID&)
PRINT "Handle des Prozesses: "+@STR$(P_Handle&)
Print ""

IF P_Handle&<>0

    @SetLastError(0)
    LET Win_Fehler&=@CloseHandle(P_Handle&)
    LET AHRückgabe&=@GetLastError()
    Fehlercode_bestimmen
    PRINT "Letzter API-Fehler nach CloseHandle: "+AHGETERROR_Buffer$
    LET AHRückgabe&=WIN_FEHLER&
    Fehlercode_bestimmen
    PRINT "Rückmeldung von CloseHandle: "+AHGETERROR_Buffer$

Endif

While 0=0

    Waitinput

wend

Proc Fehlercode_bestimmen

    DIM AHGETERROR_Buffer#,32000
    @AHFormatMessage($1000,0,AHRückgabe&,0,AHGETERROR_Buffer#,32000,0) Wandelt Fehlercode in Landesspezifische Message um.
    Let AHGETERROR_Buffer$=@TRIM$(@STRING$(AHGETERROR_Buffer#,0))
    Dispose AHGETERROR_Buffer#

Endproc

 
12.09.2006  
 




Sebastian
König
Hallo Andreas,

ich habe [...]  gerade noch ein Beispiel gefunden. So funktioniert es bei mir:
KompilierenMarkierenSeparieren
declare attr#,id#
dim attr#,24
dim id#,8
clear attr#
clear id#
long attr#,0 = 24
long id#,0 = P_id&
Let Nt_fehler&=@Zwopenprocess(@Addr(P_handle&),$400,attr#,id#)

Einzufügen in Deinen ersten Code oben .

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
12.09.2006  
 



Danke!

Mal schauen...
 
12.09.2006  
 



Hallo Sebastian...

Hier nun der komplette Code:
KompilierenMarkierenSeparieren
Def @ZwOpenProcess(4) !"NTDLL.DLL","ZwOpenProcess"
DEF @LsaNtStatusToWinError(1) !"advapi32","LsaNtStatusToWinError"
Def @GetCurrentProcessID(0) !"KERNEL32","GetCurrentProcessId"
Def @GetLastError(0) !"KERNEL32","GetLastError"
Def @SetLastError(1) !"KERNEL32","SetLastError"
DEF @AHFormatMessage(7) !"KERNEL32","FormatMessageA"
DEF @ZwClose(1) !"NTDLL","ZwClose"
Declare AHRückgabe&,AHGETERROR_Buffer#,AHGETERROR_Buffer$
Declare NT_Fehler&,WIN_FEHLER&,P_Handle&,P_ID&,Objekt_name$
Declare Attr#,Unicode_STR#,Id#
Windowstyle 31
WindowTitle "ZwOpenProcess"
Window 0,0-780,440
LET P_ID&=@GetCurrentProcessID()
Dim Attr#,24
DIM ID#,8
Long ID#,0=P_ID&
Clear Attr#
Long Attr#,0=24 Größe der Struktur
@SetLastError(0)
Let Nt_fehler&=@Zwopenprocess(@Addr(P_handle&),$400,Attr#,ID#)
LET AHRückgabe&=@GetLastError()
Dispose Unicode_STR#
Dispose ID#
Dispose Attr#
Fehlercode_bestimmen
PRINT "Letzter API-Fehler nach ZwOpenProcess: "+AHGETERROR_Buffer$
LET WIN_FEHLER&=@LsaNtStatusToWinError(NT_FEHLER&)
LET AHRückgabe&=WIN_FEHLER&
Fehlercode_bestimmen
PRINT "Rückmeldung von ZwOpenProcess: "+AHGETERROR_Buffer$+" ("+@STR$(NT_FEHLER&)+")"
Print "ID des Prozesses: "+@STR$(P_ID&)
PRINT "Handle des Prozesses: "+@STR$(P_Handle&)
Print ""

IF P_Handle&<>0

    @SetLastError(0)
    LET NT_Fehler&=@ZwClose(P_Handle&)
    LET AHRückgabe&=@GetLastError()
    Fehlercode_bestimmen
    PRINT "Letzter API-Fehler nach ZwClose: "+AHGETERROR_Buffer$
    LET WIN_FEHLER&=@LsaNtStatusToWinError(NT_FEHLER&)
    LET AHRückgabe&=WIN_FEHLER&
    Fehlercode_bestimmen
    PRINT "Rückmeldung von ZwClose: "+AHGETERROR_Buffer$

Endif

While 0=0

    Waitinput

wend

Proc Fehlercode_bestimmen

    DIM AHGETERROR_Buffer#,32000
    @AHFormatMessage($1000,0,AHRückgabe&,0,AHGETERROR_Buffer#,32000,0) Wandelt Fehlercode in Landesspezifische Message um.
    Let AHGETERROR_Buffer$=@TRIM$(@STRING$(AHGETERROR_Buffer#,0))
    Dispose AHGETERROR_Buffer#

Endproc


Und was ich dir noch sagen wollte:
TOLL!
SUPER!!!
Vielen, vielen Dank
Jetzt kann ich schauen, was ich damit anfangen kann! <= Thats Windows
 
12.09.2006  
 




Sebastian
König
[quote:3d218d8a75]Jetzt kann ich schauen, was ich damit anfangen kann! <= Thats Windows[/quote:3d218d8a75]
Ok, ich bin gespannt, wofür das ganze gut ist!
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
12.09.2006  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.533 Betrachtungen

Unbenanntvor 0 min.
Georg Teles15.04.2013
Andreas Koch09.05.2012

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

unbekannt (9x)
Sebastian König (4x)


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