Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Ryko
Anmeldungsdatum: 02.01.2013 Beiträge: 12
|
Verfasst am: 16.01.2013, 19:46 Titel: Prozess Modul gibt komischen Wert zurück |
|
|
Hallo,
Ich versuche momentan mit dieser Methode das MainModul eines Prozess zu kommen.Funktionieren tut dies wie gewollt,ausser ich benutzte eben SystemProzesse.
Beispiel Ausgabe:
Zitat: |
RSFMain.exe
C:\Dokumente und Einstellungen\Besitzer\Eigene Dateien\Programmieren\Free Basic
Sources\RSFMain.exe |
Beispiel Ausgabe für alg.exe:
Zitat: |
Ein Pfeil nach oben und unten(Als Zeichen)??????????U?$
|
Könnte es sein das es daran liegt das es Unicode ist was da ausgegeben wird?Denn dieser Pfeil nach oben und unten habe ich in keiner ASCII Tabelle gefunden sonder lediglich in einer Unicode Zeichen Tabelle.Inwiefern müsste ich dann den Code umschreiben damit Unicode dargestellt wird?
Code: | Function GetProcessFile(ByVal Pid As Integer) As String
Dim hSnap As HANDLE
Dim mdEntry32 As MODULEENTRY32
Dim bSucess As Boolean
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,Pid)
mdEntry32.dwSize = SizeOf(MODULEENTRY32)
bSucess = Module32Next(hSnap,@mdEntry32)
Return mdEntry32.szExePath
CloseHandle(hSnap)
End Function |
Mfg Ryko |
|
Nach oben |
|
|
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 17.01.2013, 14:03 Titel: |
|
|
Der Pfeil ↕ ist ASCII Code 18.
Bei mir kommt auch Garbage, aber nur wenn der Aufruf an sich schon fehlschlägt weil z.B. der Prozess auf Grund fehlender Adminrechte nicht geöffnet werden konnte. Bei anderen Prozessen gehts.
Mit Unicode hat das ganze nichts zu tun. |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 17.01.2013, 15:04 Titel: |
|
|
Hi,
auch ohne Adminrechte bekomme ich ein lesbares Ergebnis:
Code: | #Include "windows.bi"
#Include "win/tlhelp32.bi"
Dim mdEntry32 As MODULEENTRY32
Dim hSnap As HANDLE
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId)
mdEntry32.dwSize = SizeOf(MODULEENTRY32)
If Module32First(hSnap,@mdEntry32) Then
?"MODULE NAME: ";mdEntry32.szModule
?"executable ";mdEntry32.szExePath
?"process ID ";mdEntry32.th32ProcessID
?"ref count (g) &H";Hex(mdEntry32.GlblcntUsage)
?"ref count (p) &H";Hex(mdEntry32.ProccntUsage)
?"base address &H";Hex(mdEntry32.modBaseAddr)
?"base size ";mdEntry32.modBaseSize
EndIf
CloseHandle(hSnap)
Sleep | mit Win 7, FB 0.24 _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 17.01.2013, 16:50 Titel: |
|
|
Hi,
ich vermute das sich ohne Adminrechte doch nicht alle Module ermitteln lassen.
Welche möglich sind wird mir so angezeigt:
Code: | #Include "windows.bi"
#Include "win\tlhelp32.bi"
Dim As Integer ProcessFound
Dim As HANDLE Snapshot, Snapshot2
Dim Process As PROCESSENTRY32
Dim Module As MODULEENTRY32
Process.dwSize = SizeOf(PROCESSENTRY32)
Module.dwSize = SizeOf(MODULEENTRY32)
Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
If Snapshot Then
ProcessFound = Process32First(Snapshot, @Process)
While ProcessFound
Snapshot2 = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,Process.th32ProcessID)
If Snapshot2 Then
If Module32First(Snapshot2, @Module) Then _
Print Module.th32ProcessID, Module.szExePath
CloseHandle(Snapshot2)
EndIf
ProcessFound = Process32Next(Snapshot, @Process)
Wend
CloseHandle(Snapshot)
EndIf
Sleep |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
Ryko
Anmeldungsdatum: 02.01.2013 Beiträge: 12
|
Verfasst am: 17.01.2013, 18:56 Titel: |
|
|
Hmm naja als Admin bin ich angemeldet. OS wäre Winxp SP3
Edit:// Tatsächlich funktioniert das nicht mit System Prozessen .
Nur einige wie ctfmon.exe oder Rundll32.exe bekomm ich angezeigt.
Edit// Nochmals. Habe den zusammenhang gefunden.Mein beschriebenes Problem tritt nur bei Diensten auf. |
|
Nach oben |
|
|
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 21.01.2013, 00:09 Titel: |
|
|
Für dein Programm mal unter dem Benutzer "SYSTEM" aus und schau was dann passiert: http://blog.delphi-jedi.net/2008/05/08/runassys-10-preview/
Bzw. versuch mal dir selbst das SeDebugPrivilege zu geben bevor du den Code ausführst, und zwar hiermit:
Code: | Dim As TOKEN_PRIVILEGES pv, po
pv.PrivilegeCount = 1
pv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
Dim As HANDLE t
Dim As Dword no
LookupPrivilegeValue(0, SE_DEBUG_NAME, @pv.Privileges(0).Luid)
OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, @t)
AdjustTokenPrivileges(t, 0, @pv, SizeOf(po), @po, @no)
|
|
|
Nach oben |
|
|
Ryko
Anmeldungsdatum: 02.01.2013 Beiträge: 12
|
Verfasst am: 21.01.2013, 15:37 Titel: |
|
|
Hehe genau das wollte ich gerade Posten .
Hatte mir mit GetLastError den Fehler ausgeben lassen und bekamm 5 zurück sprich keine Zugriffsberechtigung.
Die Methode habe ich dann genutzt
Code: | Sub SetDebugPrivileges()
Dim tp As TOKEN_PRIVILEGES
Dim hToken As HANDLE
If (LookupPrivilegeValue(NULL,SE_DEBUG_NAME,@tp.Privileges(0).Luid)) Then
If (OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,@hToken)) Then
If(hToken <> NULL) Then
tp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
tp.PrivilegeCount = 1
If (AdjustTokenPrivileges(hToken,FALSE,@tp,0,0,0)) Then
CloseHandle(hToken)
EndIf
EndIf
EndIf
EndIf
End Sub |
Nochmal Danke an alle!
Mfg Ryko |
|
Nach oben |
|
|
|