SHCREATEPROCESSINFOW 结构 (shellapi.h)

[SHCreateProcessAsUserW 不再在 Windows XP 或更高版本中实现。]

包含 SHCreateProcessAsUserW 创建进程所需的信息。

语法

typedef struct _SHCREATEPROCESSINFOW {
  DWORD                 cbSize;
  ULONG                 fMask;
  HWND                  hwnd;
  LPCWSTR               pszFile;
  LPCWSTR               pszParameters;
  LPCWSTR               pszCurrentDirectory;
  HANDLE                hUserToken;
  LPSECURITY_ATTRIBUTES lpProcessAttributes;
  LPSECURITY_ATTRIBUTES lpThreadAttributes;
  BOOL                  bInheritHandles;
  DWORD                 dwCreationFlags;
  LPSTARTUPINFOW        lpStartupInfo;
  LPPROCESS_INFORMATION lpProcessInformation;
} SHCREATEPROCESSINFOW, *PSHCREATEPROCESSINFOW;

成员

cbSize

类型:DWORD

此结构的大小(以字节为单位)。

fMask

类型: ULONG

标志数组,指示其他结构成员的内容和有效性。 这可以是以下值的组合。

SEE_MASK_CLASSKEY

使用文件的类注册表项。

SEE_MASK_CLASSNAME

使用文件的类名。

SEE_MASK_CONNECTNETDRV

验证共享并连接到驱动器号。 pszFile 成员是网络上文件的 UNC 路径。

SEE_MASK_DOENVSUBST

展开任何环境变量。

SEE_MASK_FLAG_DDEWAIT

等待 DDE 会话终止,然后再返回。

SEE_MASK_FLAG_NO_UI

如果发生错误,则不显示错误消息框。

SEE_MASK_HMONITOR

在多监视器系统上指定监视器时使用此标志。

SEE_MASK_NOCLOSEPROCESS

应用程序将关闭该过程。 如果 lpProcessInformation 成员是有效的 PROCESS_INFORMATION 指针,并且 设置了SEE_MASK_NOCLOSEPROCESS ,则 当 SHCreateProcessAsUserW 返回时,进程将保持打开状态。 PROCESS_INFORMATION 结构的 hProcesshThread 成员分别持有进程和线程句柄。 此标志通常设置为允许应用程序了解使用 SHCreateProcessAsUserW 创建的进程何时终止。 在某些情况下,例如通过 DDE 会话满足执行要求时,不会返回任何句柄。 调用应用程序负责在不再需要句柄时将其关闭。 如果未设置此标志,则即使 lpProcessInformation 是有效的指针,进程也会在 SHCreateProcessAsUserW 返回之前关闭。

SEE_MASK_NO_CONSOLE

为新进程创建控制台,而不是让其继承父进程的控制台。 它等效于将 CREATE_NEW_CONSOLE 标志与 CreateProcess 配合使用。

SEE_MASK_UNICODE

指示 Unicode 应用程序。

hwnd

类型:HWND

父窗口句柄。

pszFile

类型: LPCWSTR

指向以 null 结尾的 Unicode 字符串的指针,该字符串指定 SHCreateProcessAsUserW 将对其执行 runas 谓词指定的操作的可执行文件。 文件的 类必须支持 runas 谓词。

注意 如果路径未包含在文件名中,则假定为当前目录。
 

pszParameters

类型: LPCWSTR

指向包含应用程序参数的以 null 结尾的 Unicode 字符串的指针。 参数必须用空格分隔。

pszCurrentDirectory

类型: LPCWSTR

包含当前目录的以 null 结尾的 Unicode 字符串。

hUserToken

类型: 句柄

可用于表示特定用户的 访问令牌 。 当这些文件夹有多个用户被视为属于单个用户时,需要此权限。 调用应用程序必须具有特定用户的相应安全权限,包括TOKEN_QUERY和TOKEN_IMPERSONATE,并且用户的注册表配置单元当前必须装载。 有关访问控制问题的进一步讨论,请参阅 访问控制

lpProcessAttributes

类型: LPSECURITY_ATTRIBUTES

指向 SECURITY_ATTRIBUTES 结构的指针,其中包含新进程的安全描述符。 它还指定是否可以继承子进程。 如果此参数设置为 NULL,则进程将具有默认的安全描述符,并且无法继承句柄。

安全警告: 错误地使用安全描述符可能会危及应用程序的安全性。 有关详细信息,请参阅 SECURITY_ATTRIBUTES

lpThreadAttributes

类型: LPSECURITY_ATTRIBUTES

指向 SECURITY_ATTRIBUTES 结构的指针,其中包含新线程的安全描述符。 它还指定是否可以继承子进程。 如果此参数设置为 NULL,则进程将具有默认的安全描述符,并且无法继承句柄。

安全警告: 错误地使用安全描述符可能会危及应用程序的安全性。 有关详细信息,请参阅 SECURITY_ATTRIBUTES

bInheritHandles

类型: BOOL

指示新进程是否从调用进程继承句柄。 如果设置为 TRUE,则调用进程中每个可继承的打开句柄都由新进程继承。 继承的句柄与原始句柄具有相同的值和访问特权。

dwCreationFlags

类型:DWORD

控制创建进程和优先级类的标志。 有关可用标志的列表,请参阅 CreateProcessAsUser

lpStartupInfo

类型: LPSTARTUPINFOW

指向 STARTUPINFO 结构的指针,该结构指定新进程的main窗口应如何显示。

lpProcessInformation

类型: LPPROCESS_INFORMATION

指向 PROCESS_INFORMATION 结构的指针,该结构接收有关新进程的信息。 将此成员设置为有效的结构指针,并在 fMask 成员中设置SEE_MASK_NOCLOSEPROCESS标志,当函数返回时,进程将保持打开状态。 然后 ,PROCESS_INFORMATION 结构的 hProcesshThread 成员将分别持有进程和线程句柄。 将此成员设置为 NULL,进程将在函数返回之前关闭。

注解

若要在 pszParameters 中包含双引号,必须将每个标记括在一对引号中,如以下示例所示:

sei.lpParameters = "An example: \"\"\"quoted text\"\"\"";

在本例中,应用程序接收三个参数:An、example:和“带引号的文本”。

要求

要求
最低受支持的客户端 Windows 2000 专业版、Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 shellapi.h

另请参阅

SHELLEXECUTEINFO