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.
Un proceso es un programa de software que se ejecuta actualmente en Windows. Cada proceso tiene un identificador, un número que lo identifica. Un subproceso es un objeto que identifica qué parte del programa se está ejecutando. Cada subproceso tiene un identificador, un número que lo identifica.
Un proceso puede tener más de un hilo. El propósito de un subproceso es asignar tiempo de procesador. En una máquina con un procesador, se puede asignar más de un subproceso, pero solo se puede ejecutar un subproceso a la vez. Cada subproceso solo se ejecuta un breve tiempo y, a continuación, la ejecución se pasa al siguiente subproceso, lo que proporciona al usuario la ilusión de que se está produciendo más de una cosa a la vez. En una máquina con más de un procesador, la verdadera multitarea puede tener lugar. Si una aplicación tiene varios subprocesos, los subprocesos se pueden ejecutar simultáneamente en distintos 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
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 pueda 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 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 ha ampliado 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.