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”值是在非交互窗口工作站(以 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 中引入) |