Envoyé par
Neitsa
Bonjour,
Oui c'est exact.
Oui mais uniquement pour un thread créé en user-land.
Non ! Les threads créés depuis l'espace kernel ne peuvent avoir de TEB (PTEB = NULL).
Il est extrêmement compliqué de créer un thread kernel (plus exactement : un thread créé depuis le kernel par un driver) qui va tourner dans le contexte du processus et avoir accès aux données du processus. Ne pas oublier que pour un thread, tout est une histoire de "contexte". Extrêmement compliqué pour la simple et bonne raison qu'il y a trop de chose à faire au niveau user land (allocation de la page du TEB, init du TEB, allocation de la pile du thread user-land, protection de la page de pile, initialisation du contexte (CONTEXT) du thread, etc.).
Les worker threads kernel sont fait pour rester cantonnés au kernel et tourner dans le contexte "system" pas dans le contexte d'un processus.
[edit]
Tiens j'y pense, il existe bien une fonction qui fait tout cela (init d'un thread user-land depuis le kernel), mais... elle n'est pas exportée par le kernel : il s'agit de RtlCreateUserThread(). A voir pour ceux que ça pourrait intéresser.
Partager