Buaaaa 
'Arreglado' ya no peta:
Bueno ahora no da error ni nada, pero claro, no hace lo que quiero, no me espera
Entonces he pensado en detectar el nivel de IRQL en el que corre el threat y entonces si es APC_LEVEL esperar y si es otro retornar la función original sin esperar.
Esto lo hago con:
if(KeGetCurrentIrql() == DISPATCH_LEVEL);
return OldIrpMjDeviceControl(DeviceObject, Irp);
Sorpresa, esto me dice que SIEMPRE esta en DISPATCH_LEVEL, así que mi filtro no hace nada. No lo entiendo
Si no petaba siempre, solo cuelgues aleatorios, suponía que de vez en cuando entraba un threat en DISPATCH_LEVEL y petaba, pero ahora resulta que siempre esta en DISPATCH_LEVEL, entonces como es que esperaba aveces si y aveces BSOD?
Alguna solución o luz sobre el asunto?
Saludos y gracias
----Edit-----
A lo mejor es que así obtengo el IRQL del driver y debería sacar el IRQL del DeviceObject o Irp que me entran por parámetros?

'Arreglado' ya no peta:
Código [Seleccionar]
LARGE_INTEGER tiempo;
tiempo.QuadPart= 0x0;
KeWaitForSingleObject(syncEventK,Executive,KernelMode, FALSE, &tiempo);
Bueno ahora no da error ni nada, pero claro, no hace lo que quiero, no me espera

Entonces he pensado en detectar el nivel de IRQL en el que corre el threat y entonces si es APC_LEVEL esperar y si es otro retornar la función original sin esperar.
Esto lo hago con:
if(KeGetCurrentIrql() == DISPATCH_LEVEL);
return OldIrpMjDeviceControl(DeviceObject, Irp);
Sorpresa, esto me dice que SIEMPRE esta en DISPATCH_LEVEL, así que mi filtro no hace nada. No lo entiendo

Alguna solución o luz sobre el asunto?

Saludos y gracias

----Edit-----
A lo mejor es que así obtengo el IRQL del driver y debería sacar el IRQL del DeviceObject o Irp que me entran por parámetros?
