Функция CreateDesktopA (winuser.h)

Создает рабочий стол, связывает его с текущей станцией окна вызывающего процесса и назначает ее вызывающему потоку. Вызывающий процесс должен иметь связанную станцию окон, назначенную системой во время создания процесса или заданную функцией SetProcessWindowStation .

Чтобы указать размер кучи для рабочего стола, используйте функцию CreateDesktopEx .

Синтаксис

HDESK CreateDesktopA(
  [in]           LPCSTR                lpszDesktop,
                 LPCSTR                lpszDevice,
                 DEVMODEA              *pDevmode,
  [in]           DWORD                 dwFlags,
  [in]           ACCESS_MASK           dwDesiredAccess,
  [in, optional] LPSECURITY_ATTRIBUTES lpsa
);

Параметры

[in] lpszDesktop

Имя создаваемого рабочего стола. Имена рабочих столов не учитывают регистр и не могут содержать символы обратной косой черты (\).

lpszDevice

Защищены; должен иметь значение NULL.

pDevmode

Защищены; должен иметь значение NULL.

[in] dwFlags

Этот параметр может быть равен нулю или следующему значению.

Значение Значение
DF_ALLOWOTHERACCOUNTHOOK
0x0001
Позволяет процессам, выполняемым в других учетных записях на рабочем столе, настраивать перехватчики в этом процессе.

[in] dwDesiredAccess

Доступ к рабочему столу. Список значений см. в разделе "Безопасность компьютеров и права доступа".

Этот параметр должен включать DESKTOP_CREATEWINDOW права доступа, так как внутренне CreateDesktop использует дескриптор для создания окна.

[in, optional] lpsa

Указатель на структуру SECURITY_ATTRIBUTES , которая определяет, может ли возвращенный дескриптор наследоваться дочерними процессами. Если lpsa имеет значение NULL, дескриптор нельзя наследовать.

Член структуры lpSecurityDescriptor указывает дескриптор безопасности для нового рабочего стола. Если этот параметр имеет значение NULL, рабочий стол наследует дескриптор безопасности от родительской станции окна.

Возвращаемое значение

Если функция завершается успешно, возвращаемое значение является дескриптором для только что созданного рабочего стола. Если указанный рабочий стол уже существует, функция завершается успешно и возвращает дескриптор существующему рабочему столу. По завершении работы с дескриптором вызовите функцию CloseDesktop , чтобы закрыть ее.

Если функция завершается ошибкой, возвращаемое значение равно NULL. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Если параметр dwDesiredAccess указывает READ_CONTROL, WRITE_DAC или WRITE_OWNER стандартные права доступа, необходимо также запросить DESKTOP_READOBJECTS иDESKTOP_WRITEOBJECTS права доступа.

Количество рабочих столов, которые можно создать, ограничено размером кучи системного рабочего стола, что составляет 48 МБ. Объекты рабочего стола используют кучу для хранения ресурсов. Вы можете увеличить количество рабочих столов, которые можно создать, уменьшая количество кучи по умолчанию, зарезервированные для каждого рабочего стола в интерактивной станции окон. Это значение указывается в подстроке SharedSection следующего значения реестра: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows. Данные по умолчанию для этого значения реестра приведены ниже.

"%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"

Значения подстроки SharedSection описаны следующим образом:

  • Первое значение SharedSection — это размер общей кучи для всех рабочих столов в килобайтах.
  • Второе значение SharedSection — это размер кучи рабочего стола, необходимой для каждого рабочего стола, созданного на интерактивной станции окна WinSta0 в килобайтах.
  • Третье значение SharedSection — это размер кучи рабочего стола, необходимой для каждого рабочего стола, созданного в неинтерактивном окне станции в килобайтах.

Примечание

Заголовок winuser.h определяет CreateDesktop как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования нейтрализуемого кодировки псевдонима с кодом, который не является кодировкой нейтральным, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

   
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll
Набор API ext-ms-win-ntuser-windowstation-l1-1-0 (представлено в Windows 8)

См. также раздел

CloseDesktop

CreateDesktopEx

Настольные системы

SECURITY_ATTRIBUTES

SetProcessWindowStation

SwitchDesktop

Оконная станция и функции рабочего стола