J'utilise MS detour library pour accrocher CreateProcess et ça marche bien sur Win7. Ensuite, je veux remplacer le CreateProcess détourné par ShellExecuteEx afin que je puisse utiliser des 'runas' pour exécuter silencieusement le programme avec le privilège d'administrateur. Malheureusement, le type de paramètre n'est pas le même.Comment faire pour convertir CreateProcess à ShellExecuteEx?
C'est la signature de la fonction:
CreateProcess(
LPCWSTR lpszImageName,
LPCWSTR lpszCmdLine,
LPSECURITY_ATTRIBUTES lpsaProcess,
LPSECURITY_ATTRIBUTES lpsaThread,
BOOL fInheritHandles,
DWORD fdwCreate,
LPVOID lpvEnvironment,
LPWSTR lpszCurDir,
LPSTARTUPINFOW lpsiStartInfo,
LPPROCESS_INFORMATION lppiProcInfo
);
Ici, j'appeler 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);
Cependant, cette mission a erreur: ShExecInfo.lpFile = lpszImageName;
plaintes VC2005 le type de données ne sont pas les mêmes: "cannot convert from const unsigned char * to const char *"
.
Mais le type de données est LPCWSTR
pour le paramètre lpszImageName dans CreateProcess et ShExecInfo.lpFile est LPCTSTR
.
Si j'utilise (const unsigned char *) pour convertir lpszImageName, la valeur de lpFile est uniquement la première lettre de la valeur lpszImageName.
Par exemple, si lpszImageName est "C: \ windows \ system32 \ cmd.exe". Après l'affectation, la valeur de lpFile est seulement 'C'.
Comment puis-je convertir LPCWSTR à LPCTSTR? Ou comment pourrais-je faire la conversion?
Merci !!!
Salut NuSkooler, merci beaucoup pour votre aide valueable! J'ai oublié de mapper à ShellExecuteExW. –