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 :

Problème de partage avec NetShareAdd()


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Points : 63
    Points
    63
    Par défaut Problème de partage avec NetShareAdd()
    Bonjour,

    Je code avec Delphi 7 Personnel. Le but de mon programme est de partager un lecteur correspondant à un support amovible sur le réseau.

    J'ai donc trouver une implémentation de la fonction NetShareAdd de la DLL netapi.dll

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    unit uShare;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, StdCtrls, Dialogs;
     
    type
     _SHARE_INFO_2 = record
         shi2_netname: LPWSTR;
         shi2_type: DWORD;
         shi2_remark: LPWSTR;
         shi2_permissions: DWORD;
         shi2_max_uses: DWORD;
         shi2_current_uses: DWORD;
         shi2_path: LPWSTR;
         shi2_passwd: LPWSTR;
      end;
      PSHARE_INFO_2= ^_SHARE_INFO_2;
     
    var
      Share: PSHARE_INFO_2;
      ParamErr: lpdword;
      Rep : longint;
     
    const
     STYPE_DISKTREE = 0;
     STYPE_PRINTQ = 1;
     STYPE_DEVICE = 2;
     STYPE_IPC = 3;
     STYPE_DFS = 100;
     STYPE_SPECIAL = $80000000;
     
     ACCESS_NONE = 0;
     ACCESS_READ  = 1;
     ACCESS_WRITE = 2;
     ACCESS_CREATE = 4;
     ACCESS_EXEC = 8;
     ACCESS_DELETE = 16;
     ACCESS_ATRIB = 32;
     ACCESS_PERM = 64;
     ACCESS_ALL = (ACCESS_READ+ACCESS_WRITE+ACCESS_CREATE+ACCESS_EXEC+ACCESS_DELETE+ACCESS_ATRIB+ACCESS_PERM);
     
      function StringToPWideChar(const SrcStr: string): PWideChar;
     
      function ajouter_partage(nom, chemin, commentaire: String; permissions, nombre_utilisateurs: Cardinal): integer;
      function supprimer_partage(nom: PWideChar): integer;
     
    implementation
     
    {
      StringToPWideChar() :
        args 0 : const StrStr (string) : La chaîne de caractères à convertir.
        retourne : la chaîne convertit en PWideChar;
    }
    function StringToPWideChar(const SrcStr: string): PWideChar;
    var
      // Le tampon de sortie de la fonction
      Dest: PWideChar;
    begin
      // On réserve la mémoire pour la chaîne (taille d'un WideChar * le nb de caractères de la chaîne.
      GetMem(Dest, Sizeof(WideChar) * Succ(Length(SrcStr)));
     
      // Conversion
      StringToWideChar(SrcStr, Dest, Succ(Length(SrcStr)));
     
      //Retour.
      Result:=Dest;
     
      // Libération de la mémoire.
      FreeMem(Dest);
    end;
     
    function NetShareAdd(servername: LPWSTR;
        level: DWORD;
        buf: pSHARE_INFO_2;
        parm_err: LPDWORD):LongWord; stdcall; external 'netapi32.dll';
     
    function NetShareDel(servername: LPWSTR;
        netname : LPWSTR;
        reserved : DWORD):LongWord; stdcall; external 'netapi32.dll';
     
    function ajouter_partage(nom, chemin, commentaire: String; permissions, nombre_utilisateurs: Cardinal): integer;
    var
      e: Cardinal;
    begin
      New(share);
      with Share^ do
      begin
        shi2_netname := StringToPWideChar(nom);
        shi2_type := STYPE_DISKTREE;
        shi2_remark := StringToPWideChar(commentaire);
        shi2_permissions := permissions;
        shi2_max_uses := nombre_utilisateurs;
        shi2_current_uses := 0;
        shi2_path := StringToPWideChar(chemin);
        shi2_passwd := nil;
      end;
      Result:= NetShareAdd(nil, 2, SHARE, ParamErr);
      Dispose(share);
    end;
     
    function supprimer_partage(nom: PWideChar): integer;
    begin
      Result:= NetShareDel(nil, nom, 0);
    end;
     
     
    end.
    Quand je fais appel à ma fonction ajouter_partage() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TfMain.Button1Click(Sender: TObject);
    var
      Rep: Integer;
    begin
      Rep := ajouter_partage('TESTSHR', 'C:\Temp', '', ACCESS_ALL, 4);
     
      if (Rep <> 0) then
        ShowMessage(Format('Erreur lors de la création du partage : #%d - %s', [Rep, SysErrorMessage(Rep)]));
    end;
    J'obtiens :

    Erreur [...] #123 - La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte
    Pourtant le dossier existe bel et bien donc je comprends pas. J'ai essayé avec plein d'autres il ne veut rien savoir.
    Il y a peut-être un problème avec la fonction StringToPWideChar que j'utilise dans la fonction ajouter_partage() et que j'ai trouvé sur le net.
    Mais comme je comprends pas trop le principe du PWideChar, PWideString, etc ... et bien je galère.

    Si vous avez des idées ... merci d'avance pour votre aide.

    A bientôt, bonne soirée.

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2003
    Messages : 167
    Points : 208
    Points
    208
    Par défaut
    Bonjour
    il me semble que l'erreur doit etre là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Result:= NetShareAdd(nil, 2, SHARE, ParamErr);
    il faudrait mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Result:= NetShareAdd(nil, 2, @SHARE, ParamErr);

  3. #3
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Points : 63
    Points
    63
    Par défaut
    Hum je pense pas puisque la fonction attend un pointeur sur un _SHARE_INFO_2. J'ai essayé ça me donne une violation d'accès incompréhensible

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Le compilateur devrait être capable sous D7 de faire une conversion implicite.
    Essaye de définir tes paramètres en WideString même si tu les remplis d'AnsiString.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function ajouter_partage(nom, chemin, commentaire: WideString; permissions, nombre_utilisateurs: Cardinal): integer;
    begin
      ...
      shi2_netname := PWideChar(nom);
      ...
    end;

Discussions similaires

  1. problème de partage avec windows 2008 server
    Par BIMDF dans le forum Windows
    Réponses: 3
    Dernier message: 23/10/2014, 12h34
  2. [OL-2003] Problème compilation tutoriel Heureux-oli (Partage avec Access)
    Par alphaBetaGamma dans le forum Outlook
    Réponses: 1
    Dernier message: 08/04/2009, 11h11
  3. Problème de partage avec connexion PPTP
    Par sofien dans le forum Windows Serveur
    Réponses: 7
    Dernier message: 26/11/2008, 14h20
  4. Partager une imprimante avec NetShareADD
    Par Delbeke dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 09/05/2008, 15h22
  5. Problème de partage de connexion avec Wifi ?
    Par hsazerty dans le forum Windows XP
    Réponses: 3
    Dernier message: 30/04/2008, 09h47

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