PBOSL PB Libraries ab 4.30 nurnoch Includes
Stand der Dinge:
ich hab heute mal ein paar Stunden damit verbracht
die Process Lib aus dem PBOSL Paket komplett umzuschreiben.
Als Include, lauffähig ab 4.3, ansi/unicode x86 und x64,
bisher unter vista getestet.
Die Ergebnisse beim ExamineProcess() oder ExamineProcessDLL()
habe ich nun in LinkedList gelegt.Macht das bearbeiten später
einfacher.
Die Ergebnisse möchte ich allerdings erst später öffentlich
präsentieren.Denn ganz fertig bin ich noch nicht.
Ein paar gute Beispiele und bessere Kommentare sind nötig.
Sowieso bugfixing.
Wer Interesse hat und unter x64 testen kann, PM schicken.
Die Process-lib war sicherlich die schwierigste .
Wie siehst mit anderen libs aus ?
Kann noch wer ausser mir unter x64 testen und evtl umschreiben ?
(siehe auch den PB-Blog http://www.purebasic.fr/blog/?m=200809 )
ich hab heute mal ein paar Stunden damit verbracht
die Process Lib aus dem PBOSL Paket komplett umzuschreiben.
Als Include, lauffähig ab 4.3, ansi/unicode x86 und x64,
bisher unter vista getestet.
Die Ergebnisse beim ExamineProcess() oder ExamineProcessDLL()
habe ich nun in LinkedList gelegt.Macht das bearbeiten später
einfacher.
Die Ergebnisse möchte ich allerdings erst später öffentlich
präsentieren.Denn ganz fertig bin ich noch nicht.
Ein paar gute Beispiele und bessere Kommentare sind nötig.
Sowieso bugfixing.
Wer Interesse hat und unter x64 testen kann, PM schicken.
Die Process-lib war sicherlich die schwierigste .
Wie siehst mit anderen libs aus ?
Kann noch wer ausser mir unter x64 testen und evtl umschreiben ?
(siehe auch den PB-Blog http://www.purebasic.fr/blog/?m=200809 )
Rings hat geschrieben:ziert sich nich beim zitieren
Sorry, wenn es OOP ist, müsstes es doch als Include genau soviel, wenn nicht noch mehr Sinn machen..... OOP ist doch die Mutter aller Kapselungen...ts-soft hat geschrieben:Meine RFile Lib ist OOP, als Include macht die auch keinen Sinn,die Methoden sind nicht mehr gekapselt.
Mike
Alle Rechtschreibfehler unterliegen der GPL und dürfen frei kopiert und modifiziert werden.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Die Kapselung ist ja nur durch die Lib gegeben, in einer Include gibts keineneotoma hat geschrieben:Sorry, wenn es OOP ist, müsstes es doch als Include genau soviel, wenn nicht noch mehr Sinn machen..... OOP ist doch die Mutter aller Kapselungen...
Mike
privaten Funktionen, keinen privaten globalen Variablenscope usw., macht also
weniger Sinn.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Es sollten weiter die LIB´s geliefert werden und es sollten auch die vorherigen Versionen bereit gestellt sein.
Es ist oft ein grosser unterschied zwischen einen LIB-Code und einen Include-Code, da diese unterschiedlich behandelt werden.
Bei der "ExDatabase" liegt eine separate Include-Datei vor. Bei der kann man schon sehen wie groß der unterschied sein kann.
Es ist oft ein grosser unterschied zwischen einen LIB-Code und einen Include-Code, da diese unterschiedlich behandelt werden.
Bei der "ExDatabase" liegt eine separate Include-Datei vor. Bei der kann man schon sehen wie groß der unterschied sein kann.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
ja ne, is klar.mk-soft hat geschrieben:Es sollten weiter die LIB´s geliefert werden und es sollten auch die vorherigen Versionen bereit gestellt sein.
Es ist oft ein grosser unterschied zwischen einen LIB-Code und einen Include-Code, da diese unterschiedlich behandelt werden.
Bei der "ExDatabase" liegt eine separate Include-Datei vor. Bei der kann man schon sehen wie groß der unterschied sein kann.
Also, sicherlich wird noch alte versionen weiterhingeben.
Da aber die Mithilfe an einer Portierung nach 4.3 so in etwa
gegen NULL geht, ist das PBOSL Projekt meiner Meinung
nach gestorben, Zeitpunkt ist version 4.2
Ich selbst stelle noch ein paar geänderte includes für
4.3 zur verfügung. Nicht Befehlskompatibel zu 4.2 .
Also wer was neues macht, sollte die includes nehmen.
Alle anderen halt auf ihrem 4.2 Stand stehen bleiben.
Mir isses echt wurscht. Die Sachen die ich benötige
hab ich mir konvertiert.
Rings hat geschrieben:ziert sich nich beim zitieren
bobobo hat geschrieben:Wie steht das hier mit den includes?
gibt's da auch mal downloadbare Ergebnisse ?
Code: Alles auswählen
;PBOSSL Process libary 4.3 x Include
;Rework by Siegfried Rings
;Original by Siegfried Rings
;added Functions by Siegfried Rings
; -GetProcessPIDperName
;License:
;EnableExplicit
;We Define some Prototypes
Prototype Prototype_PBOSL_EnumProcesses(ProcessesArrayMem.i, NbProcessesMax.i, nProcesses.i)
Prototype Prototype_PBOSL_EnumProcessModulesEx(hProcess.i, BaseModule.i, Lenghth.i, cbNeeded.l,dwFilterFlag.l)
Prototype Prototype_PBOSL_EnumProcessModules(hProcess.i, BaseModule.i, Lenghth.i, cbNeeded.l)
Prototype Prototype_PBOSL_GetProcessMemoryInfo(hProcess.i,tPMC.l, SizeOf_tPMC.l)
Prototype Prototype_PBOSL_EmptyWorkingSet(hProcess.i)
Prototype Prototype_PBOSL_GetModuleBaseName(hProcess.i, BaseModule.i, Name.i, LenName.i)
Prototype Prototype_PBOSL_GetModuleFileName(hProcess.i, BaseModule.i, Name.i, LenName.i)
Prototype Prototype_PBOSL_GetModuleInformation(hProcess.i,BaseModule.i,lpModuleInfo,dwSize )
Prototype Prototype_PBOSL_GetExtendedTcpTable(MIB_TCPTABLE , dwSize, a,b,c,d)
Prototype Prototype_PBOSL_GetExtendedUdpTable(MIB_TCPTABLE , dwSize, a,b,c,d)
Global PBOSL_Process_Library.i
Global PBOSL_EnumProcesses.Prototype_PBOSL_EnumProcesses
Global PBOSL_EnumProcessModules.Prototype_PBOSL_EnumProcessModules
Global PBOSL_EnumProcessModulesEx.Prototype_PBOSL_EnumProcessModulesEx
Global PBOSL_GetModuleBaseName.Prototype_PBOSL_GetModuleBaseName
Global PBOSL_GetModuleFileName.Prototype_PBOSL_GetModuleFileName
Global PBOSL_GetProcessMemoryInfo.Prototype_PBOSL_GetProcessMemoryInfo
Global PBOSL_GetModuleInformation.Prototype_PBOSL_GetModuleInformation
Global PBOSL_EmptyWorkingSet.Prototype_PBOSL_EmptyWorkingSet
Global PBOSL_ProcessesArrayMem.i
Global PBOSL_ProcessesArrayModuleMem.i
Prototype Prototype_OpenThread(dwDesiredAccess.l,bInheritHandle.l,dwThreadId.l)
Global OpenThread_.Prototype_OpenThread
Global PBOSL_DriverMem.i
Global PBOSL_DLLMemModule.i
Global PBOSL_nProcessesZeiger.i
#PBOSL_NbProcessesMax=1024
Structure PROCESS_MEMORY_COUNTERS
cb.l
PageFaultCount.l
PeakWorkingSetSize.i
WorkingSetSize.i
QuotaPeakPagedPoolUsage.i
QuotaPagedPoolUsage.i
QuotaPeakNonPagedPoolUsage.i
QuotaNonPagedPoolUsage.i
PageFileUsage.i
PeakPagefileUsage.i
EndStructure
Structure PBOSL_ProcessesStruct
PID.i
Name.s
Filename.s
Memory.PROCESS_MEMORY_COUNTERS
EndStructure
Structure ModuleInformation ;Api definition
lpBaseOfDll.i
SizeOfImage.i;
EntryPoint.i
EndStructure
Structure PBOSL_ModuleStruct
FileName.s
ModuleInformation.ModuleInformation
EndStructure
Structure thread32
size.l
use.l
idth.l
parentid.l
base.l
delta.l
flags.l
EndStructure
#TH32CS_SNAPTHREAD=4
#THREAD_SUSPEND_RESUME=2
Procedure.s PBOSL_DebugApiError(el.l)
Protected Nop.s
Nop=Space(1024)
FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM,0, el,0,@Nop.s,1024,0)
ProcedureReturn Hex(el)+":"+Nop.s
EndProcedure
Procedure PBOSL_Process_Init()
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
CompilerDefault
MessageRequester("Info","Not supported OS for PBOSL_Process_Library",0)
End
CompilerEndSelect
;#PB_Compiler_Processor = #PB_Processor_x86
kernel32dll=OpenLibrary(#PB_Any,"kernel32.dll")
OpenThread_=GetFunction(kernel32dll,"OpenThread") ;Should always work !!
PBOSL_Process_Library=OpenLibrary(#PB_Any,"psapi.dll")
If PBOSL_Process_Library
PBOSL_EnumProcesses= GetFunction(PBOSL_Process_Library, "EnumProcesses")
;Debug PBOSL_EnumProcesses
PBOSL_EnumProcessModules = GetFunction(PBOSL_Process_Library, "EnumProcessModules")
PBOSL_EnumProcessModulesEx = GetFunction(PBOSL_Process_Library, "EnumProcessModulesEx")
PBOSL_GetProcessMemoryInfo= GetFunction(PBOSL_Process_Library, "GetProcessMemoryInfo")
PBOSL_GetModuleInformation=GetFunction(PBOSL_Process_Library, "GetModuleInformation")
PBOSL_EmptyWorkingSet=GetFunction(PBOSL_Process_Library, "EmptyWorkingSet")
;EnumDeviceDrivers= GetProcAddress_(PSAPI, "EnumDeviceDrivers")
If #PB_Compiler_Unicode=0
PBOSL_GetModuleBaseName = GetFunction(PBOSL_Process_Library, "GetModuleBaseNameA")
PBOSL_GetModuleFileName = GetFunction(PBOSL_Process_Library, "GetModuleFileNameExA")
;Debug PBOSL_GetModuleFileName
;PBOSL_GetDeviceDriversBaseName= GetProcAddress_(PSAPI, "GetDeviceDriverBaseNameA")
; GetDeviceDriversFileName= GetProcAddress_(PSAPI, "GetDeviceDriverFileNameA")
Else
;UniCode Mode
PBOSL_GetModuleBaseName = GetFunction(PBOSL_Process_Library, "GetModuleBaseNameW")
PBOSL_GetModuleFileName = GetFunction(PBOSL_Process_Library, "GetModuleFileNameExW")
; GetDeviceDriversBaseName= GetProcAddress_(PSAPI, "GetDeviceDriverBaseNameW")
; GetDeviceDriversFileName= GetProcAddress_(PSAPI, "GetDeviceDriverFileNameW")
EndIf
;GetDeviceDriverBaseName Lib "psapi.dll" Alias "GetDeviceDriverBaseName" (ImageBase As Any, ByVal lpBaseName As String, ByVal nSize As Long )
;EnumDeviceDrivers Lib "PSAPI.DLL" (lpImageBase() As Long,ByVal cb As Long , lpcbNeeded As Long
;reserve some memory
; PBOSL_DriverMem=GlobalAlloc_(#GMEM_FIXED ,#PBOSL_NbProcessesMax*4)
; PBOSL_DLLMemModule=GlobalAlloc_(#GMEM_FIXED ,#PBOSL_NbProcessesMax*4)
;ProcedureReturn PSAPI
ProcedureReturn PBOSL_Process_Library
Else
;Cannot load Library ???
ProcedureReturn 0
PBOSL_ProcessesArrayMem=GlobalAlloc_(#GMEM_FIXED ,#PBOSL_NbProcessesMax*4)
PBOSL_DriverMem=GlobalAlloc_(#GMEM_FIXED ,#PBOSL_NbProcessesMax*4)
PBOSL_DLLMemModule=GlobalAlloc_(#GMEM_FIXED ,#PBOSL_NbProcessesMax*4)
EndIf
EndProcedure
Procedure PBOSL_Process_End()
If PBOSL_DriverMem
GlobalFree_(PBOSL_DriverMem)
EndIf
If PBOSL_DLLMemModule
GlobalFree_(PBOSL_DLLMemModule)
EndIf
If PBOSL_Process_Library
FreeLibrary_(PBOSL_Process_Library)
EndIf
EndProcedure
Structure myTOKEN_PRIVILEGES
PrivilegeCount.l
TheLuid.LUID
Attributes.l
EndStructure
Procedure SetRights(rightsname.s)
Define tLuid.LUID
Define tTokenPriv.myTOKEN_PRIVILEGES
Define tTokenPrivNew.myTOKEN_PRIVILEGES
Define lBufferNeeded.l
;#PROCESS_ALL_ACCESS = $1F0FFF
#PROCESS_TERMINAT = $1
#ANYSIZE_ARRAY = 1
#TOKEN_ADJUST_PRIVILEGES = $20
#TOKEN_QUERY = $8
SE_DEBUG_NAME.s = rightsname.s
#SE_PRIVILEGE_ENABLED = $2
lhThisProc = GetCurrentProcess_()
res=OpenProcessToken_(lhThisProc, #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @lhTokenHandle)
res=LookupPrivilegeValue_("", SE_DEBUG_NAME.s, tLuid)
;Set the number of privileges to be change
tTokenPriv\PrivilegeCount = 1
tTokenPriv\TheLuid\LowPart = tLuid\LowPart
tTokenPriv\TheLuid\HighPart = tLuid\HighPart
tTokenPriv\Attributes = #SE_PRIVILEGE_ENABLED
;Enable the kill privilege in the access token of this process
res=AdjustTokenPrivileges_(lhTokenHandle, 0, tTokenPriv, SizeOf(tTokenPrivNew), tTokenPrivNew, @lBufferNeeded)
EndProcedure
ProcedureDLL.i ExamineProcesses(List PBOSL_ProcessList.PBOSL_ProcessesStruct());take a snapshot and examine processes, fill linkedlist
Protected nProcesses.i
SetRights("SeDebugPrivilege")
PBOSL_ProcessesArrayMem=GlobalAlloc_(#GMEM_FIXED ,#PBOSL_NbProcessesMax*4)
PBOSL_ProcessesArrayModuleMem=GlobalAlloc_(#GMEM_FIXED ,#PBOSL_NbProcessesMax*4)
PBOSL_EnumProcesses(PBOSL_ProcessesArrayMem, #PBOSL_NbProcessesMax, @nProcesses.i)
ClearList(PBOSL_ProcessList())
;Debug "Anzahl Processe ="+Str(nProcesses)
If nProcesses/4> 0
nProcesses=nProcesses/4;SizeOf(Integer)
Protected iTemp.i
Protected *L1.LONG
For iTemp=1 To nProcesses
;now fill the LinkedList
AddElement(PBOSL_ProcessList())
Protected tPID.l
tPID=PeekL(PBOSL_ProcessesArrayMem+(iTemp-1)*4)
If tPID=0
PBOSL_ProcessList()\Name="IDLE"
PBOSL_ProcessList()\PID=0
Else
Protected hProcess.i
PBOSL_ProcessList()\PID=tPID
;SetRights("SeDebugPrivilege")
hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION | #PROCESS_VM_READ, 0, tPID)
If hProcess
Protected Result.i
Protected BaseModule.i
Protected cbNeeded.i
#LIST_MODULES_32BIT=$01 ;List the 32-bit modules.
#LIST_MODULES_64BIT=$02 ;List the 64-bit modules.
#LIST_MODULES_ALL=$03 ;List all modules.
#LIST_MODULES_DEFAULT=$0 ;Use the Default behavior.
;Result=PBOSL_EnumProcessModules(hProcess, @BaseModule, 4, @cbNeeded)
Dim BaseModule.i(#PBOSL_NbProcessesMax)
Result=PBOSL_EnumProcessModulesEx(hProcess, PBOSL_ProcessesArrayModuleMem, #PBOSL_NbProcessesMax*4, @cbNeeded, #LIST_MODULES_ALL)
;Debug "cbNeeded="+Str(cbNeeded)
If Result<>0
;Debug Str(PeekI(PBOSL_ProcessesArrayModuleMem))+"#"+Str(cbNeeded)
Protected Name$
Name$ = Space(255)
Result=PBOSL_GetModuleBaseName(hProcess, PeekI(PBOSL_ProcessesArrayModuleMem), @Name$, Len(Name$))
If Name$="?"
PBOSL_ProcessList()\Name="System"
Else
PBOSL_ProcessList()\Name=Name$
EndIf
Name$=Space(512)
Result=PBOSL_GetModuleFileName(hProcess, PeekI(PBOSL_ProcessesArrayModuleMem), @Name$, Len(Name$))
If result=0:Debug "Error GetModuleFileName: " + PBOSL_DebugApiError(GetLastError_()) :EndIf
PBOSL_ProcessList()\FileName=Name$
PBOSL_ProcessList()\Memory\cb=SizeOf(PROCESS_MEMORY_COUNTERS )
Result=PBOSL_GetProcessMemoryInfo(hProcess, PBOSL_ProcessList()\Memory, SizeOf(PROCESS_MEMORY_COUNTERS ))
If result=0:Debug "Error memoryInfo: " + PBOSL_DebugApiError(GetLastError_()) :EndIf
; If cbNeeded/4>0
; cbNeeded=cbNeeded/4
; ;Debug "Anzahl Module="+Str(cbNeeded)
; Define I.i
; For I=1 To cbneeded
; Name$ = Space(255)
; Result=PBOSL_GetModuleFileName(hProcess, PeekI(PBOSL_ProcessesArrayModuleMem + (I-1)*4), @Name$, Len(Name$))
; ; Debug "innedrin isses=" +name$
; Next I
; EndIf
Else
;Debug "ResultEnumProcessModules="+Hex(result)
EndIf
CloseHandle_(hProcess)
Else
PBOSL_ProcessList()\Name="cannot open Process"
PBOSL_ProcessList()\FileName=""
EndIf
EndIf
Next
EndIf
If PBOSL_ProcessesArrayMem ;release memory
GlobalFree_(PBOSL_ProcessesArrayMem)
EndIf
If PBOSL_ProcessesArrayModuleMem
GlobalFree_(PBOSL_ProcessesArrayModuleMem)
EndIf
ProcedureReturn nProcesses
EndProcedure
ProcedureDLL ExamineProcessDLLS(PID,List PBOSL_ModuleList.PBOSL_ModuleStruct());Examine all DLL's of a process
hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION | #PROCESS_VM_READ, 0, PID)
If hProcess
Protected Result.i
Protected BaseModule.i
Protected cbNeeded.i
#LIST_MODULES_32BIT=$01 ;List the 32-bit modules.
#LIST_MODULES_64BIT=$02 ;List the 64-bit modules.
#LIST_MODULES_ALL=$03 ;List all modules.
#LIST_MODULES_DEFAULT=$0 ;Use the Default behavior.
;ok, below Vista the Ex Function is not there
If OSVersion()< #PB_OS_Windows_Vista
Result=PBOSL_EnumProcessModules(hProcess, PBOSL_ProcessesArrayModuleMem, #PBOSL_NbProcessesMax*4, @cbNeeded)
Else
Result=PBOSL_EnumProcessModulesEx(hProcess, PBOSL_ProcessesArrayModuleMem, #PBOSL_NbProcessesMax*4, @cbNeeded, #LIST_MODULES_ALL)
EndIf
If Result<>0
If cbNeeded/4>0
ClearList( PBOSL_ModuleList())
MyStep=SizeOf(Integer)
cbNeeded=cbNeeded/MyStep
Define I.i
; CompilerIf #PB_Compiler_Processor =:#PB_Processor_x86
For I=1 To cbneeded
Name$ = Space(512)
Base.i=PeekI(PBOSL_ProcessesArrayModuleMem + (I-1)*MyStep)
Result=PBOSL_GetModuleFileName(hProcess, Base, @Name$, Len(Name$))
If result=0:Debug "Error ModuleFilename: " + PBOSL_DebugApiError(GetLastError_()) :EndIf
If Trim(Name$)<>""
AddElement(PBOSL_ModuleList())
PBOSL_ModuleList()\FileName=Name$
Result=PBOSL_GetModuleInformation(hProcess, Base,PBOSL_ModuleList()\ModuleInformation,SizeOf(ModuleInformation) )
If result=0:Debug "Error ModuleInformation: " + PBOSL_DebugApiError(GetLastError_()) :EndIf
EndIf
; Debug "innedrin isses=" +name$
Next I
EndIf
EndIf
CloseHandle_(hProcess)
ProcedureReturn cbNeeded
EndIf
EndProcedure
ProcedureDLL ReArrangeMem(PID)
SetRights("SeDebugPrivilege")
hProcess = OpenProcess_(#PROCESS_ALL_ACCESS , 0, PID)
If hProcess
PBOSL_EmptyWorkingSet(hProcess)
SetProcessWorkingSetSize_(hProcess, -1, -1)
CloseHandle_(hProcess)
EndIf
EndProcedure
ProcedureDLL RemovePagefaults(PID);remove unneded memory from Process
hProcess = OpenProcess_(#PROCESS_ALL_ACCESS , 0, PID)
If hProcess
Result=CallFunctionFast(EmptyWorkingSet, hProcess)
CloseHandle_(hProcess)
If Result=0:Debug "Error RemovePageFaults: " + PBOSL_DebugApiError(GetLastError_()):EndIf
ProcedureReturn Result
Else
ProcedureReturn -2
EndIf
EndProcedure
Procedure GetOwnPID()
ProcedureReturn GetCurrentProcess_()
EndProcedure
ProcedureDLL GetProcessPIDfromHWND(hwnd);Get a PID from the window handle (hwnd)
Result=GetWindowThreadProcessId_ (hwnd, @PID)
ProcedureReturn PID
EndProcedure
ProcedureDLL KillPID(PID,ExitCode);exit the process with Exitcode
SetRights("SeDebugPrivilege")
hProcess = OpenProcess_(#PROCESS_TERMINAT, 0, PID)
If hProcess
Result=TerminateProcess_(hProcess,ExitCode)
CloseHandle_(hProcess)
ProcedureReturn Result
EndIf
EndProcedure
ProcedureDLL KillAllProcess(LName.s,ExitCode);exit all processes with Name with Exitcode
SetRights("SeDebugPrivilege")
NewList priv_ProcessList.PBOSL_ProcessesStruct()
Protected c1.l
Protected c2.l
c1.l=ExamineProcesses(priv_ProcessList())
If c1
ForEach priv_ProcessList()
If LCase(priv_ProcessList()\Name )=LCase(LName)
If KillPID(priv_ProcessList()\PID,ExitCode)
c2+1
EndIf
EndIf
Next
EndIf
ProcedureReturn c2
EndProcedure
ProcedureDLL PauseProcess(PID)
thread.thread32
snap = CreateToolhelp32Snapshot_(#TH32CS_SNAPTHREAD,0)
If snap
thread\size=SizeOf(thread32)
Thread32First_(snap,@thread)
If thread\parentid=PID
h=OpenThread_(#THREAD_SUSPEND_RESUME,0,thread\idth)
SuspendThread_(h)
CloseHandle_(h)
EndIf
While Thread32Next_(snap,@thread)
If thread\parentid=PID
h=OpenThread_(#THREAD_SUSPEND_RESUME,0,thread\idth)
SuspendThread_(h)
CloseHandle_(h)
success=1
EndIf
Wend
EndIf
ProcedureReturn success
EndProcedure
ProcedureDLL ResumeProcess(PID)
thread.thread32
snap = CreateToolhelp32Snapshot_(#TH32CS_SNAPTHREAD,0)
If snap
thread\size=SizeOf(thread32)
Thread32First_(snap,@thread)
If thread\parentid=PID
h=OpenThread_(#THREAD_SUSPEND_RESUME,0,thread\idth)
ResumeThread_(h)
CloseHandle_(h)
EndIf
While Thread32Next_(snap,@thread)
If thread\parentid=PID
h=OpenThread_(#THREAD_SUSPEND_RESUME,0,thread\idth)
ResumeThread_(h)
CloseHandle_(h)
success=1
EndIf
Wend
EndIf
ProcedureReturn success
EndProcedure
ProcedureDLL GetProcessPrio(PID);get the priority of the process
hProcess.i = OpenProcess_(#PROCESS_QUERY_INFORMATION | #PROCESS_VM_READ, 0, PID)
If hProcess
prio=GetPriorityClass_(hProcess)
CloseHandle_(hProcess)
ProcedureReturn prio
EndIf
EndProcedure
ProcedureDLL SetProcessPrio(PID,Priority);sets the priority of the process
SetRights("SeIncreaseBasePriorityPrivilege")
hProcess.i = OpenProcess_(#PROCESS_SET_INFORMATION , 1, PID)
If hProcess
prio=SetPriorityClass_(hProcess,Priority)
CloseHandle_(hProcess)
ProcedureReturn prio
EndIf
EndProcedure
Structure ConnectionTable
PID.l
State.l
LocalIP.s
LocalPort.l
RemoteIP.s
RemotePort.l
EndStructure
#AF_INET = 2 ;IPV4
#AF_INET6 = 23 ;IPV6
#TCP_TABLE_BASIC_LISTENER = 0
#TCP_TABLE_BASIC_CONNECTIONS = 1
#TCP_TABLE_BASIC_ALL = 2
#TCP_TABLE_OWNER_PID_LISTENER = 3
#TCP_TABLE_OWNER_PID_CONNECTIONS = 4
#TCP_TABLE_OWNER_PID_ALL = 5
#TCP_TABLE_OWNER_MODULE_LISTENER = 6
#TCP_TABLE_OWNER_MODULE_CONNECTIONS = 7
#TCP_TABLE_OWNER_MODULE_ALL = 8
#UDP_TABLE_BASIC = 0
#UDP_TABLE_OWNER_PID = 1
#UDP_TABLE_OWNER_MODULE = 0
Structure MIB_TCPTABLE_OWNER_PID
dwStats.l
dwLocalAddr.l
dwLocalPort.l
dwRemoteAddr.l
dwRemotePort.l
dwOwningPid.l
EndStructure
Structure MIB_TCPTABLE
dwNumEntries.l
table.MIB_TCPTABLE_OWNER_PID[2048]
EndStructure
Structure MIB_UDPTABLE_OWNER_PID
dwLocalAddr.l
dwLocalPort.l
dwOwningPid.l
EndStructure
Structure MIB_UDPTABLE
dwNumEntries.l
table.MIB_UDPTABLE_OWNER_PID[2048]
EndStructure
Procedure GetConnectionFromPID(PID,List ConnectionTable.ConnectionTable())
Protected cc.l
PBOSL_GetExtendedTcpTable.Prototype_PBOSL_GetExtendedTcpTable
PBOSL_GetExtendedUdpTable.Prototype_PBOSL_GetExtendedUdpTable
iphlpapi.i=OpenLibrary(#PB_Any, "iphlpapi.dll")
If iphlpapi
PBOSL_GetExtendedTcpTable=GetFunction(iphlpapi,"GetExtendedTcpTable")
PBOSL_GetExtendedUdpTable=GetFunction(iphlpapi,"GetExtendedUdpTable")
ClearList(ConnectionTable())
dwSize = $0
If PBOSL_GetExtendedTcpTable(@tcpTable.MIB_TCPTABLE , @dwSize, #True,#AF_INET,#TCP_TABLE_OWNER_PID_ALL,0)
If PBOSL_GetExtendedTcpTable(@tcpTable.MIB_TCPTABLE , @dwSize, #True,#AF_INET,#TCP_TABLE_OWNER_PID_ALL,0) = #NO_ERROR
For cnt = 0 To tcpTable\dwNumEntries - 1
If tcpTable\table[cnt]\dwOwningPid=PID
cc+1
AddElement(ConnectionTable())
ConnectionTable()\State=tcpTable\table[cnt]\dwStats
ConnectionTable()\LocalIP=IPString(tcpTable\table[cnt]\dwLocalAddr)
ConnectionTable()\LocalPort=htons_(tcpTable\table[cnt]\dwLocalPort)
ConnectionTable()\RemoteIP=IPString(tcpTable\table[cnt]\dwRemoteAddr)
ConnectionTable()\RemotePort=htons_(tcpTable\table[cnt]\dwRemotePort)
EndIf
Next
EndIf
EndIf
dwSize = $0
If PBOSL_GetExtendedUdpTable(@udpTable.MIB_UDPTABLE , @dwSize, #True,#AF_INET,#UDP_TABLE_OWNER_PID,0)
If PBOSL_GetExtendedUdpTable(@udpTable.MIB_UDPTABLE , @dwSize, #True,#AF_INET,#UDP_TABLE_OWNER_PID,0) = #NO_ERROR
For cnt = 0 To udpTable\dwNumEntries - 1
If udpTable\table[cnt]\dwOwningPid=PID
cc+1
AddElement(ConnectionTable())
ConnectionTable()\State=t-1
ConnectionTable()\LocalIP= IPString(udpTable\table[cnt]\dwLocalAddr)
ConnectionTable()\LocalPort=htons_(udpTable\table[cnt]\dwLocalPort)
EndIf
Next
EndIf
EndIf
;
CloseLibrary(iphlpapi)
EndIf
ProcedureReturn cc
EndProcedure
Procedure GetConnections(List ConnectionTable.ConnectionTable())
Protected cc.l
PBOSL_GetExtendedTcpTable.Prototype_PBOSL_GetExtendedTcpTable
PBOSL_GetExtendedUdpTable.Prototype_PBOSL_GetExtendedUdpTable
iphlpapi.i=OpenLibrary(#PB_Any, "iphlpapi.dll")
If iphlpapi
PBOSL_GetExtendedTcpTable=GetFunction(iphlpapi,"GetExtendedTcpTable")
PBOSL_GetExtendedUdpTable=GetFunction(iphlpapi,"GetExtendedUdpTable")
ClearList(ConnectionTable())
dwSize = $0
If PBOSL_GetExtendedTcpTable(@tcpTable.MIB_TCPTABLE , @dwSize, #True,#AF_INET,#TCP_TABLE_OWNER_PID_ALL,0)
If PBOSL_GetExtendedTcpTable(@tcpTable.MIB_TCPTABLE , @dwSize, #True,#AF_INET,#TCP_TABLE_OWNER_PID_ALL,0) = #NO_ERROR
For cnt = 0 To tcpTable\dwNumEntries - 1
AddElement(ConnectionTable())
cc+1
ConnectionTable()\PID=tcpTable\table[cnt]\dwOwningPid
ConnectionTable()\State=tcpTable\table[cnt]\dwStats
ConnectionTable()\LocalIP=IPString(tcpTable\table[cnt]\dwLocalAddr)
ConnectionTable()\LocalPort=htons_(tcpTable\table[cnt]\dwLocalPort)
ConnectionTable()\RemoteIP=IPString(tcpTable\table[cnt]\dwRemoteAddr)
ConnectionTable()\RemotePort=htons_(tcpTable\table[cnt]\dwRemotePort)
Next
EndIf
EndIf
dwSize = $0
If PBOSL_GetExtendedUdpTable(@udpTable.MIB_UDPTABLE , @dwSize, #True,#AF_INET,#UDP_TABLE_OWNER_PID,0)
If PBOSL_GetExtendedUdpTable(@udpTable.MIB_UDPTABLE , @dwSize, #True,#AF_INET,#UDP_TABLE_OWNER_PID,0) = #NO_ERROR
For cnt = 0 To udpTable\dwNumEntries - 1
cc+1
AddElement(ConnectionTable())
ConnectionTable()\PID=udpTable\table[cnt]\ dwOwningPid
ConnectionTable()\State=t-1
ConnectionTable()\LocalIP= IPString(udpTable\table[cnt]\dwLocalAddr)
ConnectionTable()\LocalPort=htons_(udpTable\table[cnt]\dwLocalPort)
Next
EndIf
EndIf
;
CloseLibrary(iphlpapi)
EndIf
ProcedureReturn cc
EndProcedure
ProcedureDLL pPeekL(handle,addr);get a Long from the process with Offset
SetRights("SeDebugPrivilege")
hProcess = OpenProcess_(#PROCESS_VM_READ, 0, handle)
If hProcess
ReadProcessMemory_(hProcess,addr,@res,4,0)
CloseHandle_(hProcess)
ProcedureReturn res
EndIf
EndProcedure
ProcedureDLL.w pPeekW(handle,addr);get a word from the process with Offset
SetRights("SeDebugPrivilege")
hProcess = OpenProcess_(#PROCESS_VM_READ, 0, handle)
If hProcess
ReadProcessMemory_(hProcess,addr,@res.w,2,0)
CloseHandle_(hProcess)
ProcedureReturn res
EndIf
EndProcedure
ProcedureDLL.b pPeekB(handle,addr);get a Byte from the process with Offset
SetRights("SeDebugPrivilege")
hProcess = OpenProcess_(#PROCESS_VM_READ , 0, handle)
If hProcess
ReadProcessMemory_(hProcess,addr,@res.b,1,0)
CloseHandle_(hProcess)
ProcedureReturn res
EndIf
EndProcedure
ProcedureDLL.s pPeekS(handle,addr);get a String from the process with Offset
SetRights("SeDebugPrivilege")
hProcess = OpenProcess_(#PROCESS_VM_READ , 0, handle)
If hProcess
res.s=""
Repeat
ReadProcessMemory_(hProcess,addr,@res2.b,1,0)
res+Chr(res2.b & $FF)
addr+1
Until byte=0
CloseHandle_(hProcess)
ProcedureReturn res
EndIf
EndProcedure
ProcedureDLL pReadMemory(handle,addr, DestinationMemoryID, Length);copys Data from the process with Offset to own Process Destinationmemory
SetRights("SeDebugPrivilege")
hProcess = OpenProcess_(#PROCESS_VM_READ, 0, handle)
If hProcess
ReadProcessMemory_(hProcess,addr,DestinationMemoryID,Length,0)
CloseHandle_(hProcess)
EndIf
EndProcedure
ProcedureDLL pPokeL(handle,addr,value);Writes a Long to the process with Offset
hProcess = OpenProcess_(#PROCESS_ALL_ACCESS , 0, handle)
If hProcess
OrigMode=1
Mode=#PAGE_EXECUTE_READWRITE
VirtualProtectEx_(hProcess,addr,4,Mode,@OrigMode)
res=WriteProcessMemory_(hProcess,addr,@value,4,0)
VirtualProtectEx_(hProcess,addr,4,OrigMode,@Mode)
CloseHandle_(hProcess)
ProcedureReturn res
EndIf
EndProcedure
ProcedureDLL pPokeW(handle,addr,value.w);Writes a word to the process with Offset
hProcess = OpenProcess_(#PROCESS_ALL_ACCESS , 0, handle)
If hProcess
OrigMode=1
Mode=#PAGE_EXECUTE_READWRITE
VirtualProtectEx_(hProcess,addr,2,Mode,@OrigMode)
res=WriteProcessMemory_(hProcess,addr,@value,2,0)
VirtualProtectEx_(hProcess,addr,2,OrigMode,@Mode)
CloseHandle_(hProcess)
ProcedureReturn res
EndIf
EndProcedure
ProcedureDLL pPokeB(handle,addr,value.b);Writes a Byte to the process with Offset
hProcess = OpenProcess_(#PROCESS_ALL_ACCESS , 0, handle)
If hProcess
OrigMode=1
Mode=#PAGE_EXECUTE_READWRITE
VirtualProtectEx_(hProcess,addr,1,Mode,@OrigMode)
WriteProcessMemory_(hProcess,addr,@value,1,0)
VirtualProtectEx_(hProcess,addr,1,OrigMode,@Mode)
CloseHandle_(hProcess)
ProcedureReturn res
EndIf
EndProcedure
ProcedureDLL pWriteMemory(handle,addr, SourceMemoryID, Laenge) ;copys Data from Sourcememory(own process) to the process with Offset
hProcess = OpenProcess_(#PROCESS_ALL_ACCESS , 0, handle)
If hProcess
OrigMode=1
Mode=#PAGE_EXECUTE_READWRITE
VirtualProtectEx_(hProcess,addr,Laenge,Mode,@OrigMode)
res=WriteProcessMemory_(hProcess,addr,SourceMemoryID,Laenge,0)
VirtualProtectEx_(hProcess,addr,Laenge,OrigMode,@Mode)
CloseHandle_(hProcess)
ProcedureReturn res
EndIf
EndProcedure
Procedure GetProcessPIDperName(Name.s,List PBOSL_ProcessList.PBOSL_ProcessesStruct())
Name2.s=LCase(Name)
ResetList(PBOSL_ProcessList())
ForEach PBOSL_ProcessList()
Name1.s=PBOSL_ProcessList()\Name
If LCase(Name1)=LCase(Name2)
ProcedureReturn PBOSL_ProcessList()\PID
EndIf
Next
EndProcedure
Enumeration
#Window_0
#Button_Refresh
#Tree_0
#Button_Kill
#Text_process
#Button_PauseResume
#Button_RArrangeMem
#Panel_0
#Listview_IPLIST
EndEnumeration
If OpenWindow(#Window_0, 10, 10, 600, 600, "PBOSL Process Include Example", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
ButtonGadget(#Button_Refresh, 10, 10, 70, 30, "Refresh")
ButtonGadget(#Button_Kill, 90, 10, 90, 30, "Kill Process")
TextGadget(#Text_process, 10, 510, 480, 20, "Process")
ButtonGadget(#Button_PauseResume, 190, 10, 90, 30, "Pause/Resume")
ButtonGadget(#Button_RArrangeMem, 290, 10, 110, 30, "ReArange Memory")
PanelGadget(#Panel_0, 0, 50, 600, 550)
AddGadgetItem(#Panel_0, -1, "Processes")
TreeGadget(#Tree_0, 1, 1, 580, 550)
AddGadgetItem(#Panel_0, -1, "IP-List")
ListViewGadget(#Listview_IPLIST, 1, 1, 580, 550)
CloseGadgetList()
EndIf
PBOSL_Process_INIT()
Define ProcessCount.i
NewList priv_ProcessList.PBOSL_ProcessesStruct()
NewList priv_ModuleList.PBOSL_ModuleStruct()
Filename.s="calc.exe"
;RunProgram(Filename)
;RunProgram(Filename)
;RunProgram(Filename)
Repeat ; Start of the event loop
Event = WaitWindowEvent() ; This line waits until an event is received from Windows
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
;You can place code here, and use the result as parameters for the procedures
If Event = #PB_Event_Gadget
If GadgetID = #Button_Refresh
ClearGadgetItems(#Tree_0)
Processcount=ExamineProcesses(priv_ProcessList())
Debug "-----------------------"
Debug "Processcount="+Str(Processcount)
ForEach priv_ProcessList()
AddGadgetItem(#Tree_0, -1, Str(priv_ProcessList()\PID) +" " + priv_ProcessList()\Name ,0,0)
AddGadgetItem(#Tree_0, -1, "located at " + GetPathPart(priv_ProcessList()\FileName) ,0,1)
AddGadgetItem(#Tree_0, -1, "Memory Usage " ,0,1)
AddGadgetItem(#Tree_0, -1, "WorkingSetSize " + Hex(priv_ProcessList()\Memory\WorkingSetSize ) ,0,2)
AddGadgetItem(#Tree_0, -1, "PageFaultCount " + Hex(priv_ProcessList()\Memory\PageFaultCount ) ,0,2)
AddGadgetItem(#Tree_0, -1, "PeakWorkingSetSize " + Hex(priv_ProcessList()\Memory\PeakWorkingSetSize ) ,0,2)
AddGadgetItem(#Tree_0, -1, "QuotaPeakPagedPoolUsage " + Hex(priv_ProcessList()\Memory\QuotaPeakPagedPoolUsage) ,0,2)
AddGadgetItem(#Tree_0, -1, "QuotaPagedPoolUsage " + Hex(priv_ProcessList()\Memory\QuotaPagedPoolUsage ) ,0,2)
AddGadgetItem(#Tree_0, -1, "QuotaPeakNonPagedPoolUsage " + Hex(priv_ProcessList()\Memory\QuotaPeakNonPagedPoolUsage ) ,0,2)
AddGadgetItem(#Tree_0, -1, "QuotaNonPagedPoolUsage " + Hex(priv_ProcessList()\Memory\QuotaNonPagedPoolUsage) ,0,2)
AddGadgetItem(#Tree_0, -1, "PageFileUsage " + Hex(priv_ProcessList()\Memory\PageFileUsage ) ,0,2)
AddGadgetItem(#Tree_0, -1, "PeakPagefileUsage " + Hex(priv_ProcessList()\Memory\PeakPagefileUsage) ,0,2)
Modules=ExamineProcessDLLs(priv_ProcessList()\PID, priv_ModuleList())
If Modules
AddGadgetItem(#Tree_0, -1, Str(Modules) + " Module" ,0,1)
ForEach priv_ModuleList()
AddGadgetItem(#Tree_0, -1, GetFilePart(priv_ModuleList()\FileName) ,0,2)
AddGadgetItem(#Tree_0, -1, "located at " + GetPathPart(priv_ModuleList()\FileName) ,0,3)
AddGadgetItem(#Tree_0, -1, "Base of Image in Memory= "+Hex(priv_ModuleList()\ModuleInformation\lpBaseOfDll) ,0,3)
AddGadgetItem(#Tree_0, -1, "EntryPoint of Image in Memory= "+Hex(priv_ModuleList()\ModuleInformation\EntryPoint) ,0,3)
AddGadgetItem(#Tree_0, -1, "Size of Image in Memory= "+Hex(priv_ModuleList()\ModuleInformation\SizeofImage) ,0,3)
Next
EndIf
NewList ConnectionTable.ConnectionTable()
Define o.s
If GetConnectionFromPID(priv_ProcessList()\PID,ConnectionTable())
AddGadgetItem(#Tree_0, -1, Str(ListSize(ConnectionTable()) )+ " CONNECTIONS" ,0,1)
ForEach ConnectionTable()
If ConnectionTable()\State=-1
o.s="UDP-Connection on "+ConnectionTable()\LocalIP+" at "+Str(ConnectionTable()\Localport)
Else
o="TCP-Connection on "+ConnectionTable()\LocalIP+"/"+Str(ConnectionTable()\Localport)+" from "+ConnectionTable()\RemoteIP+"/"+Str(ConnectionTable()\Remoteport)
Select ConnectionTable()\State
Case 1
o +" Closed"
Case 2
o + " Listening"
Case 3
o + " SYN Sent"
Case 4
o + " SYN Received"
Case 5
o + " Established"
Case 6
o + " Waiting For FIN"
Case 7
o + " Waiting For FIN"
Case 8
o + " Waiting For Close"
Case 9
o + " Closing"
Case 10
o + " Last ACK"
Case 11
o + " Time Wait"
Case 12
o + " TCB deleted"
Default
o + " unknown"
EndSelect
EndIf
AddGadgetItem(#Tree_0, -1, o ,0,2)
Next
EndIf
Next
If GetConnections(ConnectionTable())
ClearGadgetItems(#Listview_IPLIST)
ForEach ConnectionTable()
If ConnectionTable()\State=-1
o.s="UDP-Connection on "+ConnectionTable()\LocalIP+" at "+Str(ConnectionTable()\Localport)
Else
o="TCP-Connection on "+ConnectionTable()\LocalIP+"/"+Str(ConnectionTable()\Localport)+" from "+ConnectionTable()\RemoteIP+"/"+Str(ConnectionTable()\Remoteport)
Select ConnectionTable()\State
Case 1
o +" Closed"
Case 2
o + " Listening"
Case 3
o + " SYN Sent"
Case 4
o + " SYN Received"
Case 5
o + " Established"
Case 6
o + " Waiting For FIN"
Case 7
o + " Waiting For FIN"
Case 8
o + " Waiting For Close"
Case 9
o + " Closing"
Case 10
o + " Last ACK"
Case 11
o + " Time Wait"
Case 12
o + " TCB deleted"
Default
o + " unknown"
EndSelect
EndIf
AddGadgetItem(#Listview_IPLIST, -1, Str(ConnectionTable()\PID) +" : " + o )
Next
EndIf
ElseIf GadgetID = #Tree_0
ElseIf GadgetID = #Button_Kill
ElseIf GadgetID = #Button_PauseResume
ElseIf GadgetID = #Button_RArrangeMem
EndIf
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
PBOSL_Process_END()
End
; Debug "GetOwnPID()="+Str(GetOwnPID())
;
; PID=GetProcessPIDperName(Filename,priv_ProcessList())
; Debug PID
; If PID
; Rearrangemem(PID)
; PauseProcess(PID)
; MessageRequester("info","stopping PID " +Str(pid) ,0)
; ResumeProcess(PID)
; MessageRequester("info","Killing all " + filename ,0)
; ;KillPID(PID,0)
; Debug KillAllProcess("calc.exe",0)
; EndIf
Rings hat geschrieben:ziert sich nich beim zitieren
@Rings,
kann dich vollkommen verstehen. Hatte immer PBOSL immer so verstanden das der Source vorhanden sein sollte. Somit das man immer auch selber auch die neusten Versionen Updaten kann, beziehungsweise den Code auch selber weiter zu optimieren.
Es gibt leider nur wenige die ihre LIB´s auch pflegen.
Viele Grüsse
Michael
kann dich vollkommen verstehen. Hatte immer PBOSL immer so verstanden das der Source vorhanden sein sollte. Somit das man immer auch selber auch die neusten Versionen Updaten kann, beziehungsweise den Code auch selber weiter zu optimieren.
Es gibt leider nur wenige die ihre LIB´s auch pflegen.
Viele Grüsse
Michael
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
@rings danke ..
Meine Anfrage bezog sich allerdings mehr auf die offizielle PBOSL-Seite ..
hier wird angekündigt (und auch gemacht) und da ? .. nix zu sehen außer
dem alten Zeug.
Wär schade um den PBOSL-Ansatz, wenn das echt den Bach runterginge.
Meine Anfrage bezog sich allerdings mehr auf die offizielle PBOSL-Seite ..
hier wird angekündigt (und auch gemacht) und da ? .. nix zu sehen außer
dem alten Zeug.
Wär schade um den PBOSL-Ansatz, wenn das echt den Bach runterginge.
pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.