1. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

Dossier en partage

Discussion dans 'Windev' créé par johndoe, Jan 20, 2019.

  1. johndoe

    johndoe New Member

    Inscrit:
    Mar 24, 2018
    Messages:
    29
    J'aime reçus:
    6
    Bonjour,
    Je cherche à savoir si un dossier est en partage pour bloquer certaine fonction , je suppose que c'est un api du kernel , si quelqu'un à une idée , je suis preneur .
    En windev bien sûr ...
    Merci d'avance .

    EDIT : WD 21
     
    #1 johndoe, Jan 20, 2019
    Dernière édition par un modérateur: Jan 22, 2019
    Tags:
  2. popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    3,012
    J'aime reçus:
    1,618
    Salut

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    , la commande dos net share te liste les partages existant.
    il existe 3 classe permettant d'utiliser le dos sous windev dont
    celles-ci

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
    johndoe et suenodesign aiment ça.
  3. johndoe

    johndoe New Member

    Inscrit:
    Mar 24, 2018
    Messages:
    29
    J'aime reçus:
    6
    merci de ta réponse popoy mais je cherche quelque chose de direct et rapide car l'utilisateur est obligé d'attendre dessus , donc un api windows serait idéal , j'ai juste besoin de savoir si le dossier de l'exécutable est partagé au démarrage de celui-ci .
     
  4. popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    3,012
    J'aime reçus:
    1,618
    J'avais mal compris la question.

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    voilà la liste.
    Avec WDAPI, tu auras la réponse complète.
     
    johndoe apprécie ceci.
  5. johndoe

    johndoe New Member

    Inscrit:
    Mar 24, 2018
    Messages:
    29
    J'aime reçus:
    6
    j'ai trouver ceci sur netapi32 , un Code qui marche bien , bon il ne fait pas ce que je veux mais c'est un bon début de travail .

    Code (Text):
    chDomaine, chServeur est une chaîne    // Noms du domaine et du CPD (Contrôleur Principal du Domaine)

    pDomaine, pServeur est une chaîne UNICODE    // Les mêmes en UNICODE

    hInst est un entier    // Instance de l'API
    pInfos est un entier    // Pointeur sur les infos retournées par l'API
    res est un entier    // Résultat de l'appel à l'API
    EntreesLues, TotalEntrees, ResumeHandle    sont des entiers    // Pour NetUserEnum
    boolEncoreDesInfos est un booléen

    // Structure USER_INFO_10 (Il existe : USER_INFO_0,1 à 4,10,11,20 à 23,1003,1005 à 1014,1017,1018,1020,1023 à 1025,1051 à 1053
    USER_INFO_10 est une Structure
        p_name est un entier // Pointeur sur une chaine UNICODE : login
        p_comment est un entier // Pointeur sur une chaine UNICODE : commentaires
        p_usr_comment est un entier // Pointeur sur une chaine UNICODE : commentaires
        p_full_name est un entier    // Pointeur sur une chaine UNICODE : nom complet
    FIN
    InfoUtilisateur est une USER_INFO_10

    NiveauInformation est un entier =10    // Niveau d'informations de NetUserEnum, correspond à la structure USER_INFO_10
    nbInfos est un entier = 1    // Nombre d'infos à retourner, si on met plus, il faut récupérer un tableau de structure
    // Filtre de recherche pour NetUserEnum
    FILTER_TEMP_DUPLICATE_ACCOUNT est un entier = 1
    FILTER_NORMAL_ACCOUNT est un entier = 2
    FILTER_INTERDOMAIN_TRUST_ACCOUNT est un entier = 8
    FILTER_WORKSTATION_TRUST_ACCOUNT est un entier = 16
    FILTER_SERVER_TRUST_ACCOUNT est un entier = 32

    USER_INFO_CH est une Structure    // J'utilise une structure de chaine, on pourrait prendre autre chose
        ch_name est une chaîne
        ch_comment est une chaîne
        ch_usr_comment est une chaîne
        ch_full_name est une chaîne  
    FIN
    InfoUtilisateurCH est une USER_INFO_CH

    // Récupération du nom de domaine sur lequel est connecté le poste
    chDomaine = SansEspace(SysEnvironnement("USERDOMAIN")[[12 A ]])
    // Conversion en UNICODE
    pDomaine = AnsiVersUnicode(chDomaine,alphabetAnsi)

    // Chargement de l'API adéquate
    hInst = ChargeDLL("Netapi32.dll")
    SI hInst = 0 ALORS
        Erreur("Impossible de charger la DLL")
    SINON
        // Récupération du nom du CPD
        res = API("NetApi32.dll","NetGetDCName",Null,&pDomaine,&pInfos)
        // Récupération de l'info retournée par NetGetDCName en UNICODE
        chServeur = SansEspace(ChaîneRécupère(pInfos,crAdresseUNICODE))
        // Conversion en UNICODE
        pServeur = AnsiVersUnicode(chServeur,alphabetAnsi)
        // Libération de la mémoire réservée par NetGetDCName
        res = API("NetApi32.dll","NetApiBufferFree",pInfos)
       
        Info("Domaine : "+chDomaine+RC+"Serveur : "+chServeur)
       
        // Enumération des utilisateurs
        ResumeHandle = 0    // Pour récupérer la première info
        BOUCLE
            res = API("NetApi32.dll","NetUserEnum", pServeur, NiveauInformation, FILTER_NORMAL_ACCOUNT, &pInfos, nbInfos , &EntreesLues, &TotalEntrees, &ResumeHandle)
            boolEncoreDesInfos = ( TotalEntrees > 1 )
            // Récupération des informations, l'opérateur C -> n'existant pas sous windev, on utilise la fonction Transfert
            Transfert(&InfoUtilisateur,pInfos,16)    // On transfert le contenu de la mémoire réservée par NetUserEnum dans notre structure.
            // 16 c'est la taille de ma structure ( 4 entiers = 4 * 4 octets )
            // Les infos récupérées sont des chaines UNICODE, il convient donc de les convertir
            InfoUtilisateurCH:ch_name = ChaîneRécupère(InfoUtilisateur:p_name,crAdresseUNICODE)
            InfoUtilisateurCH:ch_comment = ChaîneRécupère(InfoUtilisateur:p_comment,crAdresseUNICODE)
            InfoUtilisateurCH:ch_usr_comment = ChaîneRécupère(InfoUtilisateur:p_usr_comment,crAdresseUNICODE)
            InfoUtilisateurCH:ch_full_name = ChaîneRécupère(InfoUtilisateur:p_full_name,crAdresseUNICODE)
           
            Info(InfoUtilisateurCH:ch_name+RC+InfoUtilisateurCH:ch_full_name+RC+InfoUtilisateurCH:ch_comment+RC+InfoUtilisateurCH:ch_usr_comment)
           
            // Libération de la mémoire réservée par NetUserEnum
            res = API("NetApi32.dll","NetApiBufferFree",pInfos)
            SI PAS boolEncoreDesInfos ALORS SORTIR
        FIN
        DéchargeDLL(hInst)
    FIN
     
    suenodesign et joker aiment ça.
  6. johndoe

    johndoe New Member

    Inscrit:
    Mar 24, 2018
    Messages:
    29
    J'aime reçus:
    6
    merci jollyjumper ,le problème est le temps de la procédure et les anti-virus qui risque de bloquer tout le biz pendant un bon moment ... un api c'est 1000 fois plus rapide à mon avis .
    mais c'est pas simple , je pense que c'est NetShareGetInfo , un peu complexe à faire fonctionné .
     
  7. johndoe

    johndoe New Member

    Inscrit:
    Mar 24, 2018
    Messages:
    29
    J'aime reçus:
    6
    merci mais je suis en 21 ...lol ...

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    , c'est sympa mais dur dur de le refaire en wlangage , j'ai même pas vu si c'était le bonne api
     
  8. FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    200
    J'aime reçus:
    375

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    A partir du code que tu as donné au-dessus et celui en C#,
    je t’ai fait un mixte pour avoir un exemple :
    Code (Text):
    SHARE_INFO_2 est une Structure
        shi2_netname est un entier
        shi2_type est un entier
        shi2_remark est un entier
        shi2_permissions est un entier
        shi2_max_uses est un entier
        shi2_current_uses est un entier
        shi2_path est un entier
        shi2_passwd est un entier
    FIN
    si2 est un SHARE_INFO_2

    sPath est une chaîne
    pNomShare est une chaîne UNICODE
    //pServeur est une chaîne UNICODE

    hInst est un entier    // Instance de l'API
    pInfos est un entier    // Pointeur sur les infos retournées par l'API
    res est un entier    // Résultat de l'appel à l'API

    // Chargement de l'API adéquate
    hInst = ChargeDLL("Netapi32.dll")
    SI hInst = 0 ALORS
        Erreur("Impossible de charger la DLL")
    SINON
        //pServeur = AnsiVersUnicode("\\remote_server", alphabetAnsi)
        pNomShare = AnsiVersUnicode("nom_partage", alphabetAnsi)
     
        // Récupération du nom du CPD
        //res = API("NetApi32.dll", "NetShareGetInfo", &pServeur, &pDomaine, 2, &pInfos)
        res = API("NetApi32.dll", "NetShareGetInfo", Null, &pNomShare, 2, &pInfos)

        SI res = 0 ALORS
            Transfert(&si2, pInfos, 8 * 4) // 8 entiers de 4 octets
            sPath = ChaîneRécupère(si2:shi2_path, crAdresseUNICODE)

            Info(sPath)

            // Libération de la mémoire réservée par NetGetDCName
            res = API("NetApi32.dll", "NetApiBufferFree", pInfos)
        FIN
        DéchargeDLL(hInst)
    FIN
    Il ne manque que la gestion du code retour en cas d’erreur.

    A+.
     
    johndoe, suenodesign et joker aiment ça.
  9. johndoe

    johndoe New Member

    Inscrit:
    Mar 24, 2018
    Messages:
    29
    J'aime reçus:
    6
    Bonjour,
    Merci

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    , effectivement ton code ne renvoie pas d'erreur mais ne renvoi pas un bon résultat , l'api me renvoi toujours 2310 ? si on change SI res = 0 , SI res > 0 , la sa plante
    j'ai testé avec "nom_partage" = c:\toto\ .... c:\toto\toto.exe ...\\partage\toto etc ...
    une petite idée ?
     
  10. FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    200
    J'aime reçus:
    375
    Salut johndoe,

    La fonction NetShareGetInfo demande le nom du partage et retourne ces informations.
    Par exemple, tu as partagé ton répertoire de jeux sur "E:", donc la demande est "Jeux", et le résultat serait "E:\jeux".

    Pour ton cas, ce serait la fonction NetShareEnum pour énumérer les partages :
    Code (Text):
    SHARE_INFO_2 est une Structure
        shi2_netname est un entier
        shi2_type est un entier
        shi2_remark est un entier
        shi2_permissions est un entier
        shi2_max_uses est un entier
        shi2_current_uses est un entier
        shi2_path est un entier
        shi2_passwd est un entier
    FIN

    ptabListe est un tableau dynamique
    nTailleMax est un entier = 368880 // MAX_PREFERRED_LENGTH
    nInfoLues est un entier
    nInfoTotales est un entier
    nHandleReprise est un entier = 0

    sNomShare est une chaîne
    sPath est une chaîne
    //pServeur est une chaîne UNICODE

    hInst est un entier    // Instance de l'API
    pInfos est un entier    // Pointeur sur les infos retournées par l'API
    res est un entier    // Résultat de l'appel à l'API

    // Chargement de l'API adéquate
    hInst = ChargeDLL("Netapi32.dll")
    SI hInst = 0 ALORS
        Erreur("Impossible de charger la DLL")
    SINON
        //pServeur = AnsiVersUnicode("\\remote_server", alphabetAnsi)
     
        // Récupération du nom du CPD
        //res = API("NetApi32.dll", "NetShareEnum", &pServeur, 2, &pInfos, nTailleMax, &nInfoLues, &nInfoTotales, &nHandleReprise)
        res = API("NetApi32.dll", "NetShareEnum", Null, 2, &pInfos, nTailleMax, &nInfoLues, &nInfoTotales, &nHandleReprise)

        SI res = 0 ALORS
            ptabListe = allouer un tableau dynamique nInfoLues SHARE_INFO_2
            Transfert(&ptabListe, pInfos, nInfoLues * 8 * 4)
            POUR nPos = 1 À nInfoLues
                sNomShare = ChaîneRécupère(ptabListe[nPos]:shi2_netname, crAdresseUNICODE)
                sPath = ChaîneRécupère(ptabListe[nPos]:shi2_path, crAdresseUNICODE)
           
                SI sNomShare <> EOT ET sNomShare <> "" ALORS
                    Info(sNomShare + " = " + sPath)
                FIN
            FIN

            libérer ptabListe
            // Libération de la mémoire réservée par NetShareEnum
            res = API("NetApi32.dll", "NetApiBufferFree", pInfos)
        FIN
        DéchargeDLL(hInst)
    FIN
    A+.
     
    #10 FreudWD, Jan 24, 2019
    Dernière édition: Jan 24, 2019
    joker apprécie ceci.
  11. johndoe

    johndoe New Member

    Inscrit:
    Mar 24, 2018
    Messages:
    29
    J'aime reçus:
    6
    bonsoir,
    joli freudWD .!! , j'avais effectivement vu un code de ce genre pour lister , mais j'ai peur que sur certaine machine cela prenne un temp de fou , surtout que je vais l'exécuter à chaque démarrage .
    La fonction NetShareGetInfo ne peut donc pas fonctionner avec le nom du répertoire comme "E:\jeux" ou d'un fichier pour savoir si il est partager ? aucune fonction de ce genre donc ?
    en tout cas merci pour ses deux codes au poil ...
     
  12. popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    3,012
    J'aime reçus:
    1,618
    Si c'est a chaque démarrage de session il est possible d'insérer un script dos .
    voir

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    En entreprise , c'est souvent connu des utilisateurs qui ont l'habitude d'attendre.
    Pourquoi as tu besoin de cette rapidité?
     
  13. johndoe

    johndoe New Member

    Inscrit:
    Mar 24, 2018
    Messages:
    29
    J'aime reçus:
    6
    j'interdis l'utilisation de mon logiciel en fichier partagé , il faut l'utiliser en client/serveur pour plusieurs postes , voila pourquoi .
     
  14. popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    3,012
    J'aime reçus:
    1,618
    Tu peut lire le nom d'ordinateur et enregistré l'information.
    Etant donné qu'il n'est pas possible d'avoir un même nom d'ordinateur sur le réseau , il ne sera pas possible d'avoir ton logiciel 2 fois sur le réseau.
    Il y a donc plus simple pour protéger ton application.
     
  15. johndoe

    johndoe New Member

    Inscrit:
    Mar 24, 2018
    Messages:
    29
    J'aime reçus:
    6
    il faut pouvoir le déplacer popoy
     

Partager cette page

Chargement...