Autor
|
Tema: [NTDLL] SystemProcessesAndThreadsInformation (Leído 5,803 veces)
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
'--------------------------------------------------------------------------------------- ' 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
|
|
« Última modificación: 9 Septiembre 2010, 12:49 pm por Karcrack »
|
En línea
|
|
|
|
_katze_
|
loco muy bueno lo probe y funciona bn ! me sorprenden tus codes y como t manejas !
|
|
|
En línea
|
|
|
|
LeandroA
|
que cabeza buena alternativa a la clasica.
|
|
|
En línea
|
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Me alegro que os haya gustado Leandro, que le has dado de comer a ese gallo?
|
|
|
En línea
|
|
|
|
79137913
Desconectado
Mensajes: 1.169
4 Esquinas
|
HOLA!!!
Sos una bestia KarCrack Te felicito.
GRACIAS POR LEER!!!
|
|
|
En línea
|
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!" "La peor de las ignorancias es no saber corregirlas"
79137913 *Shadow Scouts Team*
|
|
|
Dessa
Desconectado
Mensajes: 624
|
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
|
|
|
En línea
|
Adrian Desanti
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
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...
|
|
« Última modificación: 9 Septiembre 2010, 16:13 pm por Karcrack »
|
En línea
|
|
|
|
Dessa
Desconectado
Mensajes: 624
|
.
|
|
« Última modificación: 9 Septiembre 2010, 21:53 pm por Dessa »
|
En línea
|
Adrian Desanti
|
|
|
Dessa
Desconectado
Mensajes: 624
|
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
|
|
|
En línea
|
Adrian Desanti
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
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...
|
|
« Última modificación: 9 Septiembre 2010, 16:13 pm por Karcrack »
|
En línea
|
|
|
|
|
|