Programm mit PCU zum Auslesen von Umgebungsvariablen in fremden 32Bit Prozessen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

    • Programm mit PCU zum Auslesen von Umgebungsvariablen in fremden 32Bit Prozessen

      Das Proggie liest die Umgebungsvariablen fremder 32Bit Prozesse.
      Quellcode und PCU sind im Download enthalten.
      [IMG:http://abload.de/img/testrnki1.jpg]

      Quellcode: EnvReader.prf

      1. '#####################################################################################
      2. '######### Code von AHT #########
      3. '######### Gepostet für http://www.paules-pc-forum.de #########
      4. '#####################################################################################
      5. $U ProcEnv.PCU = ProcEnv.
      6. Def GetModuleFileNameEx(4) !"Psapi", "GetModuleFileNameExA"
      7. Def CreateToolhelp32Snapshot(2) !"Kernel32", "CreateToolhelp32Snapshot"
      8. Def Process32First(2) !"Kernel32", "Process32First"
      9. Def Process32Next(2) !"Kernel32", "Process32Next"
      10. Def CloseHandle(1) !"Kernel32", "CloseHandle"
      11. Def GetCurrentProcessID(0) !"Kernel32", "GetCurrentProcessId"
      12. Def OpenProcess(3) !"Kernel32", "OpenProcess"
      13. DEF LookupPrivilegeValue(3) !"advapi32","LookupPrivilegeValueA"
      14. DEF AdjustTokenPrivileges(6) !"advapi32","AdjustTokenPrivileges"
      15. DEF OpenProcessToken(3) !"advapi32","OpenProcessToken"
      16. DEF GetCurrentProcess(0) !"KERNEL32","GetCurrentProcess"
      17. DEF CopyMemory(3) !"kernel32","RtlMoveMemory"
      18. DEF GetModuleHandle(1) !"KERNEL32","GetModuleHandleA"
      19. DEF GetProcAddress(2) !"KERNEL32","GetProcAddress"
      20. Def QueryFullProcessImageName(4) !"Kernel32", "QueryFullProcessImageNameA"
      21. DEF CheckTokenMembership(3) !"advapi32","CheckTokenMembership"
      22. Def SetWindowPos(7) !"User32","SetWindowPos"
      23. DEF CreateStatus(4) !"comctl32","CreateStatusWindow"
      24. DEF GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
      25. DEF ButtonClicked(1) GetDlgCtrlID(&(1)) = -%MENUITEM
      26. DEF FormatMessage(7) !"KERNEL32","FormatMessageA"
      27. Declare Entry#, Filename#, Ergebnis$, AHGETERROR_Buffer#
      28. Declare TOKEN_PRIVILEGES#, LUID#, Fehler&, 64Bit&, MODULE$, Funktion$
      29. Declare Mhandle%, Size&, Member&, SID#, Statustext$, Statusbar%
      30. Declare ProcessesListview%, ReadProcesses%, EnvEdit%
      31. Declare Hauptfensterbreite&, Hauptfensterhöhe&, CurSel&, Prozess_ID&
      32. Clear 64Bit&
      33. MODULE$ = "Kernel32.DLL"
      34. Funktion$ = "IsWow64Process"
      35. Mhandle% = GetModuleHandle(ADDR(Module$))
      36. IF GetProcAddress(Mhandle%, ADDR(FUNKTION$)) <> 0
      37. External("Kernel32.dll", "IsWow64Process", GetCurrentProcess(), Addr(64Bit&))
      38. endif
      39. Struct PROCESSENTRY32=dwSize&, \
      40. cntUsage&, \
      41. th32ProcessID&, \
      42. th32DefaultHeapID&, \
      43. th32ModuleID&, \
      44. Threads&, \
      45. th32ParentProcessID&, \
      46. pcPriClassBase&, \
      47. dwFlags&, \
      48. szExeFile$(260)
      49. Dim Entry#,PROCESSENTRY32
      50. Entry#.dwSize& = SizeOf(Entry#)
      51. Windowstyle 31 + 512
      52. WindowTitle "Process Environment Reader"
      53. Window 0, 0 - 640, 440
      54. STATUSBAR% = CreateStatus($50000900 | $4000000, ADDR(Statustext$), %HWND, 2701)
      55. ProcessesListview% = Create("GridBox", %HWND, "PID;0;60;Prozessname;0;215", 0, 10, 50, 300, 340)
      56. EnvEdit% = Create("MultiEdit", %HWND, "", 320, 10, 290, 380)
      57. SendMessage(EnvEdit%, 207, 1, 0)
      58. ReadProcesses% = Create("Button", %HWND, "Prozesse neu auslesen", 10, 10, 300, 30)
      59. FillProcessList(ProcessesListview%)
      60. UserMessages $10
      61. While %UMESSAGE <> $10
      62. Sleep 10
      63. Positioner
      64. If ButtonClicked(ReadProcesses%)
      65. UseCursor 2
      66. sendmessage(ProcessesListview%, $1009, 0, 0)
      67. SetText EnvEdit%, ""
      68. FillProcessList(ProcessesListview%)
      69. SetMenuitem 0
      70. UseCursor 0
      71. Statustext$ = ""
      72. sendmessage(Statusbar%, $401, 0, addr(Statustext$))
      73. sendmessage(Statusbar%, $410, 0, addr(Statustext$))
      74. endif
      75. If GetCurSel(ProcessesListview%)<> -1
      76. If CurSel& <> GetCurSel(ProcessesListview%)
      77. UseCursor 2
      78. CurSel& = GetCurSel(ProcessesListview%)
      79. Prozess_ID& = Val(SubStr$(GetString$(ProcessesListview%, GetCurSel(ProcessesListview%)), 1, "|"))
      80. SetText EnvEdit%, ProcEnv.ReadProcessEnvironment(Prozess_ID&, "*")
      81. Statustext$ = Fehlercode_bestimmen(ProcEnv.LastError%)
      82. sendmessage(Statusbar%, $401, 0, addr(Statustext$))
      83. sendmessage(Statusbar%, $410, 0, addr(Statustext$))
      84. UseCursor 0
      85. endif
      86. endif
      87. EndWhile
      88. END
      89. Proc Set_Privilege_Status
      90. Parameters Privilege_name$, Aktive&
      91. Declare NewState&, AH_Token_handle%, Fehler&, Privret&
      92. DIM TOKEN_PRIVILEGES#,16
      93. DIM LUID#,8
      94. Clear LUID#
      95. External("advapi32.dll","LookupPrivilegeValueA",0,ADDR(Privilege_name$),LUID#)
      96. CLEAR AH_Token_handle%
      97. LET FEHLER&=External("advapi32.dll","OpenProcessToken",External("KERNEL32.dll","GetCurrentProcess"),$20,ADDR(AH_Token_handle%))
      98. LONG TOKEN_PRIVILEGES#,0=1
      99. NewState&=TOKEN_PRIVILEGES#
      100. External("KERNEL32.dll","RtlMoveMemory",NewState&+4,LUID#,8)
      101. LET NewState&=Aktive&
      102. Clear Aktive&
      103. IF NewState& | $2 = NewState&
      104. LET Aktive&=AKTIVE& | $2
      105. Endif
      106. IF NewState& | $80000000 = NewState&
      107. LET Aktive&= AKTIVE& | $80000000
      108. Endif
      109. LONG TOKEN_PRIVILEGES#,12=Aktive&
      110. Privret& = External("advapi32.dll","AdjustTokenPrivileges",AH_Token_handle%,0,TOKEN_PRIVILEGES#,0,0,0)
      111. If AH_TOKEN_handle%<>0
      112. External("KERNEL32.dll","CloseHandle",AH_Token_handle%)
      113. endif
      114. Dispose TOKEN_PRIVILEGES#
      115. Dispose LUID#
      116. Return Privret&
      117. endproc
      118. Proc FillProcessList
      119. Parameters GidHandle%
      120. Declare err%, handle%, cpid&, text$, text2$, Phandle%
      121. DIM Filename#, 514
      122. cpid& = GetCurrentProcessID()
      123. handle% = CreateToolhelp32Snapshot(2, 0)
      124. If handle%
      125. err% = Process32First(handle%, Entry#)
      126. If err%
      127. text$ = Str$(Entry#.th32ProcessID&)
      128. text2$ = Entry#.szExeFile$
      129. Clear Filename#, Phandle%
      130. IF Val($WINVER) < 6.0
      131. Phandle% = OpenProcess($400 | $10, 0, Entry#.th32ProcessID&)
      132. else
      133. Phandle% = OpenProcess($1000, 0, Entry#.th32ProcessID&)
      134. endif
      135. IF Phandle% > 0
      136. IF Val($WINVER) < 6.0
      137. GetModuleFilenameEx(Phandle%, 0, Filename#, 513)
      138. else
      139. Size&=580
      140. QueryFullProcessImageName(Phandle%, 0, Filename#, addr(Size&))
      141. endif
      142. Closehandle(Phandle%)
      143. endif
      144. If String$(Filename#,0) = ""
      145. ADDSTRING(GidHandle%, text$ + "|" + text2$)
      146. else
      147. ADDSTRING(GidHandle%, text$ + "|" + String$(Filename#,0))
      148. endif
      149. Repeat
      150. err% = Process32Next(handle%, Entry#)
      151. If err%
      152. text$ = Str$(Entry#.th32ProcessID&)
      153. text2$ = Entry#.szExeFile$
      154. Clear Filename#, Phandle%
      155. IF Val($WINVER) < 6.0
      156. Phandle% = OpenProcess($400 | $10, 0, Entry#.th32ProcessID&)
      157. else
      158. Phandle% = OpenProcess($1000, 0, Entry#.th32ProcessID&)
      159. endif
      160. IF Phandle% > 0
      161. IF Val($WINVER) < 6.0
      162. GetModuleFilenameEx(Phandle%, 0, Filename#, 513)
      163. else
      164. Size&=580
      165. QueryFullProcessImageName(Phandle%, 0, Filename#, addr(Size&))
      166. endif
      167. Closehandle(Phandle%)
      168. endif
      169. If String$(Filename#,0) = ""
      170. ADDSTRING(GidHandle%, text$ + "|" + text2$)
      171. else
      172. ADDSTRING(GidHandle%, text$ + "|" + String$(Filename#,0))
      173. endif
      174. EndIf
      175. Until err% = 0
      176. CloseHandle(handle%)
      177. EndIf
      178. EndIf
      179. Dispose Filename#
      180. EndProc
      181. Proc Positioner
      182. IF or(Hauptfensterbreite& <> WIDTH(%HWND), Hauptfensterhöhe& <> HEIGHT(%HWND))
      183. SetWindowPos STATUSBAR% = 0, 0 - 0, 0; 0
      184. Hauptfensterbreite& = WIDTH(%HWND)
      185. Hauptfensterhöhe& = HEIGHT(%HWND)
      186. SetWindowPos(ReadProcesses%, 0, 10, 10, ABS( WIDTH(%HWND)/2 - 10), 30, $4)
      187. SetWindowPos(ProcessesListview%,0, 10, 50, ABS( WIDTH(%HWND) /2 - 10), ABS(HEIGHT(%HWND) - 80), $4)
      188. SetWindowPos(EnvEdit%,0, ABS( WIDTH(%HWND) /2 + 10), 10, ABS( WIDTH(%HWND) /2 - 20), ABS(HEIGHT(%HWND) - 40), $4)
      189. Sendmessage(ProcessesListview%, $101E ,1, WIDTH(ProcessesListview%) - (65))
      190. endif
      191. endproc
      192. Proc Fehlercode_bestimmen
      193. Parameters Error%
      194. Declare AHGETERROR_Buffer$
      195. DIM AHGETERROR_Buffer#, 32000
      196. FormatMessage($1000, 0, Error%, 0, AHGETERROR_Buffer#, 32000, 0)
      197. AHGETERROR_Buffer$ = trim$(STRING$(AHGETERROR_Buffer#, 0))
      198. Dispose AHGETERROR_Buffer#
      199. Return AHGETERROR_Buffer$
      200. Endproc
      Alles anzeigen
      Download: Environment.zip

      Anwendung der PCU:

      ProcEnv.ReadProcessEnvironment(N, S)
      • N = Prozess ID eines laufenden Prozesses
      • S = Name einer Umgebungsvariablen ohne umschließende % Zeichen und * Zeichen, um den ganzen Block zu lesen.
      Hinweis: Mit 64Bit Prozessen funktioniert die Sache natürlich nicht, da die PCU 32Bit ist. Das ganze ist also eher eine kleine Spielerei, um mal Sachen zu testen.

      Gebrauchen könnte man das zum Beispiel um spezielle Informationen mit einer Batch oder einem Powershell Script auszutauschen.

      In der Variablen ProcEnv.LastError% wird der zuletzt in der PCU aufgetretene Fehler gespeichert.
      ________________________________________________________

      PPFScanner PPFS Android MisterXMail@web.de
      Mfg AHT

      Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von AHT ()

    • Ich habe den Quelltext mal angepasst. Deine Version gefällt mir wesentlich besser:

      Quellcode: EnvReader.prf

      1. '#####################################################################################
      2. '######### Code von AHT #########
      3. '######### Gepostet für http://www.paules-pc-forum.de #########
      4. '#####################################################################################
      5. $U ProcEnv.PCU = ProcEnv.
      6. Def GetModuleFileNameEx(4) !"Psapi", "GetModuleFileNameExA"
      7. Def CreateToolhelp32Snapshot(2) !"Kernel32", "CreateToolhelp32Snapshot"
      8. Def Process32First(2) !"Kernel32", "Process32First"
      9. Def Process32Next(2) !"Kernel32", "Process32Next"
      10. Def CloseHandle(1) !"Kernel32", "CloseHandle"
      11. Def GetCurrentProcessID(0) !"Kernel32", "GetCurrentProcessId"
      12. Def OpenProcess(3) !"Kernel32", "OpenProcess"
      13. DEF LookupPrivilegeValue(3) !"advapi32","LookupPrivilegeValueA"
      14. DEF AdjustTokenPrivileges(6) !"advapi32","AdjustTokenPrivileges"
      15. DEF OpenProcessToken(3) !"advapi32","OpenProcessToken"
      16. DEF GetCurrentProcess(0) !"KERNEL32","GetCurrentProcess"
      17. DEF CopyMemory(3) !"kernel32","RtlMoveMemory"
      18. DEF GetModuleHandle(1) !"KERNEL32","GetModuleHandleA"
      19. DEF GetProcAddress(2) !"KERNEL32","GetProcAddress"
      20. Def QueryFullProcessImageName(4) !"Kernel32", "QueryFullProcessImageNameA"
      21. DEF CheckTokenMembership(3) !"advapi32","CheckTokenMembership"
      22. Def SetWindowPos(7) !"User32","SetWindowPos"
      23. DEF CreateStatus(4) !"comctl32","CreateStatusWindow"
      24. DEF GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
      25. DEF ButtonClicked(1) GetDlgCtrlID(&(1)) = -%MENUITEM
      26. DEF FormatMessage(7) !"KERNEL32","FormatMessageA"
      27. Declare Entry#, Filename#, Ergebnis$, AHGETERROR_Buffer#
      28. Declare TOKEN_PRIVILEGES#, LUID#, Fehler&, 64Bit&, MODULE$, Funktion$
      29. Declare Mhandle%, Size&, Member&, SID#, Statustext$, Statusbar%
      30. Declare ProcessesListview%, ReadProcesses%, EnvEdit%
      31. Declare Hauptfensterbreite&, Hauptfensterhöhe&, CurSel&, Prozess_ID&
      32. Clear 64Bit&
      33. MODULE$ = "Kernel32.DLL"
      34. Funktion$ = "IsWow64Process"
      35. Mhandle% = GetModuleHandle(ADDR(Module$))
      36. IF GetProcAddress(Mhandle%, ADDR(FUNKTION$)) <> 0
      37. External("Kernel32.dll", "IsWow64Process", GetCurrentProcess(), Addr(64Bit&))
      38. endif
      39. Struct PROCESSENTRY32=dwSize&, \
      40. cntUsage&, \
      41. th32ProcessID&, \
      42. th32DefaultHeapID&, \
      43. th32ModuleID&, \
      44. Threads&, \
      45. th32ParentProcessID&, \
      46. pcPriClassBase&, \
      47. dwFlags&, \
      48. szExeFile$(260)
      49. Dim Entry#,PROCESSENTRY32
      50. Entry#.dwSize& = SizeOf(Entry#)
      51. Windowstyle 31 + 512
      52. WindowTitle "Process Environment Reader"
      53. Window 0, 0 - 640, 440
      54. STATUSBAR% = CreateStatus($50000900 | $4000000, ADDR(Statustext$), %HWND, 2701)
      55. ProcessesListview% = Create("GridBox", %HWND, "PID;0;60;Prozessname;0;215", 0, 10, 50, 300, 340)
      56. EnvEdit% = Create("MultiEdit", %HWND, "", 320, 10, 290, 380)
      57. SendMessage(EnvEdit%, 207, 1, 0)
      58. ReadProcesses% = Create("Button", %HWND, "Prozesse neu auslesen", 10, 10, 300, 30)
      59. FillProcessList(ProcessesListview%)
      60. UserMessages $10
      61. While %UMESSAGE <> $10
      62. Sleep 10
      63. Positioner
      64. If ButtonClicked(ReadProcesses%)
      65. UseCursor 2
      66. sendmessage(ProcessesListview%, $1009, 0, 0)
      67. SetText EnvEdit%, ""
      68. FillProcessList(ProcessesListview%)
      69. SetMenuitem 0
      70. UseCursor 0
      71. Statustext$ = ""
      72. sendmessage(Statusbar%, $401, 0, addr(Statustext$))
      73. sendmessage(Statusbar%, $410, 0, addr(Statustext$))
      74. endif
      75. If GetCurSel(ProcessesListview%)<> -1
      76. If CurSel& <> GetCurSel(ProcessesListview%)
      77. UseCursor 2
      78. CurSel& = GetCurSel(ProcessesListview%)
      79. Prozess_ID& = Val(SubStr$(GetString$(ProcessesListview%, GetCurSel(ProcessesListview%)), 1, "|"))
      80. SetText EnvEdit%, ProcEnv.ReadProcessEnvironment(Prozess_ID&, "*")
      81. Statustext$ = Fehlercode_bestimmen(ProcEnv.LastError%)
      82. sendmessage(Statusbar%, $401, 0, addr(Statustext$))
      83. sendmessage(Statusbar%, $410, 0, addr(Statustext$))
      84. UseCursor 0
      85. endif
      86. endif
      87. EndWhile
      88. END
      89. Proc Set_Privilege_Status
      90. Parameters Privilege_name$, Aktive&
      91. Declare NewState&, AH_Token_handle%, Fehler&, Privret&
      92. DIM TOKEN_PRIVILEGES#,16
      93. DIM LUID#,8
      94. Clear LUID#
      95. External("advapi32.dll","LookupPrivilegeValueA",0,ADDR(Privilege_name$),LUID#)
      96. CLEAR AH_Token_handle%
      97. LET FEHLER&=External("advapi32.dll","OpenProcessToken",External("KERNEL32.dll","GetCurrentProcess"),$20,ADDR(AH_Token_handle%))
      98. LONG TOKEN_PRIVILEGES#,0=1
      99. NewState&=TOKEN_PRIVILEGES#
      100. External("KERNEL32.dll","RtlMoveMemory",NewState&+4,LUID#,8)
      101. LET NewState&=Aktive&
      102. Clear Aktive&
      103. IF NewState& | $2 = NewState&
      104. LET Aktive&=AKTIVE& | $2
      105. Endif
      106. IF NewState& | $80000000 = NewState&
      107. LET Aktive&= AKTIVE& | $80000000
      108. Endif
      109. LONG TOKEN_PRIVILEGES#,12=Aktive&
      110. Privret& = External("advapi32.dll","AdjustTokenPrivileges",AH_Token_handle%,0,TOKEN_PRIVILEGES#,0,0,0)
      111. If AH_TOKEN_handle%<>0
      112. External("KERNEL32.dll","CloseHandle",AH_Token_handle%)
      113. endif
      114. Dispose TOKEN_PRIVILEGES#
      115. Dispose LUID#
      116. Return Privret&
      117. endproc
      118. Proc FillProcessList
      119. Parameters GidHandle%
      120. Declare err%, handle%, cpid&, text$, text2$, Phandle%
      121. DIM Filename#, 514
      122. cpid& = GetCurrentProcessID()
      123. handle% = CreateToolhelp32Snapshot(2, 0)
      124. If handle%
      125. err% = Process32First(handle%, Entry#)
      126. If err%
      127. text$ = Str$(Entry#.th32ProcessID&)
      128. text2$ = Entry#.szExeFile$
      129. Clear Filename#, Phandle%
      130. IF Val($WINVER) < 6.0
      131. Phandle% = OpenProcess($400 | $10, 0, Entry#.th32ProcessID&)
      132. else
      133. Phandle% = OpenProcess($1000, 0, Entry#.th32ProcessID&)
      134. endif
      135. IF Phandle% > 0
      136. IF Val($WINVER) < 6.0
      137. GetModuleFilenameEx(Phandle%, 0, Filename#, 513)
      138. else
      139. Size&=580
      140. QueryFullProcessImageName(Phandle%, 0, Filename#, addr(Size&))
      141. endif
      142. Closehandle(Phandle%)
      143. endif
      144. If String$(Filename#,0) = ""
      145. ADDSTRING(GidHandle%, text$ + "|" + text2$)
      146. else
      147. ADDSTRING(GidHandle%, text$ + "|" + String$(Filename#,0))
      148. endif
      149. Repeat
      150. err% = Process32Next(handle%, Entry#)
      151. If err%
      152. text$ = Str$(Entry#.th32ProcessID&)
      153. text2$ = Entry#.szExeFile$
      154. Clear Filename#, Phandle%
      155. IF Val($WINVER) < 6.0
      156. Phandle% = OpenProcess($400 | $10, 0, Entry#.th32ProcessID&)
      157. else
      158. Phandle% = OpenProcess($1000, 0, Entry#.th32ProcessID&)
      159. endif
      160. IF Phandle% > 0
      161. IF Val($WINVER) < 6.0
      162. GetModuleFilenameEx(Phandle%, 0, Filename#, 513)
      163. else
      164. Size&=580
      165. QueryFullProcessImageName(Phandle%, 0, Filename#, addr(Size&))
      166. endif
      167. Closehandle(Phandle%)
      168. endif
      169. If String$(Filename#,0) = ""
      170. ADDSTRING(GidHandle%, text$ + "|" + text2$)
      171. else
      172. ADDSTRING(GidHandle%, text$ + "|" + String$(Filename#,0))
      173. endif
      174. EndIf
      175. Until err% = 0
      176. CloseHandle(handle%)
      177. EndIf
      178. EndIf
      179. Dispose Filename#
      180. EndProc
      181. Proc Positioner
      182. IF (Hauptfensterbreite& <> WIDTH(%HWND)) or (Hauptfensterhöhe& <> HEIGHT(%HWND))
      183. SetWindowPos STATUSBAR% = 0, 0 - 0, 0; 0
      184. Hauptfensterbreite& = WIDTH(%HWND)
      185. Hauptfensterhöhe& = HEIGHT(%HWND)
      186. SetWindowPos(ReadProcesses%, 0, 10, 10, ABS( WIDTH(%HWND)/2 - 10), 30, $4)
      187. SetWindowPos(ProcessesListview%,0, 10, 50, ABS( WIDTH(%HWND) /2 - 10), ABS(HEIGHT(%HWND) - 80), $4)
      188. SetWindowPos(EnvEdit%,0, ABS( WIDTH(%HWND) /2 + 10), 10, ABS( WIDTH(%HWND) /2 - 20), ABS(HEIGHT(%HWND) - 40), $4)
      189. Sendmessage(ProcessesListview%, $101E ,1, WIDTH(ProcessesListview%) - (65))
      190. endif
      191. endproc
      192. Proc Fehlercode_bestimmen
      193. Parameters Error%
      194. Declare AHGETERROR_Buffer$
      195. DIM AHGETERROR_Buffer#, 32000
      196. FormatMessage($1000, 0, Error%, 0, AHGETERROR_Buffer#, 32000, 0)
      197. AHGETERROR_Buffer$ = trim$(STRING$(AHGETERROR_Buffer#, 0))
      198. Dispose AHGETERROR_Buffer#
      199. Return AHGETERROR_Buffer$
      200. Endproc
      Alles anzeigen
      Besonders lehrreich wird das Ding, wenn man es auf 32Bit Systemen zum Beispiel mit Tasks and Token im lokalen Systemaccount startet, um auf Systemprozesse Zugriff zu haben:
      [IMG:http://abload.de/img/env1nkn3.gif]
      ________________________________________________________

      PPFScanner PPFS Android MisterXMail@web.de
      Mfg AHT