|
Bonne utilisation de la fonction CreateProcessWithLogonW |
Iniciado por Adrien Bonnel, 04,nov. 2013 23:07 - 7 respuestas |
| |
| | | |
|
| |
Publicado el 04,noviembre 2013 - 23:07 |
Bonjour, Pour les besoins d'une application qui succédera à une série de scripts Batch qui se lancent lorsqu'un utlisateur se connecte à un poste du domaine de mon établissement, j'ai besoin d'utiliser cette fonction pour pouvoir exécuter une partie du code en tant qu'administrateur. J'ai beau utiliser la fonction API ou AppelDll32, dès lors que j'exécute le code en mode test ou compilé, l'application se plante direct ... Quelqu'un a-t-il rencontré le même type de problème ? Merci par avance. Cordialement, |
| |
| |
| | | |
|
| | |
| |
Publicado el 05,noviembre 2013 - 13:05 |
Bonjour Adrien
oui... ca s'appelle un bug... et c'est en général du à une erreur dans le code... que tu ne nous montre pas
Cordialement
-- Fabrice Harari Consultant WinDev, WebDev et WinDev Mobile International
Plus d'information sur http://fabriceharari.com
On 11/4/2013 5:07 PM, Adrien Bonnel wrote:
Bonjour, Pour les besoins d'une application qui succédera à une série de scripts Batch qui se lancent lorsqu'un utlisateur se connecte à un poste du domaine de mon établissement, j'ai besoin d'utiliser cette fonction pour pouvoir exécuter une partie du code en tant qu'administrateur. J'ai beau utiliser la fonction API ou AppelDll32, dès lors que j'exécute le code en mode test ou compilé, l'application se plante direct ... Quelqu'un a-t-il rencontré le même type de problème ? Merci par avance. Cordialement, |
| |
| |
| | | |
|
| | |
| |
Publicado el 05,noviembre 2013 - 15:14 |
Bonjour Fabrice, Boulet que je suis, d'autant que j'impose aux membres de phpBB-fr.com (dont je suis un des administrateurs) de le faire .
Voici le code que je tente pour le moment d'exécuter :
wUsername est une chaîne UNICODE = AnsiVersUnicode("winadmin") wDomain est une chaîne UNICODE = AnsiVersUnicode("lpartois.fr") wPassword est une chaîne UNICODE = AnsiVersUnicode("2szlm24aVG") wLogon est un entier = 0 wSoftware est une chaîne UNICODE = AnsiVersUnicode(ComplèteRep(fRepExe()) + ProjetInfo(piNomProjet) + ".exe")
SI AppelDLL32("advapi32.dll", "CreateProcessWithLogonW", &wUsername, &wDomain, &wPassword, wLogon, &wSoftware) = Vrai ALORS Info("c'est good !") SINON Erreur("c'est pas good :-(") FIN
FinProgramme() Et voici le dump du message d'erreur :
Erreur à la ligne 7 du traitement Initialisation de Kirby. Vous avez appelé la fonction AppelDLL32. La fonction 'CreateProcessWithLogonW' de la DLL 'advapi32.dll' a provoqué une erreur d'exécution.
----- Informations techniques -----
Projet : Kirby
Appel WL : Traitement de 'Initialisation de Kirby', ligne 7, thread 0 Fonction 'AppelDLL32', syntaxe 0
Que s'est-il passé ? La fonction 'CreateProcessWithLogonW' de la DLL 'advapi32.dll' a provoqué une erreur d'exécution.
Code erreur : 2805 Niveau : erreur fatale (EL_FATAL)
Dump de l'erreur du module 'wd180vm.dll' (18.0.150.7). Identifiant des informations détaillées (.err) : 2805 Informations de débogage :
Détails techniques :
Module : wd180vm.dll Version du module : 18.0.150.7 VI : 01F180063c Adresse de base : 25E60000 Erreur système : Access violation (GPF) EIP = 25EC20DE OS : Windows 2008 R2 Service Pack 1(6.1.7601) Registres :
EIP = 25EC20DE EBP = 0018F2E8 EAX = 00000000 EBX = 00000057 ECX = 02A00C40 EDX = 260CC6C8 ESI = FFFFFFFF EDI = 00000000
Pile des appels :
[wd180vm.dll (25E60000), 18.0.150.7, 01F180063c]25EA0CA0 : Execution() + 136254 bytes [wd180vm.dll (25E60000), 18.0.150.7, 01F180063c]25EA0CA0 : Execution() + 132840 bytes [???]009139C8 [???]0018F4D4 [wd180vm.dll (25E60000), 18.0.150.7, 01F180063c]25E825F0 : DeclareProxy() + 121264 bytes [wd180vm.dll (25E60000), 18.0.150.7, 01F180063c]25E825F0 : DeclareProxy() + 122432 bytes [wd180vm.dll (25E60000), 18.0.150.7, 01F180063c]25E825F0 : DeclareProxy() + 100304 bytes [wd180vm.dll (25E60000), 18.0.150.7, 01F180063c]26074270 : pQueryProxy() + 2638 bytes [wd180vm.dll (25E60000), 18.0.150.7, 01F180063c]25E825F0 : DeclareProxy() + 104992 bytes [wd180vm.dll (25E60000), 18.0.150.7, 01F180063c]25E825F0 : DeclareProxy() + 104768 bytes [wd180vm.dll (25E60000), 18.0.150.7, 01F180063c]25E825F0 : DeclareProxy() + 104448 bytes [wd180vm.dll (25E60000), 18.0.150.7, 01F180063c]25E825F0 : DeclareProxy() + 104768 bytes [wdtst.exe (00000000), 18.0.2.0, 01F180036f]????
Fonction (0,18) Informations supplémentaires : EIT_PILEWL : Initialisation de Kirby (), ligne 7 EIT_DATEHEURE : 05/11/2013 15:03:47
Assistance
- Vérifiez les paramètres passés - Vérifiez que le type des paramètres passés correspond bien à ceux attendus - Vérifiez que les valeurs nulles sont bien tolérées par la fonction appelée - Vérifiez les appels précédents à d'autres fonctions de cette DLL (ils ont pu la mettre dans un état instable) - Si le problème persiste, contactez le fournisseur de la DLL où se trouve la fonction. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 505 mensajes Popularité : +18 (18 votes) |
|
Publicado el 06,noviembre 2013 - 21:53 |
Bonjour Adrien,
Adrien Bonnel a écrit :
SI AppelDLL32("advapi32.dll", "CreateProcessWithLogonW", &wUsername, &wDomain, &wPassword, wLogon, &wSoftware) = Vrai ALORS
Si tu regardes sur MSDN, tu verras que cette fonction de l'API Windows a de nombreux paramètres qui ne sont pas renseignés dans ton code. Donc ça ne peut pas fonctionner.
Voici le prototype en langage C pour la fonction CreateProcessWithLogonW:
BOOL WINAPI CreateProcessWithLogonW( _In_ LPCWSTR lpUsername, _In_opt_ LPCWSTR lpDomain, _In_ LPCWSTR lpPassword, _In_ DWORD dwLogonFlags, _In_opt_ LPCWSTR lpApplicationName, _Inout_opt_ LPWSTR lpCommandLine, _In_ DWORD dwCreationFlags, _In_opt_ LPVOID lpEnvironment, _In_opt_ LPCWSTR lpCurrentDirectory, _In_ LPSTARTUPINFOW lpStartupInfo, _Out_ LPPROCESS_INFORMATION lpProcessInfo );
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682431%28v=vs.85%29.aspx
Il y a pas mal de travail pour faire fonctionner cette usine à gaz de schiste...
Bon courage !
-- Pour me contacter par courrier électronique, cliquez sur le lien ci-dessous (protection antispam): http://cerbermail.com/… |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 182 mensajes Popularité : +10 (10 votes) |
|
Publicado el 27,noviembre 2013 - 07:46 |
Bonjour, Désolé de n'avoir pu vous depuis le temps, j'ai eu pas mal de boulot au lycée. Il me semble justement que j'avais renseigné les autres paramètres nécessaires, plusieurs étant d'ailleurs optionnels. Je teste à nouveau ce soir et je te tiens au courant dans la foulée . |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 148 mensajes Popularité : +3 (3 votes) |
|
Publicado el 27,noviembre 2013 - 08:25 |
et le mot de passe en pâture sur un forum? normal? |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 182 mensajes Popularité : +10 (10 votes) |
|
Publicado el 27,noviembre 2013 - 09:13 |
Mot de passe fictif . |
| |
| |
| | | |
|
| | |
| |
Publicado el 15,enero 2019 - 15:23 |
J'ai du appeler cette API aujourd'hui, voilà mon code :
sCheminAppliALancerUnicode est une chaîne UNICODE = AnsiVersUnicode(sCheminAppliALancer) bufLogin est un Buffer = AnsiVersUnicode(sLogin) bufDomaine est un Buffer = AnsiVersUnicode(sDomaine) bufMotDePasse est un Buffer = AnsiVersUnicode(sMotDePasse) wLogon est un entier = 0 sLigneDecommandeUnicode est une chaîne UNICODE = """"+sCheminAppliALancerUnicode+""" "+AnsiVersUnicode(sLigneDecommande) nCreationFlag est un entier pi est une PROCESS_INFORMATION //Voir déclaration de la structure après ce code
nRes est un entier = API("advapi32.dll", "CreateProcessWithLogonW", ... &bufLogin,... // LPCWSTR lpUsername, &bufDomaine,... // LPCWSTR lpDomain, &bufMotDePasse,... // LPCWSTR lpPassword, wLogon,... // DWORD dwLogonFlags, Null,... // LPCWSTR lpApplicationName, sLigneDecommandeUnicode,... // LPWSTR lpCommandLine, nCreationFlag,... // DWORD dwCreationFlags, Null,... // LPVOID lpEnvironment, Null,... // LPCWSTR lpCurrentDirectory, Null,... // LPSTARTUPINFOW lpStartupInfo, &pi) // LPPROCESS_INFORMATION lpProcessInformation //L'API renvoie Faux SI nRes = 0 ALORS sErreur = "Erreur lors de l'appel à l'API : "+ErreurInfo() SINON nPID est un entier = pi.dwProcessId // Suite du code ... FIN
---- Déclaration de la structure
PROCESS_INFORMATION est une Structure hProcess est un entier hThread est un entier dwProcessId est un entier sans signe sur 4 octets dwThreadId est un entier sans signe sur 4 octets FIN |
| |
| |
| | | |
|
| | | | |
| | |
|