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_CONTROLWRITE_DACWRITE_OWNER 标准访问权限,则还必须请求 DESKTOP_READOBJECTSDESKTOP_WRITEOBJECTS 访问权限。

可以创建的桌面数受系统桌面堆的大小限制,即 48 MB。 桌面对象使用堆来存储资源。 可以通过减少交互式窗口工作站中为每个桌面保留的默认堆来增加可创建的桌面数。 此值在以下注册表值的“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”值是所有桌面共有的共享堆的大小(以 KB 为单位)。
  • 第二个“SharedSection”值是在交互式窗口站 WinSta0 中创建的每个桌面所需的桌面堆大小(以 KB 为单位)。
  • 第三个“SharedSection”值是在非交互窗口站中创建的每个桌面所需的桌面堆大小(以千字节为单位)。

注意

winuser.h 标头将 CreateDesktop 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 winuser.h (包括 Windows.h)
Library User32.lib
DLL User32.dll
API 集 在 Windows 8) 中引入 ext-ms-win-ntuser-windowstation-l1-1-0 (

另请参阅

CloseDesktop

CreateDesktopEx

台式机

SECURITY_ATTRIBUTES

SetProcessWindowStation

SwitchDesktop

窗口工作站和桌面函数