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 会话满足执行时,不会返回句柄。 调用应用程序负责在不再需要句柄时关闭句柄。 如果未设置此标志,则会在 SHCreateProcessAsUserW 返回之前关闭进程,即使 lpProcessInformation 是有效的指针也是如此。

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

类型:HANDLE

访问令牌,可用于表示特定用户。 对于被视为属于单个用户的文件夹,需要存在多个用户。 调用应用程序必须具有特定用户的适当安全权限,包括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 结构的指针,该结构指定新进程的主窗口应如何显示。

lpProcessInformation

类型:LPPROCESS_INFORMATION

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

言论

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

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

在这种情况下,应用程序会收到三个参数:An、example:和“quoted text”

要求

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

另请参阅

SHELLEXECUTEINFO