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

WinDev Discussion :

Copie de fichiers (non HF) dans le serveur HF depuis un poste client [WD18]


Sujet :

WinDev

  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut Copie de fichiers (non HF) dans le serveur HF depuis un poste client
    Bonjour!

    Décidément, quand ca ne va pas, ca ne vas pa

    Présentation de mon appli actuel :

    J'ai différents dossiers crées sur le serveur pour le stockage des fichiers numérisés.
    L'appli fonctionne très bien, le seul souci est que je dois partager ces dossiers afin que l'appli cliente puisse y écrire dans le cas d'un système multi postes.

    Il me semble avoir lu quelque part que l'on peut créer des dossiers/fichiers sur le serveur HF.

    J'ai donc essayé le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HChangeRep("*",".\MesFichiers")
    Apparement le dossier est crée dans le dossier de la base de données, mais que pour les fichiers HF ?

    Lorsque j'execute le code suivant, le dossier est crée dans le dossier de mon exe (program files)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bResCréation est un booléen = fRepCrée(".\MesFichiers")
    Merci d'avance...

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Je ne comprends pas très bien ton pb...

    Si tu veux que tes utilisateurs pointent sur un dossier partagé, il faut que tu le précises dans le hchangerep. Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HChangeRep("*","\\NomDuServeur\NomDuPartageHF")
    Je te conseille fortement d'utiliser un fichier ini (chargé dans le code du projet) de spécifier tes paramètres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [Dossiers]
    CheminFichiersHF=\\NomDuServeur\NomDuPartageHF
    ...
    et d'utiliser IniLit...
    L'intérêt est que dans tous les cas, tu vas pointer sur l'endroit que tu veux (mono-poste ou multi-poste)
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Bonjour Claude et merci pour la précision.

    Je crois que je n'ai pas été assez clair dans ma demande, je m'en excuse.

    En réalité, j'ai remarqué que l'on peut depuis un poste à distance créer un dossier dans le serveur HF>BDD>MonAppli>NouveauDossier pour les fichiers HF.
    Ma question est donc :
    Est - il également possible d'y ajouter des fichiers doc,xls,pdf,png,jpg,... toujours à distance.

    Du coup plus besoin de partage réseau pour l'application.

    Merci d'avance.

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut Nouvelle reformulation
    Bonjour à tous,

    Je reformule encore la question que j'ai peut-être mal posée!

    J'ai un pc nommé "serveur" (serveur HF/CS installé, service manta lancé, hébergeant dans son dossier "c:\serveurHF\BDD" une base "ARCHI")
    Bien entendu ce dossier "c:\serveurHF\BDD" n'est pas partagé sur le réseau?

    J'ai un autre pc nommé "Pc-01" possédant mon appli installé.

    Je possède un fichier pdf sur le Pc-01.

    Est-il possible de copier ce fichier dans le dossier "c:\serveurHF\BDD" du pc nommé serveur ?

    Merci d'avance pour votre patience

  5. #5
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut
    Bonjour

    Pour information, un serveur de base de données que ce fut-ce Oracle, MySQL, SQLServer ou HFSQL n'accepte que des fichiers de données dans leurs répertoires de données.
    C'est bien le principe.

    Maintenant vous pouvez envoyer des fichiers dans le répertoire de travail des procédures stockées mais cela ne sera utile que pour la durée desdites procédures sur le serveur.

    Je vous retourne la question : POURQUOI envoyer un PDF dans les données ?

    Selon votre réponse, soit vous mettez en place un partage au niveau de la couche réseau (VPN si poste distant, partage si réseau local), Soit vous prévoyez, dans votre programme le transport de fichier au sein de mémo binaires (rubriques de fichier). C'est ainsi que votre PDF sera intégré aux données (encapsulé dans un fichier) et manipulable par les applications qui accèdent à la base.

    Notez que ce fonctionnement est gourmand en ressource et que le stockage du chemin dans un partage réseau/serveur ftp est souvent plus intéressant.

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    +1 R&B stockage en mémo binaire ou chemin d'accès au fichier....
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  7. #7
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Salut, et merci pour la réponse.

    Ces fichiers images et pdf sont des fichiers scannées d'archives.
    Il est évident que ce serait lourd de les intégrer dans les fichiers de données.

    Actuellement l'application fonctionne très bien avec un partage réseau local.
    Je souhaitais rendre l'installation de l'appli vraiment très simple afin qu'elle soit facilement accessible à des utilisateurs non expérimentés.

    Toujours dans ce but, j'ai intégré dans l'installation de l'appli, l'installation et le lancement du serveur HF.
    Un assistant guide l'utilisateur lors de la "première" mise en route pour la configuration (PC serveur ou client, Nom base de données etc...)

    Mon souci est dans le cas multi utilisateur, je suis obligé de me déplacer chez le client pour :

    - Créer un lecteur réseau sur tous les postes utilisant l'appli.
    - Paramétrer dans windows les droits d'accès sur ce lecteur afin que l'appli puisse y créer des fichiers, mais pas les supprimer (sinon on peut facilement depuis l'explorateur windows saboter en supprimant des fichiers : cela m'est arrivé!)

    Il n'y a également plus de confidentialité puisque les PC sur le réseau peuvent explorer ce lecteur réseau et ouvrir les fichiers.

    Voilà la raison pour laquelle je pensais utiliser le serveur HF pour y stocker ces fichiers.

    Espérant que vous avez une astuce pour solutionner mon problème, dans le cas échéant je clôture le sujet!

    Merci d'avance.

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Bonjour,

    J'ai des problématiques similaires... créer des partages, déployer un serveur HF, gérer des droits sur les dossiers (par contre moi je la fais bourrin : écriture/lecture pour tout le monde)

    J'ai donc intégré la création du partage (partage caché afin de limiter les risques de suppression...) et la gestion des droits dans le programme d'installation.

    Enfin, je stocke en BDD le chemin UNC afin de m'affranchir de la contrainte "même lecteur pour les postes clients".
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    +1 Pour le partage caché ($) , je n'y avais pas pensé un seul instant

    Je vais donc tenter de mettre cela en place.
    Quelques fonctions de partage WD à proposer pour m'aiguiller?

    En attendant je clôture le sujet!

    Merci à tous, especially Michel

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    En WD je n'ai pas trouvé de fonction de gestion des partages... par contre... j'ai fait un composant qui manipule des API... tu le veux ?
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  11. #11
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Salut la SOURIS!

    WITH PLEASURE

    Et merci d'avance...

    J'ai retrouvé dans la LST61 un composant qui manipule les api.
    Ne serait ce pas toi qui l'a filé à PCSoft?

  12. #12
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Donc...

    Voici les constantes et structures
    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
     
    CONSTANTE
    	//////////////////////////////////////CONSTANTE WINDOWS
    	//partage d'un repertoire
    	STYPE_DISKTREE = 0x0
    	STYPE_SPECIAL  = 0x80000000
     
    	//Type d'objet
    	SE_FILE_OBJECT  = 0x01
     
    	//Type de droit
    	OWNER_SECURITY_INFORMATION = 0x00000001
    	GROUP_SECURITY_INFORMATION = 0x00000002
    	DACL_SECURITY_INFORMATION = 0x00000004
    	SACL_SECURITY_INFORMATION = 0x00000008
    	UNPROTECTED_SACL_SECURITY_INFORMATION = 0x10000000
    	UNPROTECTED_DACL_SECURITY_INFORMATION = 0x20000000
    	PROTECTED_SACL_SECURITY_INFORMATION = 0x40000000
     
    	//permissions
    	ACCESS_READ  = 0x1
    	ACCESS_WRITE = 0x2
    	ACCESS_CREATE= 0x4
    	ACCESS_EXEC  = 0x8
    	ACCESS_DELETE= 0x10
    	ACCESS_ATRIB = 0x20
    	ACCESS_PERM  = 0x40
     
    	//DROIT PARTAGE ET NTFS
    	GENERIC_ALL = 0x10000000
    	GENERIC_EXECUTE = 0x20000000
    	GENERIC_READ = 0x80000000
    	GENERIC_WRITE = 0x40000000
     
     
    	//DROIT NTFS
    	SET_ACCESS = 0X2
     
     
    	CONTAINER_INHERIT_ACE = 0x2
    	OBJECT_INHERIT_ACE = 0x1
     
    	///GET SID
    	SECURITY_NT_AUTHORITY = 0x5
    	SECURITY_BUILTIN_DOMAIN_RID = 0x20
    	DOMAIN_ALIAS_RID_ADMINS = 0x220
     
     
    	//RETOUR
    	ERROR_SUCCESS = 0x0
     
    	//////////////////////////////////CONSTANTE PERSO
     
     
     
    FIN
     
    SHARE_INFO_2 est une structure
    	shi2_netname est un entier système
    	shi2_type est un entier système
    	shi2_remark est un entier système
    	shi2_permissions est un entier système
    	shi2_max_uses est un entier système
    	shi2_current_uses est un entier système
    	shi2_path est un entier système
    	shi2_passwd est un entier système
    FIN
     
    TRUSTEE est une structure
    	pMultipleTrustee is entier système
    	MultipleTrusteeOperation is entier système
    	TrusteeForm is entier système
    	TrusteeType is entier système
    	ptstrName is UNICODE string
    END
     
    EXPLICIT_ACCESS est une structure
    	grfAccessPermissions is entier système
    	grfAccessMode is entier système
    	grfInheritance  is entier système
    	pTRUSTEE is TRUSTEE
    END
     
     
    ACL est un structure
    	AclRevision est entier sans signe sur 1 octet
    	Sbz1 est entier sans signe sur 1 octet
    	AclSize est entier sans signe sur 2 octets
    	AceCount est entier sans signe sur 2 octets
    	Sbz2 est entier sans signe sur 2 octets
    FIN
     
    Sid est une structure
    	Revision est un caractère //Type C : BYTE
    	SubAuthorityCount est un caractère //Type C : BYTE
    	IdentifierAuthority est un SID_IDENTIFIER_AUTHORITY //SID_IDENTIFIER_AUTHORITY est une autre structure
    	SubAuthority est un entier système //Type [size_is(SubAuthorityCount)] DWORD non retrouvé (entier est le type le plus fréquent, mais à VERIFIER)
    	//SubAuthority est un entier //Type C : DWORD
    FIN
     
    SID_IDENTIFIER_AUTHORITY est une structure
    	Value est un tableau fixe de 6 caractères //Type C : BYTE
    FIN
     
     
    vgp_Log est un entier
     
    vgp_SIDEveryone est une chaîne = "S-1-1-0"
    vgp_UtilisateurToutLeMonde est une chaîne
    La création :

    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
     
    PROCEDURE CreationPartage(pNomPartage est une chaîne ANSI,pDescriptionPartage est une chaîne ANSI,pCheminPartage  est une chaîne ANSI,pPassword,pHotePartage  est une chaîne ANSI,pTypePartage)
     
    si2 est un SHARE_INFO_2
     
    //Fix pour Windows 8.1 qui ne supporte pas le slash final d'un path
    WHILE Droite(pCheminPartage,1)="\"
    	pCheminPartage=Gauche(pCheminPartage,Taille(pCheminPartage)-1)
    END
     
     
    Nom_Partage est une chaîne UNICODE = AnsiVersUnicode(pNomPartage)   //nom du partage
    Description_Partage  est une chaîne UNICODE = AnsiVersUnicode(pDescriptionPartage) //Description du partage
    Chemin_Partage  est une chaîne UNICODE = AnsiVersUnicode(pCheminPartage) //Chemin du partage
    Password_Partage est une chaîne UNICODE=pPassword // Mot de passe du partage
    ServeurName_Partage  est une chaîne UNICODE = AnsiVersUnicode(pHotePartage) //Nom du serveur
    resultat est un entier sans signe sur 4 octet
     
    success  est un entier
    si2:shi2_netname=&Nom_Partage // nom du partage
    si2:shi2_type=0  //Partager koi ? ici un repertoire
    si2:shi2_remark=&Description_Partage //&Description_Partage // commentaire
    si2:shi2_permissions=ACCESS_WRITE  //acces en lecture
    si2:shi2_max_uses=-1 //illimlité
    //si2:shi2_current_uses=
    si2:shi2_path=&Chemin_Partage
    si2:shi2_passwd=&Password_Partage
     
    success=API("netapi32.dll","NetShareAdd",&ServeurName_Partage,2,&si2,Null)
     
    MessageErreur est une chaîne
    SELON success
    	CASE 0
    		AjouteLog(vgp_Log,"Le partage "+Nom_Partage+" a été créé.",_LOG_NORMAL)
    		IF FixeDroits(pCheminPartage) THEN
    			RENVOYER True
    		END
    	CASE 5
    		MessageErreur="Vous n'avez pas accès à la fonction demandée." +RC+"Nom partage : "+Nom_Partage+RC+"Chemin partage : "+Chemin_Partage+RC+"Host : "+ServeurName_Partage
    	CASE 50
    		MessageErreur="Le partage n'est pas supporté."+RC+"Nom partage : "+Nom_Partage+RC+"Chemin partage : "+Chemin_Partage+RC+"Host : "+ServeurName_Partage
    	CASE 53
    		MessageErreur="Le chemin du partage n'est pas correct."+RC+"Nom partage : "+Nom_Partage+RC+"Chemin partage : "+Chemin_Partage+RC+"Host : "+ServeurName_Partage
    	CASE 87
    		MessageErreur="Un paramètre est invalide."+RC+"Nom partage : "+Nom_Partage+RC+"Chemin partage : "+Chemin_Partage+RC+"Host : "+ServeurName_Partage
    	CASE 123
    		MessageErreur="Le nom n'est pas valide."+RC+"Nom partage : "+Nom_Partage+RC+"Chemin partage : "+Chemin_Partage+RC+"Host : "+ServeurName_Partage
    	CASE 2118
    		AjouteLog(vgp_Log,"Le partage "+Nom_Partage+" existe déjà.",_LOG_NORMAL)
    		success = API("netapi32.dll","NetShareDel",&ServeurName_Partage,&Nom_Partage,0)
    		IF success = 0 THEN
    			AjouteLog(vgp_Log,"Le partage "+Nom_Partage+" a été supprimé.",_LOG_NORMAL)
    			RENVOYER CreationPartage(pNomPartage,pDescriptionPartage,pCheminPartage ,pPassword,pHotePartage,pTypePartage)
    		ELSE
    			MessageErreur="Impossible de supprimer le partage "+pNomPartage+" existant."
    		END
     
     
    	AUTRE CAS
    		MessageErreur="Erreur inconnue lors de la création du partage ("+success+")"+RC+"Nom partage : "+Nom_Partage+RC+"Chemin partage : "+Chemin_Partage+RC+"Host : "+ServeurName_Partage
    FIN
     
    AjouteLog(vgp_Log,MessageErreur,_LOG_NORMAL)
    Erreur(MessageErreur)
    RENVOYER False

    Fixer les droits
    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
     
    PROCEDURE FixeDroits(nomFichier est chaîne, utilisateur est chaîne = GetUserName(vgp_SIDEveryone), droits est entier = GENERIC_ALL)
     
    Myresult est entier système
    pSecDesc est entier système
    ea est EXPLICIT_ACCESS
    pNewDACL est entier système
    pOldDACL est entier  système
     
    bResult est un booléen = False
     
     
    NewACL est un ACL
    OldACL est un ACL
    SecDesc est un ACL
     
    pNewDACL = &NewACL
    pOldDACL = &OldACL
    pSecDesc = &SecDesc
     
    fs est objet Automation dynamique =  allouer un objet Automation "Scripting.FileSystemObject"
    d est objet Automation dynamique = fs>>GetDrive(fs>>GetFolder(nomFichier)>>Drive)
    sTypeSystem est chaîne
     
     
    //info(nomfichier,utilisateur, droits)
     
    sTypeSystem = d>>FileSystem
     
    SI sTypeSystem = "NTFS" ALORS
    	Myresult = API("advapi32.dll","GetNamedSecurityInfoA",nomFichier, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, 0x0, 0x0, pOldDACL, 0x0, pSecDesc)
     
    	SI Myresult = ERROR_SUCCESS ALORS
    		ea.pTRUSTEE.ptstrName = &utilisateur
    		API("advapi32.dll","BuildExplicitAccessWithNameA", &ea, &utilisateur, droits, SET_ACCESS, OUBinaire(CONTAINER_INHERIT_ACE,OBJECT_INHERIT_ACE))
     
    		Myresult = API("advapi32.dll","SetEntriesInAclA",1, &ea, Null, &pNewDACL)
    		SI Myresult = ERROR_SUCCESS ALORS
     
    			Myresult = API("advapi32.dll","SetNamedSecurityInfoA",nomFichier, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, 0x0, 0x0, pNewDACL, 0x0)
    			SI Myresult = ERROR_SUCCESS ALORS
    				AjouteLog(vgp_Log,"Modification des droits sur le répertoire "+nomFichier+" pour "+utilisateur,_LOG_OK,False, True)
    				bResult = True
    			SINON
    				AjouteLog(vgp_Log,"SetNamedSecurityInfo a échoué ! error code : " + Myresult+" (Compte AD : "+utilisateur+" / dossier : "+nomFichier+")" ,_LOG_NOK, False, True)
    			FIN 
     
    			VariableRAZ(NewACL)
     
    		SINON
    			AjouteLog(vgp_Log,"SetEntriesInAcl a échoué ! error code : " + Myresult+" (Compte AD : "+utilisateur+" / dossier : "+nomFichier+")" ,_LOG_NOK,False, True)
    		FIN 
     
    		VariableRAZ( SecDesc)
    	SINON
    		AjouteLog(vgp_Log,"GetNamedSecurityInfo a échoué ! error code : "+Myresult+" (Compte AD : "+utilisateur+" / dossier : "+nomFichier+")" ,_LOG_NOK, False, True)
    	FIN
    ELSE
    	 AjouteLog(vgp_Log,"Le répertoire "+nomFichier+" n'est pas sur un disque NTFS." ,_LOG_NOK, False, True)
    FIN 
     
    libérer fs
    libérer d
     
    RENVOYER bResult
    Récupérer un nom d'utilisateur depuis un SID :
    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
     
    PROCEDURE GetUserName(sid est une chaîne = vgp_SIDEveryone, TypeTest est un entier=2)
     
    SidTypeUser est un entier = 1
    SidTypeGroup est un entier = 2
    SidTypeDomain est un entier = 3
    SidTypeAlias est un entier= 4
    SidTypeWellKnownGroup est un entier = 5
    SidTypeDeletedAccount est un entier = 6
    SidTypeInvalid est un entier = 7
    SidTypeUnknown est un entier = 8
    SidTypeComputer est un entier = 9
    SidTypeLabel est un entier = 10
     
    auth est un SID_IDENTIFIER_AUTHORITY
    auth:Value[1] = 0
    auth:Value[2] = 0
    auth:Value[3] = 0
    auth:Value[4] = 0
    auth:Value[5] = 0
    auth:Value[6] = 5
     
    iSID est un entier
    cbName est un entier // Type C :LPDWORD
    cbReferencedDomainName est un entier // Type C :LPDWORD
    iSID_Type est un entier
    iRetour est un entier
    strTypeSID est une chaîne
     
    Name2 est Buffer sur 256
    ReferencedDomainName2 est un Buffer sur 256
    strSID est une chaîne
     
    SELON TypeTest
    	CAS 1:
    		iRetour = API("ADVAPI32.DLL","AllocateAndInitializeSid", &auth, 2, 
    		SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, 
    		&iSID)
    	CAS 2:
    		strSID = sid+Caract(0)
    		iRetour = API("ADVAPI32.dll","ConvertStringSidToSidA",&strSID,&iSID)
    	AUTRE CAS
     
    FIN
    SI iRetour <> 0 ALORS
    	cbName = 256
    	cbReferencedDomainName = 256
    	QUAND EXCEPTION DANS
    		SI API("ADVAPI32.DLL","LookupAccountSidA", Null, iSID, &Name2, &cbName, 
    			&ReferencedDomainName2, &cbReferencedDomainName, &iSID_Type) <> 0 ALORS
    			SELON iSID_Type
    				CAS SidTypeUser
    					strTypeSID = "user"
    				CAS SidTypeGroup
    					strTypeSID = "group"
    				CAS SidTypeDomain
    					strTypeSID = "domain"
    				CAS SidTypeAlias
    					strTypeSID = "alias"
    				CAS SidTypeWellKnownGroup
    					strTypeSID = "WellKnownGroup"
    				CAS SidTypeDeletedAccount
    					strTypeSID = "DeletedAccount"
    				CAS SidTypeInvalid
    					strTypeSID = "Invalid"
    				CAS SidTypeUnknown
    					strTypeSID = "Unknown"
    				CAS SidTypeComputer
    					strTypeSID = "Computer"
    				CAS SidTypeLabel
    					strTypeSID = "Label"
    				AUTRE CAS
    					strTypeSID = "Autre"
    			FIN
    		SINON
    			Erreur(ErreurInfo())
    		FIN
    	FAIRE
    		Info(ExceptionInfo(errComplet))
    		ExceptionActive()
    	FIN
    FIN
     
    SI API("Advapi32.dll","FreeSid",iSID) <> Null ALORS
    	Erreur(ErreurInfo())
    FIN
     
    RENVOYER Name2
    Il s'agit bien sûr d'une "compilation/adaptation" de source que j'ai trouvé à droite à gauche...
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  13. #13
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Gracias,Merci,Danke,thanks etc...

    pour cette contribution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. copie d'un fichier non txt dans String pour envoie rs232
    Par albine dans le forum C++Builder
    Réponses: 12
    Dernier message: 09/05/2012, 14h27
  2. Comment inclure un fichier non vital dans l'installeur?
    Par Sunsawe dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 11/10/2007, 14h46
  3. lien vers fichier non placer dans répertoire: 3w
    Par cobra85 dans le forum Apache
    Réponses: 1
    Dernier message: 22/08/2007, 09h25
  4. spring copie des fichiers de propriétés dans web-inf
    Par austin P. dans le forum Maven
    Réponses: 4
    Dernier message: 11/07/2007, 14h40
  5. fichier non trouvé dans apache?
    Par darkbob dans le forum Web
    Réponses: 1
    Dernier message: 18/07/2006, 03h03

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