linkedin facebook linkedin facebook nod32

Papkada dostupni qanday ochish mumkin

Muallif: Mengliyev SH.

Qo`shilgan sana: 2014-11-24

Papkada dostupni qanday ochish mumkin

        Keling NetAPI.pas modulida yozilgan funksiya bilan amaliyotda tanishib chiqamiz. Boshlash uchun dastur tuzamiz, u qaysidir umumiy dostupni ochadi.YAngi forum yarating, uses bo‘limidagi NetAPI moduliga ulang. OSning kodini aniqlash uchun asosiy forumning OnShow bo‘limini qo‘yib, kerakli kutubxonasiga yuklating. Asosiy oynaning dasturi (1-rasm)da ko‘rsatilganidek 4 ta TEdit kirish maydoni ko‘rinishida bo‘ladi.

       

1.Rasm

edSharePath – papkaga yo‘l ko‘rsatish uchun kirish yo‘lini ochish.
edNetName – Tarmoq nomini ko‘rsatish uchun qaysikim foydalanuvchi tarmoqda shu papka uchun aylana belgisi ko‘rinadi.
edPass – papkaga kirish paroli.
edComment – Kommentariya (tushuntirish ishlari), qaysikim tarmoq doirasi ko‘rinishida bo‘ladi.
Formada Добавить tugmasini o‘rnating.  Uni bosish natijasida 1-dastur bajariladi.
1-dastur
procedure TForm1.bnAddClick(Sender:TObject);
var
Share9x:TShareInfo502;
ShareNT:TShareInfo2;
wcPath,wcName, wcPass, wcComment:PWideChar;
begin
if bNT then
begin  // tarjima
@NetShareAddNT:=GetProcAddress(fHandleNT,’NetShareAdd’);
if  NetShareAddNT:=nil then
exit;
//
GetMem(wcPath,WIDE_LENGTH);
StringToWideChar(edSharePath.Text.wcPath. WIDE_LENGTH);

                        GetMem(wcName,WIDE_LENGTH);
StringToWideChar(edNetName.Text.wcName. WIDE_LENGTH);

                        GetMem(wcPass,WIDE_LENGTH);
StringToWideChar(edPass.Text.wcPass. WIDE_LENGTH);

                        GetMem(wcComment,WIDE_LENGTH);
StringToWideChar(edComment.Text.wcComment. WIDE_LENGTH);

                        //
ShareNT.shi2_path:=wcPath;
ShareNT.shi2_netname:=wcName;
ShareNT.shi2_passwd:=wcPass;
ShareNT.shi2_remark:=wcComment;
ShareNT.shi2_type:=STYPE_DISKTREE;
ShareNT.shi2_remark:=’ ‘;
ShareNT.shi2_permissions:=ACCESS_ALL;
ShareNT.shi2_max_uses:=DWORD(-1);
ShareNT.shi2_current_uses:=0;

                        //
NetShareAddNt(nil,2,@ShareNT,nil);
//
FreeMem(wcName);
FreeMem(wcPath);
FreeMem(wcPass);
FreeMem(wcComment);
end
else
begin //
@ NetShareAdd:=GetProcAddress(fHandle9x,’ NetShareAdd’);
if @ NetShareAdd=nil then
exit;

                        //
FillChar(Share9x.shi502_netname,Size0f(Share9x.shi502_netname), #0);
move(edNetName.Text[1],Share9x.shi502_netname[0],Length(edNetName.Text));
Share9x.shi502_type:=STYPE_DISKTREE;
Share9x.shi502_flags:=ACCESS_ALL;
FillChar(Share9x.shi502_remark,Size0f(Share9x.shi502_remark), #0);
FillChar(Share9x.shi502_path,Size0f(Share9x.shi502_path), #0);
Share9x.shi502_path:=PAnsiChar(edSharePath.Text);
FillChar(Share9x.shi502_rw_password,Size0f(Share9x.shi502_rw_password), #0);
FillChar(Share9x.shi502_ro_ password,Size0f(Share9x.shi502_ ro_ password), #0);

         NetShareAdd(nil,50,@Share9x,Size0f(Share9x));
end;
end;

        Butun kod protsedurasi 2 qismga bo‘linadi. Birinchi qismda WindowsNT ga kirishni ochamiz, ikkinchisida esa Windows9x uchun. Ishlash uslubi ikki qism uchun ham bir necha banddan iborat:

  1. Protseduraning manzilini aniqlaymiz.
  2. TShareInto2 yoki TShareInto502 OS turida ishlasak o‘shaning tartibini to‘lg‘azamiz.
  3. NetShareAddNT yoki NetShareAdd OSning qaysi bir funksiyasida ishlasak o‘shani chaqiramiz.

        NT sistemasini ko‘rib chiqaylik (chunki u Unicode ning ichidagi eng murakkabi), Windows9x da ishlash esa ancha yengil. SHunday qilib, ochiq resursni kiritish NetShareAdd yordamida amalga oshiriladi. Ammo u NT va 9x tarmoqlarga farqlanadi CHunki bu fayllarda ishlash imkoniyati yo‘q, yashiringan bo‘lganligi sababli, ishlar dinamik usulda amalga oshiriladi. GetProcAddress funksiyasi yordamida kutubxonaga kirib dinamika funksiyasining manzilini aniqlaymiz. Unga ikkita o‘lcham beriladi – kutubxonaning yuklatilgan ko‘rsatgichi va funksiyaning nomi, qaysinidir topish kerak. Agarda kerakli funksiya topilmasa unda natija xaqiqiy ko‘rsatgich bo‘ladi, bo‘lmasa - qiymat nolь bo‘ladi. Xatolik ro‘y berishi mumkin, agarda  noxosdan boshqa bibletekaga kirilgan bo‘lsa sistemaning o‘rniga (foydalanuvchini balkim) shu nomdagi.
Bundan keyin jumla tekistini o‘zgartirib, konvertatsiya qilamiz (kirishdagi qatorlardagi barcha  tarkibini) Unicode formatidagi. Buning uchun PWideChar turdagi 4 tala maydonchaga ham kirish maydonchasini o‘zgartiramiz.
PWideChar turi – bu esa Unicode qatorning ko‘rsatkichi bo‘ladi. Bu ko‘rsatkich bo‘ladigan bo‘lsa, bunday o‘zgartirish avtomatik xolda inobatga olinadi. Buning uchun GetMem funksiyasi orqali xotira kiritish kerak. Funksiyaning ikkita o‘lchami bor – ko‘rsatkichdan foydalanish, qaysiga kim ko‘rsatgich yozib xotiraga kiritiladi va chiqarib berish xotira o‘lchamiga WIDE_LENGTH konstanta o‘lcham tariqasida foydalaniladi, qaysikim NetAPI faylida boshlang‘ich deb quyidagicha e’lon qilinadi:
WIDE_LENGTHqSize0F(WideChar)*256:
Bu yerda  Size0F(WideChar) –Unicode ning simvollaridan bir o‘lchami. Ma’lumki, u 2 ga teng. SizeOF funksiyasi orqali barcha o‘lchamlarni aniqlasak kushchliroq bo‘ladi. Bunda xosil bo‘ladiki, WIDE_LENGTH konstantasi 256x2 ga teng bo‘ladi, bunda 2 – biror simvolning qiymati. Agarda bu konstantaga boshqa tomondan qarasak, unda uning qiymati Unicode formatining biron 256 qatorning uzunligiga teng.
SHunday qilib, TShareInfo2 strukturasi to‘lg‘aziladi, agarda WindowsNT yoki TShareInfo502 Windows9x xolatida. Ikkala struktura (tarkib) ham 2-dasturda keltirilgan
2-dastur
TShareInfo2qpacked record
shi2_netname:PWideChar;
shi2_type:DWORD;
shi2_remark:PWideChar;
shi2_permissions: DWORD;
shi2_max_uses:DWORD;
shi2_current_uses:DWORD;
shi2_path:PWideChar;
shi2_passwd:PWideChar;
end;
PShareInfo2=^TShareInfo2;
PShareInfo2Array=array[0..1024] of TShareInfo2;
PShareInfo2Array=^ TShareInfo2Array;
type
TShareInfo502=packed record
shi502_netname:array[0..12] of Char;
shi502_type:Byte;
shi502_flags:Word;
shi502_remark:PChar;
shi502_Path:PChar;
shi502_rw_password:array[0..8] of Char;
shi502_ro_password: array[0..8] of Char;
end;

Strukturaning barcha qatorlari (maydoni) to‘lg‘azilgandan so‘ngra NetShareAddNT funksiyasi chaqirib olinadi. Qaysidir NT –sistemasi quyidagi yo‘l bilan xosil qilinadi.

function NetShareAddNT(servername:PWideChar;
level:WORD; buf:Pointer;
parm_err:LPDWORD):DWORD:stdcall;

        Agarda Windows9x dan foydalanilsa NetShareAdd funksiyasi chaqirib olinadi:

function NetShareAdd(  servername:PChar;
sLevel:Cardinal;
pbBuffer:PChar;
cbBuffer:Word;):DWORD:stdcall;

NetShareAdd va NetShareAddNT funksiyalarining o‘lchamlarini ko‘ramiz.
- server nomi, undan resursda ochish xosil bo‘ladi. Lokal kommentarii (tushuntirish) uchun nil ni ko‘rsatish mumkin. Sistemani yo‘qotish uchun, kirish  o‘lchamlarini o‘zgartirish ta’luqli qaydlar bo‘lganda aniqlik ko‘rsatilishi kerak.
- satxi.   2 yoki 502 WindowsNT uchun va 50  Windows9x uchun qiymatlariga ega bo‘lishimiz kerak.
-SHARE_INFO tarkibi to‘ldiriladi, ko‘rsatkichi bilan.

- DWORD turi o‘zgaruvchan son bilan ko‘rsatiladi. Agarda unda xatolikka yo‘l qo‘yilsa struktura (tarkib) ko‘rsatgichlari o‘lchamlarini ko‘rsatmaydi, agarda aniqlanmagan yoki noto‘g‘ri ko‘rsatilgan bo‘lsa. Agarda nil ko‘rsatilsa, parametrning xato o‘lchamlarini aniqlab bo‘lmaydi. Misol kiritib ko‘ring va uning ishlashini tekshirib ko‘ring. Kirish xuquqini o‘zgartirganda papkada qo‘l ko‘rinishi paydo bo‘ladi, ammo dasturlashtirilgan xolatda u birdaniga paydo bo‘lmaydi. Qo‘lning ko‘rinishi paydo bo‘lishi uchun, kommentarini qayta  ishga tushirish kerak yoki svoystva papkasiga kirish va undan chiqish OK tugmachasini bosgan xolda amalga oshiriladi.

1959 marta o`qildi.

Parol:
Eslab qolish.


Ro`yhatdan o`tish

testing

+998915878681

Siz o`z maxsulotingizni 3D reklama ko`rinishda bo`lishini xohlaysizmi? Unda xamkorlik qilamiz.

3D Reklama


Рейтинг@Mail.ru
Рейтинг@Mail.ru

Besucherzahler
счетчик посещений