Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El proceso y el administrador de subprocesos del modo kernel de Windows proporcionados por el sistema controla cómo se ejecutan los procesos y subprocesos en el sistema operativo Windows. Comprender este administrador es esencial para los desarrolladores de controladores en modo kernel que necesitan crear subprocesos, supervisar la creación de procesos o sincronizar el acceso a los recursos compartidos.
En el ejemplo del controlador ObCallback se muestra cómo usar rutinas de notificación de procesos y subprocesos en un controlador en modo kernel.
Información general sobre procesos y subprocesos
Un proceso es un programa de software que se ejecuta actualmente en Windows y que se identifica mediante un identificador de proceso único (PID). Dentro de cada proceso, uno o varios subprocesos representan las unidades reales de ejecución que ejecutan el código del programa. Cada subproceso también tiene un identificador de subproceso único (TID) dentro de su proceso.
Los subprocesos permiten la multitarea compartiendo el tiempo del procesador. En una máquina de un solo procesador, se pueden asignar varios subprocesos, pero solo se ejecuta uno a la vez. El procesador cambia rápidamente entre subprocesos, lo que crea la ilusión de ejecución simultánea. En los sistemas de varios procesadores, la ejecución en paralelo verdadera se produce cuando los subprocesos se ejecutan simultáneamente en diferentes procesadores.
El proceso en modo kernel de Windows y el administrador de subprocesos controla la ejecución de todos los subprocesos de un proceso. Ya sea que tenga un procesador o más, debe tener mucho cuidado en la programación de controladores para asegurarse de que todos los subprocesos del proceso están diseñados para que, independientemente del orden en que se controlen los subprocesos, el controlador funciona correctamente.
Si los subprocesos de diferentes procesos intentan usar el mismo recurso al mismo tiempo, pueden producirse problemas. Windows proporciona varias técnicas para evitar este problema. La técnica de garantizar que los hilos de distintos procesos no acceden al mismo recurso se denomina sincronización. Para obtener más información sobre la sincronización, consulte Técnicas de sincronización.
Las rutinas que proporcionan una interfaz directa al proceso y al administrador de subprocesos suelen tener el prefijo "Ps"; por ejemplo, PsCreateSystemThread. Para obtener una lista de los DDIs de kernel, consulte Kernel de Windows.
Procedimientos recomendados para implementar funciones de devolución de llamada relacionadas con procesos y subprocesos
Este conjunto de directrices se aplica a estas rutinas de devolución de llamada:
- PCREATE_PROCESS_NOTIFY_ROUTINE
- PCREATE_PROCESS_NOTIFY_ROUTINE_EX
- PCREATE_THREAD_NOTIFY_ROUTINE
- PLOAD_IMAGE_NOTIFY_ROUTINE
- POB_PRE_OPERATION_CALLBACK
- POB_POST_OPERATION_CALLBACK
Use estos procedimientos recomendados:
- Mantenga las rutinas cortas y sencillas.
- No realice llamadas a un servicio en modo de usuario para validar el proceso, el subproceso o la imagen.
- No realice llamadas al Registro.
- No realice llamadas de función de bloqueo ni de comunicación entre procesos (IPC).
- No sincronice con otros subprocesos porque puede provocar interbloqueos de reentrada.
- Use subprocesos de trabajo del sistema para poner en cola trabajos especialmente relacionados con:
- APIs lentas o APIs que realizan llamadas a otros procesos.
- Cualquier comportamiento de bloqueo que pudiera interrumpir los subprocesos en los servicios principales.
- Si usa subprocesos de trabajo del sistema, no espere a que se complete el trabajo. Al hacerlo, se anula el propósito de enlistar el trabajo que se va a completar de forma asincrónica.
- Tenga en cuenta los procedimientos recomendados para el uso de la pila del modo kernel. Para obtener ejemplos, consulte ¿Cómo puedo evitar que mi controlador se quede sin pila en modo núcleo? y Conceptos clave y sugerencias sobre controladores.
Procesos del subsistema
A partir de Windows 10, el Subsistema de Windows para Linux (WSL) permite a un usuario ejecutar archivos binarios nativos de Linux ELF64 en Windows, junto con otras aplicaciones de Windows. Para obtener información sobre la arquitectura de WSL y los componentes en modo de usuario y en modo kernel necesarios para ejecutar los archivos binarios, consulte las entradas en el blog del Subsistema de Windows para Linux .
Uno de los componentes es un proceso de subsistema que hospeda el binario linux en modo de usuario sin modificar, como /bin/bash. Los procesos de subsistema no contienen estructuras de datos asociadas a procesos Win32, como Bloque de entorno de proceso (PEB) y Bloque de entorno de subprocesos (TEB). En el caso de un proceso de subsistema, las llamadas del sistema y las excepciones en modo de usuario se envían a un controlador emparejado.
Estos son los cambios realizados en las rutinas del administrador de procesos y subprocesos para admitir procesos de subsistema:
El tipo WSL se indica mediante el valor SubsystemInformationTypeWSL de la enumeración SUBSYSTEM_INFORMATION_TYPE . Los controladores pueden llamar a NtQueryInformationProcess y NtQueryInformationThread para determinar el subsistema subyacente. Esas llamadas devuelven la SubsystemInformationTypeWSL para WSL.
Otros controladores de modo kernel pueden recibir notificaciones sobre la creación/eliminación de procesos del subsistema registrando su función de devolución de llamada a través de la llamada PsSetCreateProcessNotifyRoutineEx2. Para obtener notificaciones sobre la creación o eliminación de subprocesos, los controladores pueden llamar a PsSetCreateThreadNotifyRoutineEx y especificar PsCreateThreadNotifySubsystems como el tipo de notificación.
La estructura PS_CREATE_NOTIFY_INFO se extendió para incluir un miembro IsSubsystemProcess que indica un subsistema distinto de Win32. Otros miembros, como FileObject, ImageFileName, CommandLine indican información adicional sobre el proceso del subsistema. Para obtener información sobre el comportamiento de esos miembros, consulte SUBSYSTEM_INFORMATION_TYPE.