|
|
|

| | | | | | | | |  |
 | 
 | 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.
|
|
 |
 | |  |
|
|