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/):
( 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:
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.