Partager via


Traiter la connexion à une station de fenêtre

Un processus établit automatiquement une connexion à une station de fenêtre et un bureau lorsqu’il appelle pour la première fois une fonction USER32 ou GDI32 (autre que la station de fenêtre et les fonctions de bureau). Le système détermine la station de fenêtre à laquelle un processus se connecte selon les règles suivantes :

  1. Si le processus a appelé la fonction SetProcessWindowStation , il se connecte à la station fenêtre spécifiée dans cet appel.
  2. Si le processus n’a pas appelé SetProcessWindowStation, il se connecte à la station de fenêtre héritée du processus parent.
  3. Si le processus n’a pas appelé SetProcessWindowStation et n’a pas hérité d’une station de fenêtre, le système tente de s’ouvrir pour un accès MAXIMUM_ALLOWED et de se connecter à une station de fenêtre comme suit :
    • Si un nom de station de fenêtre a été spécifié dans le membre lpDesktop de la structure STARTUPINFO utilisée lors de la création du processus, le processus se connecte à la station de fenêtre spécifiée.
    • Sinon, si le processus est en cours d’exécution dans la session d’ouverture de session de l’utilisateur interactif, le processus se connecte à la station de fenêtre interactive.
    • Si le processus est en cours d’exécution dans une session d’ouverture de session non interactive, le nom de la station de fenêtre est formé en fonction de l’identificateur de session d’ouverture de session et une tentative est effectuée pour ouvrir cette station de fenêtre. Si l’opération d’ouverture échoue parce que cette station de fenêtre n’existe pas, le système tente de créer la station de fenêtre et un bureau par défaut.

La station de fenêtre affectée pendant ce processus de connexion ne peut pas être fermée en appelant la fonction CloseWindowStation .

Lorsqu’un processus se connecte à une station de fenêtre, le système recherche les handles hérités dans la table de handles du processus. Le système utilise le premier handle de station de fenêtre qu’il trouve. Si vous souhaitez qu’un processus enfant se connecte à une station de fenêtre héritée particulière, vous devez vous assurer que seul le handle souhaité est marqué comme pouvant être hérité. Si un processus enfant hérite de plusieurs handles de station de fenêtre, les résultats de la connexion de la station fenêtre ne sont pas définis.

Les handles vers une station de fenêtre que le système ouvre lors de la connexion d’un processus à une station fenêtre ne sont pas hérités.

Connexion de thread à un bureau