Hola, No ce como hacerle, Pero quiero Saber si se puede Detectar por ejemplo:
Sin la cmd o algún otro programa abre mi app quiero detectar eso.
pero no se como hacerlo, si alguien me puede ayudar. Gracias de antemano.
Lo que necesitaría saber es cual es el Proceso padre que ejecuta mi app.
Por orden de menor a mayor velocidad de ejecución:
- WMI (https://stackoverflow.com/a/2533287/1248295)
- CreateToolhelp32Snapshot (https://stackoverflow.com/a/16756808/1248295)
- NtQueryInformationProcess (https://stackoverflow.com/a/3346055/1248295)
Saludos.
1) Es posible Detectar que proceso hace una llamada por ejemplo al Kernel32.dll y que llamada esta haciendo por ejemplo VirtualProtectEx?
Cita de: **Aincrad** en 15 Marzo 2019, 23:27 PM
1) Es posible Detectar que proceso hace una llamada por ejemplo al Kernel32.dll y que llamada esta haciendo por ejemplo VirtualProtectEx?
Sí, mediante API hooking puedes averiguar que proceso realiza una llamada a una función específica, en este caso
VirtualProtectEx. Es un tema algo complejo que requiere cierto entendimiento y documentación. No soy ningún experto en el tema, pero aquí tienes un ejemplo que publiqué para interceptar las llamadas a la función
CreateProcess mediante la librería comercial
Deviare Api Hook (https://www.nektra.com/products/deviare-api-hook-windows/ (https://www.nektra.com/products/deviare-api-hook-windows/)):
- https://foro.elhacker.net/net/api_para_impedir_la_ejecucion_de_ejecutables-t451335.0.html;msg2067510#msg2067510
( el proceso que realizó la llamada a la función
CreateProcess se especifica en el parámetro
proc del método
OnCreateProcess_Called )
Otro ejemplo algo más corto:
- https://stackoverflow.com/a/4007625/1248295
Cita de: **Aincrad** en 15 Marzo 2019, 23:27 PM
Que tan rápido seria si uso esta class tuya?
Bueno, primero que nada y para evitar posibles confusiones, imagino que ya te habrás dado cuenta de que ese código es para obtener los procesos hijo, no el proceso padre, y como puedes comprobar por ti mismo ese algoritmo está basado en el uso de WMI, así que será tan rápido como lo que tarde la infraestructura WMI en devolver la respuesta a la petición o query enviada.
Al utilizar querys complejas, WMI puede llegar a demorarse 1 segundo o más en devolver la respuesta, pero en términos generales WMI siempre resultará una solución efectiva, aunque debido a la naturaleza de su intervalo resultará más lento que llamar directamente a las funciones de la API de Windows que puedan reproducir lo mismo que pretendas realizar con WMI.
Mi consejo: a menos que pretendas desarrollar un administrador de tareas o aplicación similar donde el rendimiento/tasa de actualización sea una prioridad máxima, entonces usa WMI y no le des más vueltas, es facil y efectivo.
Saludos.
Gracias, Funciona perfecto. gracias. Ahora me pondre con lo de Interceptar llamadas.
Public Shared Sub ProcesoPadre()
Try
Dim myId = Process.GetCurrentProcess().Id
Dim query = String.Format("SELECT ParentProcessId FROM Win32_Process WHERE ProcessId = {0}", myId)
Dim search = New ManagementObjectSearcher("root\CIMV2", query)
Dim results = search.[Get]().GetEnumerator()
results.MoveNext()
Dim queryObj = results.Current
Dim parentId = CUInt(queryObj("ParentProcessId"))
Dim parent = Process.GetProcessById(CInt(parentId))
MsgBox(parent.ProcessName)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Sabes alguna Forma de Hacer un Blucle Asyncoronico, que siempre se mantenga activo aunque oculte el Form (me.hide) ?
Actualmente estoy usando un BackgroundWorker Con un Bucle. pero no se si hay alguna otra manera de hacerlo.
Esto es lo que estoy usando actualmente :
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
For i As Integer = 0 To 2
'aca lo q quiero q haga siempre mientra la app este en ejecución.
i -= 1
Next
End Sub
Puedes usar la clase Task, por ejemplo...
Dim act As New Action(
Sub()
Do While True
Console.WriteLine("Hello World")
Thread.Sleep(1000)
Loop
End Sub)
Dim tsk As New Task(act, TaskCreationOptions.LongRunning)
tsk.Start()
Saludos.
Funciona Perfecto. ;-) ;-) .
Muchísimas gracias.