我使用 MS detour 库来挂钩 CreateProcess,它在 Win7 上运行良好。然后我想用 ShellExecuteEx 替换绕行的 CreateProcess,以便我可以使用“runas”以管理员权限静默运行程序。不幸的是,参数类型不一样。
这是函数签名:
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 投诉数据类型不一样:"cannot convert from const unsigned char * to const char *"
。
但是数据类型是LPCWSTR
CreateProcess 中的参数 lpszImageName 和 ShExecInfo.lpFile 是LPCTSTR
.
如果我使用 (const unsigned char*) 转换 lpszImageName,lpFile 的值只是 lpszImageName 值的第一个字母。
例如,如果 lpszImageName 是“C:\windows\system32\cmd.exe”。赋值后,lpFile 的值只有 'C'。
如何从 LPCWSTR 转换为 LPCTSTR?或者我该如何进行转换?
谢谢!!!