IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

[Sécurité] Autorisation dynamique d'accès à un dossier


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Par défaut
    Autant passer par l'API Windows http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wnet/wnet/windows_networking_reference.asp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Abstract:How do I map a network drive in Windows NT or '95?
     
     Technical Information Database
     
    TI1592D.txt   How do I map a network drive in Windows NT or '95?
    Category   :Application Interop
    Platform    :All
    Product    :Delphi  All
     
    Description:
    How do I map a network drive in Windows NT or '95?
     
      You can use the WNetAddConnection2 API call.  The prototype for the
    API call is in Windows.Pas.
     
      function WNetAddConnection2W(var lpNetResource: TNetResourceW;
        lpPassword, lpUserName: PWideChar;
        dwFlags: DWORD): DWORD; stdcall;
     
      To make the call you will need to fill a lpNetResource structure
    with a minimum set of parameters, shown in the example below.  You
    pass this structure as the first parameter to the call, the password,
    user name, and a flag that indicates whether this mapping should
    be persistant every time the machine is logged onto.  For more info
    on the API itself, see Window's Programmers Reference help (find the
    function in Windows.pas, place your text cursor over the function
    call, and hit F1 to bring up help).
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      NRW: TNetResource;
    begin
      with NRW do
      begin
        dwType := RESOURCETYPE_ANY;
        lpLocalName := 'X:'; // map to this driver letter
        lpRemoteName := 'MyServerMyDirectory';
        // Must be filled in.  If an empty string is used,
        // it will use the lpRemoteName.
        lpProvider := '';
      end;
      WNetAddConnection2(NRW, 'MyPassword', 'MyUserName',
        CONNECT_UPDATE_PROFILE);
    end;

  2. #2
    Membre Expert
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Par défaut
    Exact !

    Même que je l'utilise dans un de mes softs ! J'avait oublié !

    tiens, si ca t'interesse, la gestion des erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    case resultat of
      NO_ERROR:   begin
            ConnecterLecteurReseau  := true ;
     
            end;
      ERROR_ACCESS_DENIED   :   begin
            ConnecterLecteurReseau  := true ;
             ShowMessage ('accès refusé');
            end;
      ERROR_ALREADY_ASSIGNED   :   begin
            ConnecterLecteurReseau  := false ;
             ShowMessage ('lecteur réseau déjà attribué');
            end;
      ERROR_INVALID_PASSWORD   :   begin
            ConnecterLecteurReseau  := false ;
             ShowMessage ('mot de passe incorrect');
            end;
      ERROR_BAD_NET_NAME :
        begin
         ShowMessage ('erreur de connexion à votre répertoire réseau (nom réseau)');
         ConnecterLecteurReseau := false;
        end;
      else
        begin
          ShowMessage('erreur de connexion  réseau  non traitée');
          ConnecterLecteurReseau := false ;
        end;
      end;
    et en cadeau la procedure pour deconnecter la lettre que tu va utiliser avant de la connecter !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure DeConnecterLecteurReseau(LettreReseau:pchar);
    begin
      WNetCancelConnection2(LettreReseau ,0,true);
    end ;

  3. #3
    Membre confirmé Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Par défaut
    Merci beaucoup les gars !!!

    Franchement c'est top, il me reste plus qu'a tester ça. On est bien parti pour résoudre ce maudit problème

    Merci encore

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Par défaut
    Il faut voir que pendant que le disque partagé est mappé par l'application, il doit être visible dans l'explorateur et peut être accessible.

    Sinon il y a la possibilité de passer par l'API Windows (CreateFile, OpenFile) avec des noms UNC (\\serveur\dossier\)

  5. #5
    Membre confirmé Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Par défaut
    Citation Envoyé par cpdump
    Il faut voir que pendant que le disque partagé est mappé par l'application, il doit être visible dans l'explorateur et peut être accessible.

    Sinon il y a la possibilité de passer par l'API Windows (CreateFile, OpenFile) avec des noms UNC (\\serveur\dossier\)
    Pour le disque partagé il me reste qu'a le déconnecter à chaque fois que je ne m'en sers plus.

    Au pire on peut le rendre caché ?

  6. #6
    Membre Expert
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Par défaut
    Citation Envoyé par SkYsO
    Citation Envoyé par cpdump
    Il faut voir que pendant que le disque partagé est mappé par l'application, il doit être visible dans l'explorateur et peut être accessible.

    Sinon il y a la possibilité de passer par l'API Windows (CreateFile, OpenFile) avec des noms UNC (\\serveur\dossier\)
    Pour le disque partagé il me reste qu'a le déconnecter à chaque fois que je ne m'en sers plus.

    Au pire on peut le rendre caché ?
    Comme te le signale cpdump, ca veux dire que si un utilisateur demande un document quelconque, tu mappe le repertoire, et que du coup, tant qu'il n'as pas fini de lire son document sans importance, il peut aller grace à l'explorateur consulter les documents auquel, il n'aurait pas acces depuis ton soft...
    C'est un risque... Du coup, je ne suis pas sur que tu ai choisis la bonne option.

    Cordialement

  7. #7
    Membre confirmé Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Par défaut
    Bon je viens de tenter avec le code que cpdump ma donné et je tombe sur une erreur que je n'arrive pas à identifier même avec la gestion des erreurs, le code renvoyé par resultat ne correspond à rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    with NRW do
      begin 
        dwType := RESOURCETYPE_DISK; 
        lpLocalName := 'X:'; // map to this driver letter 
        lpRemoteName := '\\serveur\partage';
        // Must be filled in.  If an empty string is used, 
        // it will use the lpRemoteName. 
        lpProvider := '';
      end; 
      resultat :=WNetAddConnection2(NRW, 'monuser', 'monpass',
        CONNECT_UPDATE_PROFILE);
    Je travail sous une station xp et je voudrais créer un lecteur X qui pointe sur partage sur le serveur en étant identifier avec monuser

    Cela devrait fonctionner pourtant non ?

    ma var resultat vaut 1200

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Par défaut
    Récupère le code erreur en clair avec WNetGetLastError, sinon 1200 veut dire ERROR_BAD_DEVICE : The specified device name is invalid.

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wnet/wnet/windows_networking_functions.asp

    Sinon il y a un exemple en C sur msdn http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wnet/wnet/assigning_a_drive_to_a_share.asp

  9. #9
    Membre Expert
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    with NRW do
      begin
        dwType := RESOURCETYPE_DISK;
        lpLocalName := PChar('X:');
        lpRemoteName := PChar('\\Server\repertoire');
        lpProvider := nil;
      end;
      WNetAddConnection2(NRW, PChar('mdp'), PChar('login'),
        CONNECT_UPDATE_PROFILE);
    if (GetLastError <> NO_ERROR) then
      begin
        Application.MessageBox(PChar('Une erreure c''est produite :' + #13#10 +
          SysErrorMessage(GetLastError)),
          'Erreur de connection',
          MB_OK);
      end;
    ceci marche chez moi...

  10. #10
    Membre confirmé Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Par défaut
    Bon j'ai enfin réussi à connecter un lecteur et à le déco à la volé.

    Bon par contre à chaque fois j'ai un message :
    une opération d'entrée sortie avec chevauchement est en cours d'éxécution.

    Mais cela marche quand meme.

    @NoisetteProd : Oui il y a un certain risque, que l'utilisateur aille quand même jetter un coups d'oeil dans le dossier en dehors du programme. mais pour le moment cela reste la meilleurs solution car en fait pour le moment l'entreprise doit mettre son dossier en partage pour tous le monde.

    merci beaucoups pour votre aide.
    Je vais poursuivre.

    aller un tag résolu pour cette partie. (espérons que la suite de la manipulation se fasse sans soucis )

  11. #11
    Membre confirmé Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Par défaut
    Citation Envoyé par NoisetteProd
    Citation Envoyé par SkYsO
    Citation Envoyé par cpdump
    Il faut voir que pendant que le disque partagé est mappé par l'application, il doit être visible dans l'explorateur et peut être accessible.

    Sinon il y a la possibilité de passer par l'API Windows (CreateFile, OpenFile) avec des noms UNC (\\serveur\dossier\)
    Pour le disque partagé il me reste qu'a le déconnecter à chaque fois que je ne m'en sers plus.

    Au pire on peut le rendre caché ?
    Comme te le signale cpdump, ca veux dire que si un utilisateur demande un document quelconque, tu mappe le repertoire, et que du coup, tant qu'il n'as pas fini de lire son document sans importance, il peut aller grace à l'explorateur consulter les documents auquel, il n'aurait pas acces depuis ton soft...
    C'est un risque... Du coup, je ne suis pas sur que tu ai choisis la bonne option.

    Cordialement
    Bon je m'en suis sorti mais il est vrai que je n'arrive pas à une solution efficace et je n'y gagne pas encore assez.

    On peut pas parcourir d'une autre façon un repertoire se faisant "passer" pour un autre utilisateur ?

  12. #12
    Membre Expert
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Par défaut
    Je crois me rappeller que si le nom de partage se termine par $, il n'est pas visible dans l'eplorateur.

  14. #14
    Membre Expert
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Par défaut
    Effectivement, sous windows, c'est ce que l'on appel un partage administratif. Il ne sera pas visible dans les l'explorateur, mais nimporte qui (ayant les droits sur ce partage) connaissant l'adresse peux s'y rendre.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [VPN] Autoriser accès à un dossier précis
    Par doons dans le forum Administration
    Réponses: 4
    Dernier message: 14/01/2015, 16h55
  2. Autorisations d'accès à des dossiers partagés
    Par jncoffy dans le forum Windows XP
    Réponses: 4
    Dernier message: 25/11/2009, 13h25
  3. Réponses: 2
    Dernier message: 23/04/2008, 15h15
  4. [Sécurité] Autoriser l'acces à un site internet
    Par justdams dans le forum Langage
    Réponses: 5
    Dernier message: 27/02/2006, 12h52
  5. [HTAccess] bloquer l'accès à un dossier : sécurité ?
    Par Rémiz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 26/11/2005, 10h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo