Elaborazione della connessione a una stazione finestra

Un processo stabilisce automaticamente una connessione a una stazione finestra e un desktop quando chiama prima una funzione USER32 o GDI32 (diversa dalla stazione finestra e dalle funzioni desktop). Il sistema determina la stazione finestra a cui si connette un processo in base alle regole seguenti:

  1. Se il processo ha chiamato la funzione SetProcessWindowStation , si connette alla stazione finestra specificata in tale chiamata.
  2. Se il processo non ha chiamato SetProcessWindowStation, si connette alla stazione finestra ereditata dal processo padre.
  3. Se il processo non ha chiamato SetProcessWindowStation e non ha ereditato una stazione finestra, il sistema tenta di aprire per l'accesso MAXIMUM_ALLOWED e connettersi a una stazione finestra come indicato di seguito:
    • Se è stato specificato un nome della stazione finestra nel membro lpDesktop della struttura STARTUPINFO usata al momento della creazione del processo, il processo si connette alla stazione di finestra specificata.
    • In caso contrario, se il processo viene eseguito nella sessione di accesso dell'utente interattivo, il processo si connette alla stazione finestra interattiva.
    • Se il processo viene eseguito in una sessione di accesso noninterattiva, il nome della stazione finestra viene formato in base all'identificatore di sessione di accesso e viene eseguito un tentativo di aprire tale stazione finestra. Se l'operazione aperta ha esito negativo perché questa stazione finestra non esiste, il sistema tenta di creare la stazione finestra e un desktop predefinito.

Impossibile chiudere la stazione finestra assegnata durante questo processo di connessione chiamando la funzione CloseWindowStation .

Quando un processo si connette a una stazione finestra, il sistema cerca la tabella di handle del processo per handle ereditati. Il sistema usa la prima gestione della stazione finestra che trova. Se si vuole che un processo figlio si connetti a una determinata stazione finestra ereditata, è necessario assicurarsi che solo l'handle desiderato sia contrassegnato come ereditabile. Se un processo figlio eredita più handle della stazione finestra, i risultati della connessione della stazione finestra non sono definiti.

Gli handle a una stazione finestra aperta dal sistema durante la connessione di un processo a una stazione finestra non sono ereditabili.

Connessione thread a un desktop