Reserver répertoire pour mon appli [Résolu]

cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 26 oct. 2011 à 13:03 - Dernière réponse : fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention
- 28 oct. 2011 à 20:05
Bonjour à tous,

je cherche comment je peux réserver la lecture/suppression de fichiers dans un répertoire réseau réservé à mon application tournant sur plusieurs machines.
L' idée est d' y mettre des images par exemple qui ne seront par la suite qu' accessible via mon application.
Je veux dire que l' utilisateur ne pourra pas supprimer ces fichiers via l' explorateur Windows.

Merci pour tout idée apportée.

A+


Composants Cindy pour Delphi
Faites une donation.
Afficher la suite 

35 réponses

Répondre au sujet
Caribensila 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention - 26 oct. 2011 à 17:40
+3
Utile
As-tu vu cette discussion et les explications de Hendrix ?
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Caribensila
Caribensila 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention - 26 oct. 2011 à 17:51
+3
Utile
Y'a aussi le code source de fbalien.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Caribensila
fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention - 28 oct. 2011 à 16:55
+3
Utile
Bonjour

une autre solution mais sans codage
1- ajouter l'attribut système au répertoire
attrib +s Y:\Utilizadores\Administrator

2- créer un fichier desktop.ini dans Y:\Utilizadores\Administrator et y coller ceci
[.ShellClassInfo]
CLSID={20D04FE0-3AEA-1069-A2D8-08002B30309D}

enregistrer le fichier
Et là lors de la tentative d'entrer dans le répertoire Administrator via l'explorateur on est redirigé dans le poste de travail
Par contre via le code delphi pas de souci

L'inconvénient c'est pour intervenir sur le dossier après il faut y aller en dos
A+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de fbalien
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 26 oct. 2011 à 15:39
0
Utile
Bonsoir Mauricio,

juste un truc qui me vient à l'idée :

Si Dupont est autorisé sur un domaine à intervenir sur des fichiers
d'un dossier en réseau à travers ton application, pourquoi devrait-il perdre ses droits à travers windows ?

A moins bien sûr, qu'il existe une raison statistique auquel cas
je n'ai rien dit

cantador
Commenter la réponse de cs_cantador
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 26 oct. 2011 à 15:44
0
Utile
En fait, je veux donner des droits sur un répertoire à mon appli, pas à l' utilisateur.

J' ai trouvé ça mais je n' arrive pas à copier le fichier alors que Administrator à le droit d' accès au répertoire :
Site: http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_23710185.html


Disons que j' ai un répertoire réseau "Y:\Utilizadores\Administrator".

if LogonUser('IBIT\Administrator', '', 'password', LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_WINNT50, h) then
try
if ImpersonateLoggedOnUser(h) then
begin
GetUserName(nil, d); // get logged in username, just for test
setlength(s, d+1);
GetUserName(pchar(s), d);
Caption := s;

if copyfile('Y:\Utilizadores\Administrator\logo.jpg', 'd:\logo.jpg', false)
then Caption := 'Copiado'
else Caption := 'Erro ao copiar';
end
else
showmessage(syserrormessage(getlasterror));
finally
closehandle(h);
end else
showmessage(syserrormessage(getlasterror));



Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
Caribensila 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention - 26 oct. 2011 à 16:03
0
Utile
Salut Mauricio,

Et en jouant sur les attributs de fichier... par exemple si ton fichier est en "lecture seule" et "caché", tu crois qu'un utilisateur pourrait quand même le supprimer ?
Commenter la réponse de Caribensila
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 26 oct. 2011 à 16:31
0
Utile
Salut Cari,

Le problème est que l' appli doit pouvoir supprimer des fichiers!

Il semble que le bout de code plus haut soit la solution:
J' ai crée l' utilisateur administrator qui a tous les droits sur le répertoire réseau en question.
Par contre, je démarre ma session Windows comme l' utilisateur "mauricio".
Ensuite, j' essaye de faire LogonUser('administrator', dans mon appli: tout va bien jusqu' ici.
Par contre, je n' ai pas accès au fichier.
D' après ce que j' ai pu lire, il existe une fonction CreateProcessAsUserW à appeler après la fonction LogonUser pour executer une appli avec les droits de l' utilisateur de la fonction LogonUser. C' est exactement cela que je voudrai: donner des droits diefférents à une appli.
Reste à savoir si je vais y arriver ...


if LogonUser('administrator', '', 'password', LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_WINNT50, h) then
try
CreateProcessAsUserW(h, ...


A+



Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 26 oct. 2011 à 17:24
0
Utile
il faudrait que les fichiers soient cachés
à travers windows et visibles en se servant de l'appli...

à l'ouverture, on les rend visibles et à la fermeture on les cache

voyons voir....hummhhhh

aie, il y a un os car rien n'empêchera un utilisateur lambda d'ouvrir le dossier lorsque l'appli tournera..

autre solution, donner des droits à seule personne
et dès qu'un utilisateur se connecte faire comme si c'était l'élu (transfert)
et bien entendu, en dehors de cette entrée, pas moyen d'avoir les droits sur les fichiers puisque cette connexion est secrète se fait via le code.

non ?

cantador
Commenter la réponse de cs_cantador
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 26 oct. 2011 à 17:32
0
Utile
Salut Cantador,

je t' invite à jeter un oeil sur l' aide à propos de LogonUser et CreateProcessAUser.

Voilà ce que j' ai pour l' instant, ça marche pas:

var
htoken, hNewtoken: cardinal;
s: string;
d: cardinal;

Programa: String;
pi: TProcessInformation;
si: TStartupInfo;
begin
if not LogonUser('administrator', '', 'password', LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_WINNT50, htoken) then
begin
ShowMessage('LogonUser failed!');
Exit;
end;

Programa := 'calc.exe';
if CreateProcessAsUser(hToken, PChar(Programa), Nil, Nil, Nil, false, NORMAL_PRIORITY_CLASS or CREATE_NEW_CONSOLE, Nil, '', si, pi)
then Caption := 'Ok.'
else Caption := 'Failed';


Il existe dans la Jedi JCL (JEDI\jcl\examples\windows\asuser) un programme démo dans le même genre mais sans succès.


A+

Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 26 oct. 2011 à 17:34
0
Utile
Je précise que le LogonUser fonctionne,
l' idée est d' executer l' appli avec des droits d' un autre utilisateur que celui qui est connecté.

A+


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 27 oct. 2011 à 09:35
0
Utile
por isso trabalha com "CreateProcessWithLogonW"

cantador
Commenter la réponse de cs_cantador
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 27 oct. 2011 à 10:18
0
Utile
Salut,

merci Cari pour la source de fbalien qui semble après quelques tests être la solution.
@Cantador: CreateProcessWithLogonW n' existe pas pour tous les Windows.

A+


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 27 oct. 2011 à 10:33
0
Utile
la source de fbalien utilise CreateProcessWithLogonW..
peut-être suffit-il de tester la version de windows ?
avec vista, ça coince apparemment..

cantador
Commenter la réponse de cs_cantador
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 27 oct. 2011 à 11:11
0
Utile
Je viens de comrendre. Il déclare la fonction lui même :

function CreateProcessWithLogonW(
lpUsername : PWideChar;
lpDomain : PWideChar;
lpPassword : PWideChar;
dwLogonFlags : DWORD;
lpApplicationName : PWideChar;
lpCommandLine : PWideChar;
dwCreationFlags : DWORD;
lpEnvironment : Pointer;
lpCurrentDirectory : PWideChar;
Const lpStartupInfo : TStartupInfo;
Var lpProcessInfo : TProcessInformation):Bool;stdcall;external 'advapi32.dll';

Par contre, j' ai encore un souci. Pour accéder aux fichiers, je dois donner le chemin comme cela: \\serveur1\prive\etc ...
alors que j' ai un lecteur virtuel déclaré ainsi: y:\
Si j' utilise le chemin "y:\etc ...", il me dit que le fichier n' existe pas alors que l' autre utilisateur a lui aussi le lecteur virtuel défini.

Il y a peut être un moyen de résoudre cela ...

A+


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention - 27 oct. 2011 à 18:11
0
Utile
Bonjour Mauricio

Es tu bien sur que le lecteur Y soit bien mappé sous le compte administrator
et que l'option "Se reconnecter à l'ouverture de session" soit active

Cordialement
Commenter la réponse de fbalien
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 27 oct. 2011 à 18:17
0
Utile
Salut fbalien,

oui.
J' utilise une fonction qui s' appelle WNetAddConnection3 et j' arrive à créer le lecteur manquant.
Par contre, je n' aime pas du tout cette fonction mais tout semble marcher ...

Merci à tous.


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention - 27 oct. 2011 à 18:22
0
Utile
Si non voici un bout de code qui me permet de changer d'utilisateur pendant l'execution du programme

function PerformLogonI(User, Domain, Password: String): Cardinal; stdcall;
var
  i : integer;

begin
  i := pos( '\',user);
  if i>0 then
  begin
    domain := copy(user,0,i-1);
    user := copy(user,i+1,length(user)-i);
  end;
  if NOT LogonUser(pChar(User), pChar(Domain), pChar(Password),
                   LOGON32_LOGON_INTERACTIVE,// or LOGON32_LOGON_NETWORK,
                   LOGON32_PROVIDER_DEFAULT,
                   Result) then RaiseLastWin32Error;
end;

    htoken := PerformLogoni(edtcnxlogon.Text,'',edtcnxPassword.Text );
    try
      if not ImpersonateLoggedOnUser(hToken) then ShowMessage(SysErrorMessage( getlasterror));
      try
        // action a faire en tant que autre user;
      finally
        RevertToSelf;
      end;
    finally
      CloseHandle(hToken);
    end;
Commenter la réponse de fbalien
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 27 oct. 2011 à 18:44
0
Utile
Le problème c' est que pendant l' exécution de l' appli, l' utilisateur aussi (et donc, pas seulement l' appli) a ces droits modifiés !?

A+


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention - 27 oct. 2011 à 19:48
0
Utile
en utilisant WNetAddConnection3 et en spécifiant un user et un mot de passe cela donne accès au lecteur effectivement au user
par contre si tu fait
un ImpersonateLoggedOnUser
puis un WNetAddConnection3 sans user et mot de passe (donc là connexion en tant que)
puis tu manipule le fichier sur le Y
et de suite après un RevertToSelf
le user n'a pas le temps de voir quoi que ce soit
Commenter la réponse de fbalien
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 28 oct. 2011 à 10:12
0
Utile
Peut être, mais l' appli est utilisée par l' utilisateur lui-même et ça implique qu' elle peut rester ouverte plusieurs heures ...


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Reserver répertoire pour mon appli - page 2