Compartir a través de


Función CreateDesktopExA (winuser.h)

Crea un nuevo escritorio con el montón especificado, lo asocia a la estación de ventana actual del proceso de llamada y lo asigna al subproceso que realiza la llamada. El proceso de llamada debe tener una estación de ventana asociada, ya sea asignada por el sistema en tiempo de creación del proceso o establecida por la función SetProcessWindowStation.

Sintaxis

HDESK CreateDesktopExA(
  [in]           LPCSTR                lpszDesktop,
                 LPCSTR                lpszDevice,
                 DEVMODEA              *pDevmode,
  [in]           DWORD                 dwFlags,
  [in]           ACCESS_MASK           dwDesiredAccess,
  [in, optional] LPSECURITY_ATTRIBUTES lpsa,
  [in]           ULONG                 ulHeapSize,
                 PVOID                 pvoid
);

Parámetros

[in] lpszDesktop

Nombre del escritorio que se va a crear. Los nombres de escritorio no distinguen mayúsculas de minúsculas y pueden no contener caracteres de barra diagonal inversa (\).

lpszDevice

Este parámetro está reservado y debe ser NULL.

pDevmode

Este parámetro está reservado y debe ser NULL.

[in] dwFlags

Este parámetro puede ser cero o el siguiente valor.

Valor Significado
DF_ALLOWOTHERACCOUNTHOOK
0x0001
Permite que los procesos que se ejecutan en otras cuentas del escritorio establezcan enlaces en este proceso.

[in] dwDesiredAccess

Acceso solicitado al escritorio. Para obtener una lista de valores, consulte Derechos de acceso y seguridad de escritorio.

Este parámetro debe incluir el derecho de acceso DESKTOP_CREATEWINDOW, ya que CreateDesktop usa el identificador para crear una ventana.

[in, optional] lpsa

Puntero a una estructura de SECURITY_ATTRIBUTES que determina si los procesos secundarios pueden heredar el identificador devuelto. Si lpsa es NULL, no se puede heredar el identificador.

El lpSecurityDescriptor miembro de la estructura especifica un descriptor de seguridad para el nuevo escritorio. Si este parámetro es NULL, el escritorio hereda su descriptor de seguridad de la estación de ventana principal.

[in] ulHeapSize

Tamaño del montón de escritorio, en kilobytes.

pvoid

Este parámetro está reservado y debe ser NULL.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es un identificador para el escritorio recién creado. Si el escritorio especificado ya existe, la función se realiza correctamente y devuelve un identificador al escritorio existente. Cuando haya terminado de usar el identificador, llame a la función CloseDesktop para cerrarlo.

Si se produce un error en la función, el valor devuelto es NULL. Para obtener información de error extendida, llame a GetLastError.

Observaciones

Si el parámetro dwDesiredAccess especifica los derechos de acceso estándar READ_CONTROL, WRITE_DAC o WRITE_OWNER, también debe solicitar los derechos de acceso DESKTOP_READOBJECTS y DESKTOP_WRITEOBJECTS.

El número de escritorios que se pueden crear está limitado por el tamaño del montón de escritorio del sistema. Los objetos de escritorio usan el montón para almacenar recursos. Puede aumentar el número de escritorios que se pueden crear aumentando el tamaño del montón de escritorio o reduciendo el montón predeterminado reservado para cada escritorio de la estación de ventana interactiva. Este valor se especifica en la subcadena SharedSection del siguiente valor del Registro: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows. Los datos predeterminados de este valor del Registro son los siguientes:

%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

Los valores de la subcadena SharedSection se describen de la manera siguiente:

  • El primer valor sharedSection es el tamaño del montón compartido común a todos los escritorios, en kilobytes.
  • El segundo valor sharedSection es el tamaño del montón de escritorio necesario para cada escritorio que se crea en la estación de ventana interactiva, WinSta0, en kilobytes.
  • El tercer valor sharedSection es el tamaño del montón de escritorio necesario para cada escritorio que se crea en una estación de ventana no interactiva, en kilobytes.

El tamaño predeterminado del montón de escritorio depende de factores como la arquitectura de hardware. Para recuperar el tamaño del montón de escritorio, llame a la función GetUserObjectInformation con UOI_HEAPSIZE.

Nota

El encabezado winuser.h define CreateDesktopEx como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Conventions for Function Prototypes.

Requisitos

Requisito Valor
cliente mínimo admitido Windows Vista [solo aplicaciones de escritorio]
servidor mínimo admitido Windows Server 2008 [solo aplicaciones de escritorio]
de la plataforma de destino de Windows
encabezado de winuser.h (incluya Windows.h)
biblioteca de User32.lib
DLL de User32.dll

Consulte también

CloseDesktop

de escritorios de

SECURITY_ATTRIBUTES

SetProcessWindowStation

SwitchDesktop

funciones de escritorio y estación de ventanas