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”值是在非交互窗口工作站(以 KB 为单位)中创建的每个桌面所需的桌面堆的大小。

注意

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

要求

要求 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 窗户
标头 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

窗口工作站和桌面函数