Condividi tramite


Elaborare la connessione a una stazione finestra

Un processo stabilisce automaticamente una connessione a una stazione finestra e a un desktop quando chiama per la prima volta 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 della finestra, il sistema tenta di aprire con accesso MAXIMUM_ALLOWED e connettersi a una stazione della finestra nel modo seguente:
    • Se è stato specificato un nome di stazione finestra nel lpDesktop membro della struttura STARTUPINFO utilizzata al momento della creazione del processo, il processo si connette alla stazione finestra specificata.
    • In caso contrario, se il processo è in esecuzione nella sessione di accesso dell'utente interattivo, il processo si connette alla stazione interattiva della finestra.
    • Se il processo è in esecuzione in una sessione di accesso non interattivo, il nome della stazione della finestra viene formato in base all'identificatore di sessione di accesso e viene effettuato un tentativo di aprire tale stazione finestra. Se l'operazione di apertura non riesce perché questa stazione finestra non esiste, il sistema tenta di creare la stazione della finestra e un desktop predefinito.

La stazione finestra assegnata durante questo processo di connessione non può essere chiusa chiamando la funzioneCloseWindowStation.

Quando un processo si connette a una stazione della finestra, il sistema cerca gli handle ereditati nella tabella degli handle del processo. Il sistema utilizza la prima maniglia della stazione finestra che trova. Se si desidera che un processo figlio si connetta a una particolare stazione finestra ereditata, è necessario assicurarsi che solo l'handle desiderato sia contrassegnato come ereditabile. Se un processo figlio eredita più handle di stazione finestra, i risultati della connessione della stazione finestra non sono definiti.

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

Collegamento Thread a un Desktop