'---------------------------------------------------------------------------------------
' Module : mProcessInformation
' Author : Karcrack
' Now : 26/08/2010 15:00
' Purpose : Native Process Enumeration
' History : 26/08/2010 First cut .........................................................
'---------------------------------------------------------------------------------------
Option Explicit
Option Base 0
Public Type PROCESS
sName As String
lPID As Long
End Type
'NTDLL
Private Declare Function NtQuerySystemInformation Lib "NTDLL" (ByVal SystemInformationClass As Long, ByRef SystemInformation As Any, ByVal SystemInformationLength As Long, ByRef ReturnLength As Long) As Long
Private Declare Sub RtlMoveMemory Lib "NTDLL" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Const SystemProcessesAndThreadsInformation As Long = 5&
Private Const STATUS_INFO_LENGTH_MISMATCH As Long = &HC0000004
Public Function RetrieveProcesses() As PROCESS()
Dim bvSPI(17) As Long 'As SYSTEM_PROCESS_INFORMATION
Dim bvTmp() As PROCESS
Dim bvBuffer() As Byte
Dim cbBuffer As Long
Dim lRet As Long
Dim lPos As Long
Dim lSize As Long
ReDim bvTmp(0)
cbBuffer = 1
Do
cbBuffer = cbBuffer * 2
ReDim bvBuffer(cbBuffer)
lRet = NtQuerySystemInformation(SystemProcessesAndThreadsInformation, bvBuffer(0), cbBuffer, lSize)
Loop While lRet = STATUS_INFO_LENGTH_MISMATCH
If lRet < 0 Then Exit Function
lPos = VarPtr(bvBuffer(0))
Do
Call RtlMoveMemory(bvSPI(0), ByVal lPos, 18 * 4)
With bvTmp(UBound(bvTmp))
.lPID = bvSPI(17)
.sName = ReadUStr(bvSPI(15))
End With
lPos = lPos + bvSPI(0)
If bvSPI(0) = 0 Then Exit Do
ReDim Preserve bvTmp(UBound(bvTmp) + 1)
Loop
RetrieveProcesses = bvTmp
Erase bvBuffer
End Function
Private Function ReadUStr(ByVal lPtr As Long) As String
Dim i As Long
Dim uChar As Integer
If Not lPtr > 0 Then Exit Function
i = lPtr
Do
Call RtlMoveMemory(uChar, ByVal i, &H2)
If uChar = 0 Then Exit Do
ReadUStr = ReadUStr & ChrW$(uChar)
i = i + 2
Loop
End Function
http://www.advancevb.com.ar/?p=589
Saludos ;)
loco muy bueno lo probe y funciona bn ! me sorprenden tus codes y como t manejas !
que cabeza ;) buena alternativa a la clasica.
Me alegro que os haya gustado :)
Leandro, que le has dado de comer a ese gallo? :laugh:
HOLA!!!
Sos una bestia KarCrack Te felicito.
GRACIAS POR LEER!!!
Hola , interesante (como siempre), una pregunta, solo para saber, ya no sirve hacerlo con Kernel32 (CreateToolhelp32Snapshot + Process32First + Process32Next) o esta es solo una alternativa ?
Saludos ;)
Cita de: Dessa en 5 Septiembre 2010, 15:14 PM
Hola , interesante (como siempre), una pregunta, solo para saber, ya no sirve hacerlo con Kernel32 (CreateToolhelp32Snapshot + Process32First + Process32Next) o esta es solo una alternativa ?
Saludos ;)
Es simplemente una alternativa, se pueda sacar muchisma mas informacion de esas estructuras, solo es un ejemplo este code... Yo lo utilizo por que no es detectado, en cambio los otros metodos si...
.
Bueno, ahora que quedó aclarado el tema, y ya que está directamente relacionado con este hilo... alguien conoce un Windows-mensaje para detectar (via Hook) si se inició un nuevo proceso o se cerró alguno existente ?
PD: no me sirve comparar cadenas , tiene que ser un mensaje, gracias y saludos
Cita de: Dessa en 8 Septiembre 2010, 22:16 PM
Bueno, ahora que quedó aclarado el tema, y ya que está directamente relacionado con este hilo... alguien conoce un Windows-mensaje para detectar (via Hook) si se inició un nuevo proceso o se cerró alguno existente ?
PD: no me sirve comparar cadenas , tiene que ser un mensaje, gracias y saludos
Desde UserMode? ... Se me ocurre que podrias recibir el mensaje de cuando se crea una ventana... pero claro, estamos dando por hecho que todos los procesos crearan ventanas... por si acaso mirate esto:
http://msdn.microsoft.com/en-us/library/ms644990(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms644977(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms644991(v=VS.85).aspx
Y no puedes comparar PIDs??
EDITO:http://blogs.technet.com/b/heyscriptingguy/archive/2006/10/04/how-can-i-monitor-for-the-creation-of-different-processes.aspx
Siempre puedes hacerlo con WMI... :-X
Cita de: Karcrack en 9 Septiembre 2010, 12:47 PM
http://msdn.microsoft.com/en-us/library/ms644990(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms644977(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms644991(v=VS.85).aspx
Gracias Karcrack, voy a probar si sale con WH_SHELL.