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

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    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. #22
    Membre émérite
    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
    Points : 2 614
    Points
    2 614
    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 ;
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

  3. #23
    Membre régulier 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
    Points : 122
    Points
    122
    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
    Blog de mon jeu L2D : http://xna-discovery.blogspot.com/
    Un Left 4 Dead Like en 2D vue de dessus ;p

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    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. #25
    Membre régulier 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
    Points : 122
    Points
    122
    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é ?
    Blog de mon jeu L2D : http://xna-discovery.blogspot.com/
    Un Left 4 Dead Like en 2D vue de dessus ;p

  6. #26
    Membre émérite
    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
    Points : 2 614
    Points
    2 614
    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
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

  7. #27
    Membre régulier 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
    Points : 122
    Points
    122
    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
    Blog de mon jeu L2D : http://xna-discovery.blogspot.com/
    Un Left 4 Dead Like en 2D vue de dessus ;p

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    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. #29
    Membre émérite
    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
    Points : 2 614
    Points
    2 614
    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...
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

  10. #30
    Membre régulier 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
    Points : 122
    Points
    122
    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 )
    Blog de mon jeu L2D : http://xna-discovery.blogspot.com/
    Un Left 4 Dead Like en 2D vue de dessus ;p

  11. #31
    Membre régulier 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
    Points : 122
    Points
    122
    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 ?
    Blog de mon jeu L2D : http://xna-discovery.blogspot.com/
    Un Left 4 Dead Like en 2D vue de dessus ;p

  12. #32
    Membre émérite
    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
    Points : 2 614
    Points
    2 614
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    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. #34
    Membre émérite
    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
    Points : 2 614
    Points
    2 614
    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.
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

+ 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