Windows 7 如何将CreateProcess转换为ShellExecuteEx?
我使用MS detour库钩住CreateProcess,它在Win7上运行良好。然后我想用ShellExecuteEx替换迂回的CreateProcess,这样我就可以使用“runas”以管理员权限静默运行程序。不幸的是,参数类型不同 这是函数签名:Windows 7 如何将CreateProcess转换为ShellExecuteEx?,windows-7,createprocess,shellexecuteex,Windows 7,Createprocess,Shellexecuteex,我使用MS detour库钩住CreateProcess,它在Win7上运行良好。然后我想用ShellExecuteEx替换迂回的CreateProcess,这样我就可以使用“runas”以管理员权限静默运行程序。不幸的是,参数类型不同 这是函数签名: CreateProcess( LPCWSTR lpszImageName, LPCWSTR lpszCmdLine, LPSECURITY_ATTRIBUTES lpsaProcess,
CreateProcess(
LPCWSTR lpszImageName,
LPCWSTR lpszCmdLine,
LPSECURITY_ATTRIBUTES lpsaProcess,
LPSECURITY_ATTRIBUTES lpsaThread,
BOOL fInheritHandles,
DWORD fdwCreate,
LPVOID lpvEnvironment,
LPWSTR lpszCurDir,
LPSTARTUPINFOW lpsiStartInfo,
LPPROCESS_INFORMATION lppiProcInfo
);
这里我称之为ShellExecuteEx:
SHELLEXECUTEINFO ShExecInfo;
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = 0 ;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = lpszImageName; // this is obatined within deboured CreateProcess.
ShExecInfo.lpParameters = "";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
但是,此分配有错误:ShExecInfo.lpFile=lpszImageName代码>
VC2005表示数据类型不同:“无法从常量无符号字符*转换为常量字符*”
但是CreateProcess中参数lpszImageName的数据类型是LPCWSTR
,ShExecInfo.lpFile是LPCTSTR
如果使用(const unsigned char*)转换lpszImageName,则lpFile的值仅为lpszImageName值的第一个字母
例如,如果lpszImageName为“C:\windows\system32\cmd.exe”。赋值后,lpFile值仅为“C”
如何将LPCWSTR转换为LPCTSTR?或者我怎么做转换
谢谢 看起来您已经钩住了CreateProcessW()并试图将其映射到ShellExecuteExA()。相反,请映射到ShellExecuteExW()并使用使用使用宽(LPCWSTR)字符串的ShellExecuteInfo结构。您好,NuSkooler,非常感谢您宝贵的帮助!我确实忘了映射到ShellExecuteXw。