cs_couf
Messages postés213Date d'inscriptiondimanche 5 janvier 2003StatutMembreDernière intervention 6 janvier 20111 6 janv. 2011 à 12:41
Bon binnnnnnnnn ça marche pas chez moi non plus pourtant cela m'aurait été for utile, j'ai quand même 2 warning à la compilation sur des variables non trouvés
Dommage dites moi si vous avez du mieux....
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 28 juil. 2008 à 13:24
Je viens de chercher sur Google des infos concernant CreateProcessWithLogon et win2k et en résumé j'ai pu lire plusieurs fois:
"it works on a w2k workstation, but doesnt work on a win2k server"
On peut apparemment arriver à faire fonctionne LogonUser (chez toi ça ne passe même pas ce stade) en changeant les stratégies locales de sécurité dans le panneau de configuration, mais CreateProcessWithLogonW ne fonctionne pas pour autant. J'ai aussi lu que quelqu'un aurait peut-être réussi en créant un service à la place.
A++, Forman
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 28 juil. 2008 à 13:18
Là je crois que tu as à peu près tout essayé... effectivement la conclusion ça doit être que ça ne marche pas sous win2k :-(
A++, Forman
cs_pascal99
Messages postés24Date d'inscriptionmercredi 10 septembre 2003StatutMembreDernière intervention20 janvier 2009 28 juil. 2008 à 13:10
Le win2K est sur mon PC au boulot. Nous sommes sur le domaine EU (Europe)
- Si je ne mets pas le nom de domaine : meme message.
- Si je ne mets pas de domaine mais qu'en utilisateur de mets domaine/utilisateur, domaine\utilisateur ou utilisateur@domaine : meme message.
- Si je prends un profil administrateur local (sur mon PC) que ce soit avec en domaine le nom de mon PC ou sans domaine : meme message.
Je ne sais plus quoi tester. Si tu as une idée...
a+ Pascal
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 28 juil. 2008 à 12:48
Bonjour Pascal99,
Pour le 1) il semblerait donc que depuis le début ce soit un bug du compilateur! Dans ce cas-là, un truc tout bête: essaie de désactiver les optimisations dans les options su projet. Parfois j'ai eu de grosses surprises comme ça. Pour info j'utilise Delphi 7.
Pour le 2) j'ai vu que tu spécifiais explicitement le nom de domaine. Que se passe-t-il si tu ne le mets pas? Il faut prendre garde aussi que les mots de passe doivent être case-sensitive.
A bientôt
Forman
cs_pascal99
Messages postés24Date d'inscriptionmercredi 10 septembre 2003StatutMembreDernière intervention20 janvier 2009 28 juil. 2008 à 09:49
Bonjour Forman,
1) j'ai essayé avec ton .exe sous Win2K et il n'y a plus le plantage.
Tu as compilé ton prog avec quelle version ? (moi c'etait avec Delphi Pro 5).
2) Maintenant, quelque soit le profil que j'utilise, le message d'erreur est :
Error: Could not log user in
Le client ne dispose pas d'un privilÞge nÚcessaire.
Win2K n'a pas l'air d'aimer to prog.
a+
Pascal99
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 24 juil. 2008 à 19:39
Bon week-end toi aussi, et merci pour ton aide.
Forman
cs_pascal99
Messages postés24Date d'inscriptionmercredi 10 septembre 2003StatutMembreDernière intervention20 janvier 2009 24 juil. 2008 à 18:55
la je suis sur une machine en Vista SP1 et ca fonctionne nickel avec le prog actuellement dans le zip.
Pour le Win2K, je ne pourrais retester que lundi.
En attendant, bon week-end.
Pascal99
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 24 juil. 2008 à 16:41
C'est vraiment incompréhensible. Peut-être un bug du compilateur pour le code qui s'occupe du passage des paramètres à la fonction?
Essaie peut-être de passer les paramètres à la fonction RunProcessAs en tant que 'var' ou 'const' (surtout le array of string). Ou même de changer la convention d'appel (stdcall).
Et avec l'exe compilé que j'ai mis dans le zip, ça plante aussi?
cs_pascal99
Messages postés24Date d'inscriptionmercredi 10 septembre 2003StatutMembreDernière intervention20 janvier 2009 24 juil. 2008 à 16:21
Exactement la meme erreur que ce soit avec la 1ere piste, la 2eme ou les 2 en meme temps.
Je doit t'avouer que je n'y comprends rien car dans Main, juste avant l'appel a RunProcessAs j'ai forcé toutes les variables comme dans Main2 et j'ai tj la meme erreur :-(
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 24 juil. 2008 à 15:44
J'ai fait un "fix" de ParamStr et ParamCount au cas où le problème viendrait de là. Si tu mets ça en début de programme ça remplacera les fonctions existantes de Delphi.
var
GCommandLine:array of string;
GCommandLineParsed:Boolean=False;
procedure ParseCommandLine;
(*
Parse program command-line and extract arguments, strip quotes.
*)
var
s:string;
p:PChar;
c:Char;
t,u:Boolean;
procedure AddCurrentString;
begin
SetLength(GCommandLine,High(GCommandLine)+2);
GCommandLine[High(GCommandLine)]:=s;
s:='';
end;
begin
if GCommandLineParsed then
Exit;
p:=GetCommandLine;
s:='';
t:=False;
u:=False;
SetLength(GCommandLine,0);
repeat
c:=p^;
case c of
#0..' ':begin
if u and not t then
AddCurrentString;
u:=False;
end;
'''','"':begin
if t then
AddCurrentString;
t:=not t;
u:=False;
end;
else
s:=s+c;
u:=True;
end;
Inc(p);
until c=#0;
GCommandLineParsed:=True;
end;
function ParamCount:Integer;
(*
Fix for Win2000
*)
begin
ParseCommandLine;
Result:=High(GCommandLine);
end;
function ParamStr(const Index:Integer):string;
(*
Fix for Win2000
*)
begin
ParseCommandLine;
Assert((Index>=0) and (Index<=High(GCommandLine)),'Invalid parameter index ('+IntToStr(Index)+')');
Result:=GCommandLine[Index];
end;
Autre piste: peut-être que c'est le ExitCode:= qui pose problème. As-tu essayé de faire seulement
RunProcessAs(ParamStr(b),t,Username,Password,Domain,WorkingDir);
?
cs_pascal99
Messages postés24Date d'inscriptionmercredi 10 septembre 2003StatutMembreDernière intervention20 janvier 2009 24 juil. 2008 à 15:28
Dans Main j'ai mis des writeln des variables juste avant l'appel a RunProcessAs
ParamStr(b): dir.exe
Username: mon_profil
Password: mon_mdp
Domain: EU
WorkingDir:
Error: Violation d'accÞs Ó l'adresse 00403998 dans le module 'RunAs.exe'. Lecture de l'adresse FFFFFFF7
cs_pascal99
Messages postés24Date d'inscriptionmercredi 10 septembre 2003StatutMembreDernière intervention20 janvier 2009 24 juil. 2008 à 14:39
Si ca peux t'aider :
ParamCount=7
ParamStr(0): C:\Delphi\RUN-AS\RunAs.exe
ParamStr(1): ---U
ParamStr(2): mon_profil
ParamStr(3): ---D
ParamStr(4): EU
ParamStr(5): ---P
ParamStr(6): mon_mdp
ParamStr(7): dir.exe
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 24 juil. 2008 à 14:27
L'erreur dont tu parles est normale je pense.
Donc vraisemblablement l'erreur se situe dans le parsing des arguments. Je vais relire attentivement et peut-être en faire une autre version. Ceci dit, j'ai peur que le problème vienne d'une spécifité de Win2k au niveau de la génération des ParamCount/ParamStr depuis la ligne de commande.
cs_pascal99
Messages postés24Date d'inscriptionmercredi 10 septembre 2003StatutMembreDernière intervention20 janvier 2009 24 juil. 2008 à 14:21
Main2 et Main3 : plus de plantage mais j'ai une autre erreur :
Error: Could not log user in
Le client ne dispose pas d'un privilÞge nÚcessaire.
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 24 juil. 2008 à 13:57
ah oui, et aussi avec celle ci:
procedure Main3;
var
Username,Password,Domain,WorkingDir:string;
begin
Username:='...';
Password:='...';
Domain:='';
WorkingDir:='';
RunProcessAs('dir.exe',['/?'],Username,Password,Domain,WorkingDir);
end;
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 24 juil. 2008 à 13:55
Dans ce cas la seule explication que je vois c'est que l'erreur vient du code avant d'appeler RunProcessAs. Si tu as le temps, pourrais-tu remplacer l'appel à la fonction main (tout à la fin du programme, dans le begin...end principal) par l'appel à cette fonction-là, après avoir renseigné le bon user/pass, et me dire ce qui se passe:
procedure Main2;
var
t:array of string;
Username,Password,Domain,WorkingDir:string;
begin
Username:='...';
Password:='...';
Domain:='';
WorkingDir:='';
SetLength(t,0);
RunProcessAs('dir.exe',t,Username,Password,Domain,WorkingDir);
end;
J'ai essayé avec ta ligne de commande (---U mon_profil ---D EU ---P mon_mdp dir.exe) et pourtant chez moi ça fonctionne nickel
cs_pascal99
Messages postés24Date d'inscriptionmercredi 10 septembre 2003StatutMembreDernière intervention20 janvier 2009 24 juil. 2008 à 13:39
Ca ne change rien (exactement la meme erreur)
en mode debug, l'erreur se produit sur le Begin de RunProcessAs.
function RunProcessAs(Command:string;Parameters:array of string;Username,Password:string;Domain:string='';WorkingDirectory:string='';Wait:Boolean=False):Cardinal;
var
a:Integer;
n:Cardinal;
h:THandle;
p:Pointer;
PI:TProcessInformation;
SI:TStartupInfo;
//t:array[0..MAX_PATH] of WideChar;
t:array[0..MAX_PATH] of Char;
wUser,wDomain,wPassword,wCommandLine,wCurrentDirectory:WideString;
begin <-- ici
Writeln('Debug');
Sleep(10000);
ZeroMemory(@PI,SizeOf(PI));
ZeroMemory(@SI,SizeOf(SI));
...
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 24 juil. 2008 à 13:27
Oui, mais ça ne devrait pas poser problème pour autant, le cas est prévu.
RunProcessAs devrait être lancée avec les paramètres suivants dans ton cas:
Command='dir.exe'
Parameters=[]
UserName='mon_profil'
Password='mon_mdp'
Domain=''
WorkingDirectory=''
Wait=false
Ensuite avec la séquence:
wCommandLine:=Command;
for a:=Low(Parameters) to High(Parameters) do
wCommandLine:=wCommandLine+' '+FormatParam(Parameters[a]);
On a:
wCommandLine='cmd.exe'
(en effet Low(Parameters)=0 et High(Parameters)=-1 puisque le tableau est vide)
C'est peut-être là-dedans que se situe le problème:
if Domain='' then begin
n:=SizeOf(t);
if not GetComputerNameW(t,n) then
OSError('Could not get computer name');
wDomain:=t;
end
Si la fonction GetComputerNameW n'a pas fonctionné correctement (exemple: pas de zéro terminal à la fin de la chaine) l'affectation wDomain=t peut poser problème.
Est-ce que tu peux essayer, si tu as le temps, de changer:
t:array[0..MAX_PATH] of WideChar;
en:
t:array[0..MAX_PATH] of Char;
et de remplacer:
GetComputerNameW(t,n)
par:
GetComputerName(t,n)
(sans le W donc, comme la version unicode)
Je ne vois pas trop à part ça ce qui pourrait causer une violation d'accès en lecture.
cs_pascal99
Messages postés24Date d'inscriptionmercredi 10 septembre 2003StatutMembreDernière intervention20 janvier 2009 24 juil. 2008 à 13:13
non, c'est le t de la procedure Main.
voici mes parametres : ---U mon_profil ---D EU ---P mon_mdp dir.exe
b etant equal a ParamCount (=7), t est vide.
en effet :
- SetLength(t,ParamCount-b)=0
- on ne passe jamais dans for a:=b+1 to ParamCount do t[a-b-1]:=ParamStr(a);
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 24 juil. 2008 à 12:13
Alors dans ce cas-là il faut peut-être remplacer PWideChar(wDomain) par nil dans l'appel de CreateProcessWithLogon
(si le "t" dont tu parles c'est bien la variable locale de la fonction RunProcessAs).
cs_pascal99
Messages postés24Date d'inscriptionmercredi 10 septembre 2003StatutMembreDernière intervention20 janvier 2009 24 juil. 2008 à 11:52
C'est a l'appel de RunProcessAs qu'il y a un pb.
A priori t est vide
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 24 juil. 2008 à 11:31
Salut Forman,
je suis tout à fait d' accord avec toi, c' est juste une mauvaise habitude ^^
A+
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 24 juil. 2008 à 11:27
Mauricio: Merci. Moi j'ai arrêté définitivement le mode admin depuis que j'ai vu que ça rendait 99.99% des virus et assimilés inopérants. J'ai déjà fait le test de lancer des exe infectés depuis un compte restreint, parfois le PC plante mais jamais le truc n'a eu la possibilité de s'installer durablement. Et une fois que tu as bien configuré les différentes permissions d'accès en fonction de l'usage que tu souhaites sur ton compte restreint, ça reste quand même raisonnablement pratique.
Pascal: Bonjour,
je n'ai pas la possibilité de tester sous Win2K chez moi. Est-ce que tu as des détails sur l'endroit où se produit la violation?
Par exemple en rajoutant
Writeln('Debug');
Sleep(10000);
au tout début de la fonction RunProcessAs, est-ce que tu le vois s'afficher dans la console ou est-ce que ça plante avant?
Merci pour les '.dll' déjà en tout cas :-)
cs_pascal99
Messages postés24Date d'inscriptionmercredi 10 septembre 2003StatutMembreDernière intervention20 janvier 2009 24 juil. 2008 à 11:08
Bonjour,
j'ai testé ton prog en Win2K et il me dit que "userenv" est introuvable.
En effet il manque les ".dll" dans les external.
Une fois recompilé, a l'execution d'une commande dir j'ai le message :
Error: Violation d'accÞs Ó l'adresse 00403908 dans le module 'RunAs.exe'. Lecture de l'adresse FFFFFFF7
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 24 juil. 2008 à 10:39
Salut Forman,
je trouve la source interessante (c' est très bien écrit) même si je log toujours en admin.
Ça va servir en tout cas pour les mordus de la sécu.
A+
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 23 juil. 2008 à 19:08
J'ai oublié de le préciser: il faut au moins Win NT ou XP pour que ça fonctionne (je ne sais pas si ça marche toujours sous vista). En outre, il n'est pas possible de lancer en même temps plusieurs commandes d'un autre compte avec ce système (il faut attendre que la première soit terminée avant d'en lancer une autre).
6 janv. 2011 à 12:41
Dommage dites moi si vous avez du mieux....
28 juil. 2008 à 13:24
"it works on a w2k workstation, but doesnt work on a win2k server"
On peut apparemment arriver à faire fonctionne LogonUser (chez toi ça ne passe même pas ce stade) en changeant les stratégies locales de sécurité dans le panneau de configuration, mais CreateProcessWithLogonW ne fonctionne pas pour autant. J'ai aussi lu que quelqu'un aurait peut-être réussi en créant un service à la place.
A++, Forman
28 juil. 2008 à 13:18
A++, Forman
28 juil. 2008 à 13:10
- Si je ne mets pas le nom de domaine : meme message.
- Si je ne mets pas de domaine mais qu'en utilisateur de mets domaine/utilisateur, domaine\utilisateur ou utilisateur@domaine : meme message.
- Si je prends un profil administrateur local (sur mon PC) que ce soit avec en domaine le nom de mon PC ou sans domaine : meme message.
Je ne sais plus quoi tester. Si tu as une idée...
a+ Pascal
28 juil. 2008 à 12:48
Pour le 1) il semblerait donc que depuis le début ce soit un bug du compilateur! Dans ce cas-là, un truc tout bête: essaie de désactiver les optimisations dans les options su projet. Parfois j'ai eu de grosses surprises comme ça. Pour info j'utilise Delphi 7.
Pour le 2) j'ai vu que tu spécifiais explicitement le nom de domaine. Que se passe-t-il si tu ne le mets pas? Il faut prendre garde aussi que les mots de passe doivent être case-sensitive.
A bientôt
Forman
28 juil. 2008 à 09:49
1) j'ai essayé avec ton .exe sous Win2K et il n'y a plus le plantage.
Tu as compilé ton prog avec quelle version ? (moi c'etait avec Delphi Pro 5).
2) Maintenant, quelque soit le profil que j'utilise, le message d'erreur est :
Error: Could not log user in
Le client ne dispose pas d'un privilÞge nÚcessaire.
Win2K n'a pas l'air d'aimer to prog.
a+
Pascal99
24 juil. 2008 à 19:39
Forman
24 juil. 2008 à 18:55
Pour le Win2K, je ne pourrais retester que lundi.
En attendant, bon week-end.
Pascal99
24 juil. 2008 à 16:41
Essaie peut-être de passer les paramètres à la fonction RunProcessAs en tant que 'var' ou 'const' (surtout le array of string). Ou même de changer la convention d'appel (stdcall).
Et avec l'exe compilé que j'ai mis dans le zip, ça plante aussi?
24 juil. 2008 à 16:21
Je doit t'avouer que je n'y comprends rien car dans Main, juste avant l'appel a RunProcessAs j'ai forcé toutes les variables comme dans Main2 et j'ai tj la meme erreur :-(
24 juil. 2008 à 15:44
var
GCommandLine:array of string;
GCommandLineParsed:Boolean=False;
procedure ParseCommandLine;
(*
Parse program command-line and extract arguments, strip quotes.
*)
var
s:string;
p:PChar;
c:Char;
t,u:Boolean;
procedure AddCurrentString;
begin
SetLength(GCommandLine,High(GCommandLine)+2);
GCommandLine[High(GCommandLine)]:=s;
s:='';
end;
begin
if GCommandLineParsed then
Exit;
p:=GetCommandLine;
s:='';
t:=False;
u:=False;
SetLength(GCommandLine,0);
repeat
c:=p^;
case c of
#0..' ':begin
if u and not t then
AddCurrentString;
u:=False;
end;
'''','"':begin
if t then
AddCurrentString;
t:=not t;
u:=False;
end;
else
s:=s+c;
u:=True;
end;
Inc(p);
until c=#0;
GCommandLineParsed:=True;
end;
function ParamCount:Integer;
(*
Fix for Win2000
*)
begin
ParseCommandLine;
Result:=High(GCommandLine);
end;
function ParamStr(const Index:Integer):string;
(*
Fix for Win2000
*)
begin
ParseCommandLine;
Assert((Index>=0) and (Index<=High(GCommandLine)),'Invalid parameter index ('+IntToStr(Index)+')');
Result:=GCommandLine[Index];
end;
Autre piste: peut-être que c'est le ExitCode:= qui pose problème. As-tu essayé de faire seulement
RunProcessAs(ParamStr(b),t,Username,Password,Domain,WorkingDir);
?
24 juil. 2008 à 15:28
writeln('ParamStr(b): ',ParamStr(b));
writeln('Username: ',Username);
writeln('Password: ',Password);
writeln('Domain: ',Domain);
writeln('WorkingDir: ',WorkingDir);
ExitCode:=RunProcessAs(ParamStr(b),t,Username,Password,Domain,WorkingDir);
ParamStr(b): dir.exe
Username: mon_profil
Password: mon_mdp
Domain: EU
WorkingDir:
Error: Violation d'accÞs Ó l'adresse 00403998 dans le module 'RunAs.exe'. Lecture de l'adresse FFFFFFF7
24 juil. 2008 à 14:39
ParamCount=7
ParamStr(0): C:\Delphi\RUN-AS\RunAs.exe
ParamStr(1): ---U
ParamStr(2): mon_profil
ParamStr(3): ---D
ParamStr(4): EU
ParamStr(5): ---P
ParamStr(6): mon_mdp
ParamStr(7): dir.exe
24 juil. 2008 à 14:27
Donc vraisemblablement l'erreur se situe dans le parsing des arguments. Je vais relire attentivement et peut-être en faire une autre version. Ceci dit, j'ai peur que le problème vienne d'une spécifité de Win2k au niveau de la génération des ParamCount/ParamStr depuis la ligne de commande.
24 juil. 2008 à 14:21
Error: Could not log user in
Le client ne dispose pas d'un privilÞge nÚcessaire.
24 juil. 2008 à 13:57
procedure Main3;
var
Username,Password,Domain,WorkingDir:string;
begin
Username:='...';
Password:='...';
Domain:='';
WorkingDir:='';
RunProcessAs('dir.exe',['/?'],Username,Password,Domain,WorkingDir);
end;
24 juil. 2008 à 13:55
procedure Main2;
var
t:array of string;
Username,Password,Domain,WorkingDir:string;
begin
Username:='...';
Password:='...';
Domain:='';
WorkingDir:='';
SetLength(t,0);
RunProcessAs('dir.exe',t,Username,Password,Domain,WorkingDir);
end;
J'ai essayé avec ta ligne de commande (---U mon_profil ---D EU ---P mon_mdp dir.exe) et pourtant chez moi ça fonctionne nickel
24 juil. 2008 à 13:39
en mode debug, l'erreur se produit sur le Begin de RunProcessAs.
function RunProcessAs(Command:string;Parameters:array of string;Username,Password:string;Domain:string='';WorkingDirectory:string='';Wait:Boolean=False):Cardinal;
var
a:Integer;
n:Cardinal;
h:THandle;
p:Pointer;
PI:TProcessInformation;
SI:TStartupInfo;
//t:array[0..MAX_PATH] of WideChar;
t:array[0..MAX_PATH] of Char;
wUser,wDomain,wPassword,wCommandLine,wCurrentDirectory:WideString;
begin <-- ici
Writeln('Debug');
Sleep(10000);
ZeroMemory(@PI,SizeOf(PI));
ZeroMemory(@SI,SizeOf(SI));
...
24 juil. 2008 à 13:27
RunProcessAs devrait être lancée avec les paramètres suivants dans ton cas:
Command='dir.exe'
Parameters=[]
UserName='mon_profil'
Password='mon_mdp'
Domain=''
WorkingDirectory=''
Wait=false
Ensuite avec la séquence:
wCommandLine:=Command;
for a:=Low(Parameters) to High(Parameters) do
wCommandLine:=wCommandLine+' '+FormatParam(Parameters[a]);
On a:
wCommandLine='cmd.exe'
(en effet Low(Parameters)=0 et High(Parameters)=-1 puisque le tableau est vide)
C'est peut-être là-dedans que se situe le problème:
if Domain='' then begin
n:=SizeOf(t);
if not GetComputerNameW(t,n) then
OSError('Could not get computer name');
wDomain:=t;
end
Si la fonction GetComputerNameW n'a pas fonctionné correctement (exemple: pas de zéro terminal à la fin de la chaine) l'affectation wDomain=t peut poser problème.
Est-ce que tu peux essayer, si tu as le temps, de changer:
t:array[0..MAX_PATH] of WideChar;
en:
t:array[0..MAX_PATH] of Char;
et de remplacer:
GetComputerNameW(t,n)
par:
GetComputerName(t,n)
(sans le W donc, comme la version unicode)
Je ne vois pas trop à part ça ce qui pourrait causer une violation d'accès en lecture.
24 juil. 2008 à 13:13
voici mes parametres : ---U mon_profil ---D EU ---P mon_mdp dir.exe
b etant equal a ParamCount (=7), t est vide.
en effet :
- SetLength(t,ParamCount-b)=0
- on ne passe jamais dans for a:=b+1 to ParamCount do t[a-b-1]:=ParamStr(a);
24 juil. 2008 à 12:13
(si le "t" dont tu parles c'est bien la variable locale de la fonction RunProcessAs).
24 juil. 2008 à 11:52
A priori t est vide
24 juil. 2008 à 11:31
je suis tout à fait d' accord avec toi, c' est juste une mauvaise habitude ^^
A+
24 juil. 2008 à 11:27
Pascal: Bonjour,
je n'ai pas la possibilité de tester sous Win2K chez moi. Est-ce que tu as des détails sur l'endroit où se produit la violation?
Par exemple en rajoutant
Writeln('Debug');
Sleep(10000);
au tout début de la fonction RunProcessAs, est-ce que tu le vois s'afficher dans la console ou est-ce que ça plante avant?
Merci pour les '.dll' déjà en tout cas :-)
24 juil. 2008 à 11:08
j'ai testé ton prog en Win2K et il me dit que "userenv" est introuvable.
En effet il manque les ".dll" dans les external.
Une fois recompilé, a l'execution d'une commande dir j'ai le message :
Error: Violation d'accÞs Ó l'adresse 00403908 dans le module 'RunAs.exe'. Lecture de l'adresse FFFFFFF7
24 juil. 2008 à 10:39
je trouve la source interessante (c' est très bien écrit) même si je log toujours en admin.
Ça va servir en tout cas pour les mordus de la sécu.
A+
23 juil. 2008 à 19:08