Delphi - Mappa megosztása az ADSI segítségével

forráskód letöltése
Ebben a példában azt vizsgáljuk, hogy hogyan oszthatjuk meg számítógépünk egy mappáját, a hálózat többi számítógépe számára. A megosztást az Active Directory Services Interface (ADSI) segítségével végezzük el.
Használatához importálnunk kell az interfészt amely segítségével az objektumokat elérhetjük. A Delphi-ben válasszuk a Project – Import Type Library menüpontot. Kattintsunk az Add feliratú gombra. A megjelenő Open Type Library ablakban állítsuk be a Windows System32 könyvtárát, ahol válasszuk ki az „activeds.tlb” állományt.
Visszatérve az Import Type Library ablakba, kattintsunk a Create Unit feliratú gombra. Ezzel elkészül az ActiveDs_TLB unit, amely tartalmazza az interfész osztályokat.
Programunk uses listájában vegyük fel a hivatkozásokat az ActiveX, az ActiveDs_TLB, valamint a ComObj unitokra. Ezek használatára a későbbiekben szükségünk lesz.
Létrehozzuk a GetObject függvényt, amely segítségével szabályos ADSI azonosítók megadásával lekérdezhetjük az objektumokat.
function GetObject(const Name: String): IDispatch;
A függvény Name paraméterében az ADSI által használt objektum elérési módot kell használnunk. Pl.: számítógép objektum elérése esetén: 'WinNT://számítógép_név,computer'.
A lekérdezést az ActiveX unit függvényei segítségével végezzük el.
A CreateBindCtx függvénnyel inicializálunk egy új kapcsolatot.
OleCheck(CreateBindCtx(0,BindContext));
A MkParseDisplayName függvényt felhasználva, a megadott név alapján létrejön egy IMoniker típusú interfész.
OleCheck(MkParseDisplayName(BindContext,PWideChar(WideString(Name)),Eaten,Moniker));
A Moniker interfészt az IMoniker osztály BindToObject metódusával konvertálhatjuk át objektummá.
OleCheck(Moniker.BindToObject(BindContext,Nil,IDispatch,Dispatch));
A létrejövő objektumot a Dispatch változóban kapjuk vissza.
A megosztásokat tartalmazó konténer osztályt az alábbi módon érhetjük el, felhasználva a GetObject függvényt.
Comp:=GetObject('WinNT://'+Edit1.Text+'/lanmanserver') as IADsContainer;
A függvénynek megadott paraméterben a WinNT:// után saját gépünk nevét kell megadnunk.
Egy új megosztás létrehozásához a IADsFileShare osztályt kell használnunk, amelyet az IADsContainer osztály Create metódusával hozhatunk létre.
Share:=Comp.Create('FileShare',Edit3.Text) as IADsFileShare;
A Create metódus hívása során a FileShare kulcsszó azonosítja a fájlmegosztást, a második paraméterben a létrejövő megosztás nevét kell megadnunk.
A Path és a MaxUserCount property-kben adhatjuk meg a megosztandó mappa elérési útját és nevét, valamint hogy egyszerre hány felhasználó használhatja majd azt.
Share.Path:=Edit2.Text;
Share.MaxUserCount:=10;
Beállításainkat a SetInfo metódus meghívásával aktiválhatjuk.
Share.SetInfo;