1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
// Laisser les L devant les chaînes de caractères, ils permettent de les
// caster directement en LPCWSTR
// Pour info : après plusieurs tentatives, ni le login ni le password ne sont
// lisibles en clair dans l'EXE après la compilation.
// Pour plus d'info sur la méthode CreateProcessWithLogonW, consulter la doc
// consultable sur MSDN.
LPCWSTR lpUsername = L"fverneau"; // saisir le login du user
LPCWSTR lpDomain = L"GT75"; // définir le domaine du user, "." pour l'ordinateur local
LPCWSTR lpPassword = L"c+jsp@gt89-"; // saisir le mot de passe du user
LPCWSTR lpApplicationName = L"\\\\parns006\\gestparc$\\Client.exe"; // Chemin et application à exécuter
WCHAR szCommandLine[] = {L""}; // paramètres à passer en ligne de commande
DWORD dwCreationFlags = NULL;
LPVOID lpEnvironment = NULL;
LPCWSTR lpCurrentDirectory = NULL; // Possibilité d'indiquer un répertoire d'exécution (par défaut le même répertoire que le répertoire de l'application a exécuter)
STARTUPINFOW lpStartupInfo;
PROCESS_INFORMATION lpProcessInfo;
memset(&lpStartupInfo, 0, sizeof(lpStartupInfo)); // réservation de la mémoire pour StartupInfo
memset(&lpProcessInfo, 0, sizeof(lpProcessInfo)); // réservation de la mémoire pour ProcessInfo
lpStartupInfo.cb = sizeof(lpStartupInfo);
if(!CreateProcessWithLogonW( // la méthode, enfin ...
lpUsername,
lpDomain,
lpPassword,
LOGON_WITH_PROFILE,
lpApplicationName,
szCommandLine,
dwCreationFlags,
lpEnvironment,
lpCurrentDirectory,
&lpStartupInfo,
&lpProcessInfo))
{ // En cas d'erreur un message est affiché contenant la cause exacte de l'erreur.
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0,
NULL);
MessageBox(NULL, (LPCTSTR)lpMsgBuf, NULL, MB_OK | MB_ICONEXCLAMATION);
LocalFree(lpMsgBuf); // Libération du pointeur du message d'erreur
}
CloseHandle(lpProcessInfo.hProcess); // libération de Process créé par CreateProcessWithLogonW
CloseHandle(lpProcessInfo.hThread); // libération du thread principal créé par CreateProcessWithLogonW |
Partager