Funzione CreateDesktopW (winuser.h)
Crea un nuovo desktop, lo associa alla stazione finestra corrente del processo chiamante e la assegna al thread chiamante. Il processo chiamante deve avere una stazione finestra associata, assegnata dal sistema in fase di creazione del processo o impostata dalla funzione SetProcessWindowStation .
Per specificare le dimensioni dell'heap per il desktop, usare la funzione CreateDesktopEx .
Sintassi
HDESK CreateDesktopW(
[in] LPCWSTR lpszDesktop,
LPCWSTR lpszDevice,
DEVMODEW *pDevmode,
[in] DWORD dwFlags,
[in] ACCESS_MASK dwDesiredAccess,
[in, optional] LPSECURITY_ATTRIBUTES lpsa
);
Parametri
[in] lpszDesktop
Nome del desktop da creare. I nomi dei desktop non fanno distinzione tra maiuscole e minuscole e potrebbero non contenere caratteri barra rovesciata (\).
lpszDevice
Riservati; deve essere NULL.
pDevmode
Riservati; deve essere NULL.
[in] dwFlags
Questo parametro può essere zero o il valore seguente.
Valore | Significato |
---|---|
|
Consente ai processi in esecuzione in altri account sul desktop di impostare hook in questo processo. |
[in] dwDesiredAccess
Accesso al desktop. Per un elenco dei valori, vedere Desktop Security and Access Rights.For a list of values, see Desktop Security and Access Rights.
Questo parametro deve includere il diritto di accesso DESKTOP_CREATEWINDOW , perché internamente CreateDesktop usa l'handle per creare una finestra.
[in, optional] lpsa
Puntatore a una struttura SECURITY_ATTRIBUTES che determina se l'handle restituito può essere ereditato dai processi figlio. Se lpsa è NULL, l'handle non può essere ereditato.
Il membro lpSecurityDescriptor della struttura specifica un descrittore di sicurezza per il nuovo desktop. Se questo parametro è NULL, il desktop eredita il descrittore di sicurezza dalla stazione finestra padre.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è un handle per il desktop appena creato. Se il desktop specificato esiste già, la funzione ha esito positivo e restituisce un handle al desktop esistente. Al termine dell'uso dell'handle, chiamare la funzione CloseDesktop per chiuderla.
Se la funzione ha esito negativo, il valore restituito è NULL. Per informazioni dettagliate sull'errore, chiamare GetLastError.
Commenti
Se il parametro dwDesiredAccess specifica il READ_CONTROL, WRITE_DAC o WRITE_OWNER diritti di accesso standard, è necessario richiedere anche i diritti di accesso DESKTOP_READOBJECTS e DESKTOP_WRITEOBJECTS .
Il numero di desktop che è possibile creare è limitato dalle dimensioni dell'heap del desktop di sistema, ovvero 48 MB. Gli oggetti desktop usano l'heap per archiviare le risorse. È possibile aumentare il numero di desktop che è possibile creare riducendo l'heap predefinito riservato per ogni desktop nella stazione finestra interattiva. Questo valore viene specificato nella sottostringa "SharedSection" del valore del Registro di sistema seguente: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows. I dati predefiniti per questo valore del Registro di sistema sono i seguenti:
"%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16"
I valori per la sottostringa "SharedSection" sono descritti come segue:
- Il primo valore "SharedSection" è la dimensione dell'heap condiviso comune a tutti i desktop, in kilobyte.
- Il secondo valore "SharedSection" è la dimensione dell'heap desktop necessaria per ogni desktop creato nella stazione interattiva della finestra, WinSta0, in kilobyte.
- Il terzo valore "SharedSection" è la dimensione dell'heap desktop necessario per ogni desktop creato in una stazione finestra non interattiva, in kilobyte.
Nota
L'intestazione winuser.h definisce CreateDesktop come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice che non è indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzioni.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | winuser.h (include Windows.h) |
Libreria | User32.lib |
DLL | User32.dll |
Set di API | ext-ms-win-ntuser-windowstation-l1-1-0 (introdotto in Windows 8) |