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
此参数可以是零或以下值。
值 | 含义 |
---|---|
|
允许在桌面上的其他帐户中运行的进程在此进程中设置挂钩。 |
[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 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 ( |