Code source
Code source

  Présentation
  Unités exemple gratuites
  Unités commercialisées
  Conditions d'utilisation
  Comment acheter
  Vendez vos codes
Unités commercialisées

  LRJ_DosDevice
  LRJ_FileMapped
  LRJ_ModifDateTime
  LRJ_ShellUtils
  LRJ_TokenAPI
  LRJ_WinACL
  LRJ_WinBrowseDialog
  LRJ_WinCreateProcess
  LRJ_WinDesktop
  LRJ_WinDirectories
  LRJ_WinDocRecents
  LRJ_WinDrives
  LRJ_WinFavorisWeb
  LRJ_WinFiles
  LRJ_WinIconNotifArea
  LRJ_WinInternetShortcut
  LRJ_WinMenuFolder
  LRJ_WinModule
  LRJ_WinNetApi
  LRJ_WinNetLocalGroups
  LRJ_WinNetUsers
  LRJ_WinPrivileges
  LRJ_WinProcess
  LRJ_WinRecycleBin
  LRJ_WinRegion
  LRJ_WinRegAppPath
  LRJ_WinShellLink
  LRJ_WinShellUI
  LRJ_WinSID
  LRJ_WinStation
  LRJ_WinTokenGroups
  LRJ_WinTrackChangeDir
  LRJ_WinVolumes
  LRJ_WinWorkingSet

   Accueil | GlobalDesk | Code source Delphi | Développements | Votre compte | Contact   

Code source : unité LRJ_WinNetLocalGroups




      
Description : cette unité contient les objets suivants :
. LRJ_TLocalGroupAccountList extrait la liste des groupes locaux.
. LRJ_TLocalGroupMembersList extrait la liste des membres d'un groupe local.
. LRJ_TLocalGroupMembersDomainAndName ajoute de nouveaux membres, supprime des membres ou remplace les membres actuels d'un groupe local par une liste de nouveaux membres. Les membres à additionner, supprimer ou qui remplacent les anciens membres sont identifiés par leur nom complet de domaine (domain/name ou nom seul sur une machine locale).
. LRJ_TLocalGroupMembersSID ajoute de nouveaux membres, supprime des membres ou remplace les membres actuels d'un groupe local par une liste de nouveaux membres. Les membres à additionner, supprimer ou qui remplacent les anciens membres sont identifiés par leur SID manipulé sous forme de string.

L'unité est livrée avec une application de démonstration ( voir description plus loin ) qui utilise toutes les fonctionnalités de la NetLocalGroup API. Les codes de l'application sont livrés avec l'unité pour illustrer comment utiliser les objets de cette unité. L'application de démonstration utilise les unités LRJ_WindowsPlus, LRJ_GridsPlus, LRJ_WinNetApi, LRJ_WinNetUsers et LRJ_WinSID non livrées avec l'application.

L'unité LRJ_WinNetLocalGroups met en oeuvre les fonctions de Windows suivantes :
             NetLocalGroupAdd
NetLocalGroupAddMembers
NetLocalGroupDel
NetLocalGroupDelMembers
NetLocalGroupEnum
NetLocalGroupGetMembers
NetLocalGroupGetInfo
NetLocalGroupSetInfo
NetLocalGroupSetMembers

Déclarations publiques de l'unité  I  Télécharger l'application de démonstration  I  Exemples d'utilisations

Utilise les unités : Windows, Classes, SysUtils, LRJ_WinNetApi, LRJ_ClassesPlus et LRJ_WinSID.

Version : 1.5 du 16.05.2009
Auteur : Laurent Hède
Copyright : LorenJo

Nombre de lignes : 609

Réalisée sous : Delphi 6

Systèmes compatibles : NT4, 2000, XP, Vista, serveurs

Prix : 139.00 € H.T.


Déclarations publiques de l'unité :

unit LRJ_WinNetLocalGroups;

interface
                  uses
                  Windows,
                  Classes,
                  SysUtils,
                  LRJ_WinNetApi,
                  LRJ_ClassesPlus,
                  LRJ_WinSID;

type

   .......

    //Extrait une liste des groupes locaux
    //------------OBJET----------------------------
LRJ_TLocalGroupAccountList = class(LRJ_TNetAPIBase)
   .......
   function Load: NET_API_STATUS; // Charge la liste
   function Count: integer;  // nombre de groupes chargés    function GetGroupAccount(const AIndex: integer): pointer; // LRJ_PLOCALGROUP_INFO_0 ou LRJ_PLOCALGROUP_INFO_1 selon level
   function GetName(const AIndex: integer): string; //Nom des groupes
   function IndexOf(const AGroupName: string): integer;
   property Level: LRJ_TLocalGroupAccountListLevel read MOLevel write MOLevel;
   end;//-----------FIN--------------------------

   .......
   
   // extrait la liste des local group members
    //------------OBJET----------------------------
LRJ_TLocalGroupMembersList = class(LRJ_TNetAPIBase)
   .......
   function Load: NET_API_STATUS; // Extrait la liste des membres du groupe
   function Count: integer;  // Nombre de membres extraits
   function GetGroupMembersIndex(const AIndex: integer): pointer; // LRJ_PLOCALGROUP_MEMBERS_INFO_0 à LRJ_PLOCALGROUP_MEMBERS_INFO_3
                                                              // selon level
   function IndexOfMemberName(const AMemberNameOrDomainName: string): integer;
   function IndexOfSID(const ASID: string): integer; overload;
   function IndexOfSID(const ASID: PSID): integer; overload;
   property LocalGroupName: string read MOLocalGroupName write MOLocalGroupName;
   property Level: LRJ_TLocalGroupMembersListLevel read  MOLevel write MOLevel;
   end;//-----------FIN--------------------------


   // Manipule des local group members selon le domaine/nom des members
    //------------OBJET----------------------------
LRJ_TLocalGroupMembersDomainAndName = class(LRJ_TNetAPIBase)
   .......
   procedure AddListStringSIDMemberToInternalList(const ADomainAndName: string); // charge la liste interne
   procedure AddListDomainAndNameMemberToInternalList(const AList: TStrings);  // charge la liste interne
   function AddListMembersToGroup: NET_API_STATUS; // additionne les membres de la liste interne au groupe
   function DeleteListMembersFromGroup: NET_API_STATUS; // supprime les membres de la liste interne du groupe
   function SetListMembersToGroup: NET_API_STATUS; // remplace les membres du groupe par les membres de la liste interne
   property LocalGroupName: string read  MOLocalGroupName write MOLocalGroupName;
   end;//-----------FIN--------------------------


   // Manipule des local group members selon le PSID des members
    //------------OBJET----------------------------
LRJ_TLocalGroupMembersSID = class(LRJ_TNetAPIBase)
   .......
   procedure AddStringSIDMemberToInternalList(const AStringSID: string); // charge la liste interne
   procedure AddListStringSIDMemberToInternalList(const AList: TStrings); // charge la liste interne
   function AddListMembersToGroup: NET_API_STATUS; // additionne les membres de la liste interne au groupe
   function DeleteListMembersFromGroup: NET_API_STATUS; // supprime les membres de la liste interne du groupe
   function SetListMembersToGroup: NET_API_STATUS; // remplace les membres du groupe par les membres de la liste interne
   property LocalGroupName: string read  MOLocalGroupName write MOLocalGroupName;
   end;//-----------FIN--------------------------



Application de démonstration

L'onglet "Enum" permet d'énumérer les groupes locaux d'un PC sous Windows. Il représente les possibilités offertes par la fonction NetLocalGroupEnum de la NetLocalGroup API.
L'onglet "GetMembers" permet de charger les groupes locaux puis de charger les membres de chaque groupe. Il faut d'abord charger la liste des groupes, puis en sélectionner un en cliquant sur la ligne du groupe dans la liste, puis cliquer sur "Charger liste members" pour charger la seconde liste des membres du groupe. L'étendue des informations extraites dépend du choix sélectionné dans le comboBox "Level". Cet onglet représente les possibilités de la fonction NetLocalGroupGetMembers de la NetLocalGroup API.
L'onglet "Add" permet de créer un nouveau groupe. Il faut saisir un nom, éventuellement un commentaire concernant le groupe puis cliquer sur "Créer nouveau groupe" pour créer le groupe. Cliquer sur "Charger liste" ensuite pour recharger la liste des groupes et vérifier si le nouveau groupe est bien créé. Cet onglet représente les possibilités de la fonction NetLocalGroupAdd de la NetLocalGroup API.
L'onglet "Delete" permet de détruire un groupe existant. Il faut charger la liste des groupes en cliquant sur "Charger liste" puis sélectionner un groupe en cliquant sur sa ligne dans la liste puis en cliquant sur "Valide groupe select" puis cliquer sur "Détruire groupe". Attention à ne pas détruire un groupe standard car possibilités de conséquences désastreuses. Cet onglet représente les possibilités de la fonction NetLocalGroupDel de la NetLocalGroup API.
L'onglet "NewName" permet de changer le nom d'un groupe. Il faut charger la liste des groupes en cliquant sur "Charger liste groupe", puis sélectionner le groupe en cliquant sur sa ligne dans la liste, puis cliquer sur "Valide Group select" pour valider le choix du groupe à renommer puis saisir un nouveau nom dans le champ "Nouveau nom" et enfin cliquer sur "Changer le nom" pour modifier le nom du groupe. Attention aux conséquences potentiellement désastreuses d'une modification d'un nom de groupe standard. Cet onglet représente les possibilités de la fonction NetLocalGroupSetInfo de la NetLocalGroup API.
L'onglet "NewComment" permet de modifier le commentaire associé à un groupe. Il faut charger la liste des groupes en cliquant sur "Charger liste groupe" puis sélectionner un groupe en cliquant sur sa ligne dans la grille, puis valider le groupe sélectionné en cliquant sur "Valide comment select" puis saisir un nouveau commentaire puis cliquer sur "Modifie le commentaire". A priori, modifier le commentaire associé à un groupe existant n'a aucune incidence sur le fonctionnement du système. Néanmoins, ne modifier le commentaire d'un groupe standard que par nécessité. Sinon, vous pouvez modifier le commentaire d'un groupe en test sans problème. Cet onglet représente les possibilités de la fonction NetLocalGroupSetInfo de la NetLocalGroup API.
L'onglet "GetInfo" permet de charger le commentaire associé à un groupe. Il faut charger la liste des groupes en cliquant sur "Charger liste groupe", puis sélectionner le groupe en cliquant sur sa ligne dans la liste, puis charger le commentaire associé en cliquant sur "Charge commentaire groupe select". Cet onglet représente les possibilités de la fonction NetLocalGroupGetInfo de la NetLocalGroup API.
L'onglet "Add-Delete-Set-Members" permet d'ajouter, de détruire ou de remplacer des membres dans un groupe. Il faut charger la liste des groupes en cliquant sur "Charge liste", puis sélectionner le groupe en cliquant sur sa ligne dans la liste puis en cliquant sur "Valide group select", puis charger la liste des utilisateurs de la machine en cliquant sur "Charger liste user" puis charger la liste des utilisateurs qui vont être ajoutés, retirés ou qui vont remplacer les utilisateurs existants du groupe et cliquant sur ">>" pour entrer un groupe sélectionné de la liste "Liste user dispo" dans la liste "Liste user to add" ou cliquer sur "<<" pour retirer de la liste "Liste user to add" et remettre dans la liste "Liste user dispo" des utilisateurs. Enfin, lorsque la liste "Liste user to add" correspond aux utilisateurs que l'on souhaite ajouter ou retirer au groupe ou que l'on souhaite mettre à la place des utilisateurs présents, cliquer sur "Add members" pour ajouter ces utilisateurs au groupe, cliquer sur "Delete members" pour retirer ces utilisateurs du groupe ou cliquer sur "Set members" pour remplacer les utilisateurs actuels par ceux de la liste. Le choix "Type add-delete-set" permet de choisir si l'ajout, le retrait ou le remplacement va être réalisé par le domaine/nom ou par les SID des utilisateurs, ce qui revient au même mais utilise les 2 possibilités de l'API. Cet onglet représente les possibilités des fonctions NetLocalGroupAddMembers, NetLocalGroupDelMembers et NetLocalGroupSetMembers de la NetLocalGroup API.


Exemples d'utilisations

Charger la liste des groupes locaux dans ListBox1
var
  zListGroup: LRJ_TLocalGroupAccountList;
  i: integer;
begin
ListBox1.Items.Clear;
zListGroup := LRJ_TLocalGroupAccountList.Create;
zListGroup.ServeurName := ''; // machine locale
zListGroup.Level := 0;
if zListGroup.Load = 0 then
 for i:=0 to zListGroup.count-1 do
  begin
  ListBox1.Items.Add(zListGroup.GetName(i));
  end;
zListGroup.Free;
end;

Créer un nouveau groupe local sur une machine
begin
if LRJ_NetLocalGroupAdd('', editNomNouveauGroupe.text, editCommentaireNouveauGroupe.text,
                                                    nil) <> 0 then
  begin
  //problème
  end;
end;

Rendre une liste d'utilisateurs dont le nom se situe dans ListBox1 membre d'un groupe dont le nom se situe dans editNomGroupe sur une machine locale
var
  i: integer;
  zGroupMemberDomName: LRJ_TLocalGroupMembersDomainAndName;
begin
zGroupMemberDomName := LRJ_TLocalGroupMembersDomainAndName.Create;
zGroupMemberDomName.LocalGroupName := editNomGroupe.Text;
for i:=0 to ListBox1.Items.Count-1 do
  begin
  zGroupMemberDomName.AddDomainAndNameMemberToInternalList(ListBox1.Items[i]);
  end;
if zGroupMemberDomName.AddListMembersToGroup <> 0 then
  begin
  //problème
  end;
zGroupMemberDomName.Free;
end;

Vous n'avez pas trouvé d'exemple répondant à votre problématique ?
Cliquez sur ce lien.


 Accueil | GlobalDesk | Code source Delphi | Développements | Votre compte | Contact 
Copyright © LorenJo 2000-2009    Notice légale