Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];

Вниз

NetShareEnum не работает для компьютеров в сети   Найти похожие ветки 

 
Александр   (2002-11-27 18:51) [0]

Я попробывал использовать функцию NetShareEnum - на локальном компьютере как и пологается я получил все шары, что касается других компьютеров в сети, то информацию о их шарах так и не удалось получить. Помогите, очень нужно. Ниже приведен код, который я использовал:

function IsNT(var Value: Boolean): Boolean;
var
Ver: TOSVersionInfo;
BRes: Boolean;
begin
Ver.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
BRes := GetVersionEx(Ver);
if not BRes then begin
Result := False;
Exit;
end else
Result := True;
case Ver.dwPlatformId of
VER_PLATFORM_WIN32_NT : Value := True;
VER_PLATFORM_WIN32_WINDOWS : Value := False;
VER_PLATFORM_WIN32s : Result := False;
end;
end;

function GetShareList(ComputerName : String) : String;
type
TShareInfo2 = packed record
shi2_netname : PWChar;
shi2_type: DWORD;
shi2_remark :PWChar;
shi2_permissions: DWORD;
shi2_max_uses : DWORD;
shi2_current_uses : DWORD;
shi2_path : PWChar;
shi2_passwd : PWChar;
end;
PShareInfo2 = ^ TShareInfo2;
TShareInfo2Array = array [0..512] of TShareInfo2;
PShareInfo2Array = ^ TShareInfo2Array;

TShareInfo50 = packed record
shi50_netname : array [0..12] of Char;
shi50_type : Byte;
shi50_flags : Word;
shi50_remark : PChar;
shi50_path : PChar;
shi50_rw_password : array [0..8] of Char;
shi50_ro_password : array [0..8] of Char;
end;

var
NetShareEnumNT:function (
servername:PWChar;
level:DWORD;
bufptr:Pointer;
prefmaxlen:DWORD;
entriesread,
totalentries,
resume_handle:LPDWORD): DWORD; stdcall;
NetShareEnum:function (
pszServer: PChar;
sLevel: Cardinal;
pbBuffer: Pchar;
cbBuffer: Cardinal;
pcEntriesRead, pcTotalAvail: Pointer):DWORD; stdcall;

var
i:Integer;
FLibHandle : THandle;
ShareNT : PShareInfo2Array;
entriesread,totalentries:DWORD;
Share : array [0..512] of TShareInfo50;
pcEntriesRead,pcTotalAvail:Word;
OS: Boolean;
WCompName : PWideChar;
iSize, Res : Integer;
begin
Result := "";
if not IsNT(OS) then Exit;
if OS then begin
FLibHandle := LoadLibrary("NETAPI32.DLL");
if FLibHandle = 0 then Exit;
@NetShareEnumNT := GetProcAddress(FLibHandle,"NetShareEnum");
if not Assigned(NetShareEnumNT) then begin
FreeLibrary(FLibHandle);
Exit;
end;
ShareNT := nil;
iSize:= SizeOf(WideChar)*256;
GetMem(WCompName, iSize);
try
StringToWideChar(ComputerName, WCompName, iSize);
Res := NetShareEnumNT(WCompName, 2, @ShareNT,DWORD(-1),
@entriesread,@totalentries,nil);
if Res <> 0 then begin
FreeLibrary(FLibHandle);
Exit;
end;
finally
FreeMem(WCompName);
end;
for i:= 0 to entriesread - 1 do
Result := Result + " " + String(ShareNT^[i].shi2_netname);
end else begin
FLibHandle := LoadLibrary("SVRAPI.DLL");
if FLibHandle = 0 then Exit;
@NetShareEnum := GetProcAddress(FLibHandle,"NetShareEnum");
if not Assigned(NetShareEnum) then begin
FreeLibrary(FLibHandle);
Exit;
end;
if NetShareEnum(PChar(ComputerName),50,@Share,SizeOf(Share),
@pcEntriesRead,@pcTotalAvail)<> 0 then begin
FreeLibrary(FLibHandle);
Exit;
end;
for i:= 0 to pcEntriesRead - 1 do
Result := Result + " " + String(Share[i].shi50_netname);
end;
FreeLibrary(FLibHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := GetShareList("\\SomeName");
end;


 
Bourgeois   (2002-11-30 04:17) [1]

у меня аналогичная проблема. Все, что мне удалось достать, так это вот: см. HKEY_LOCAL_MACHINE\SYSTEM\CurentControlSEt\Services\LanManServer\Shares.(но это только для Windows NT, 2000)
Что, касается NetShareEnum, то в MSDN написано:

Security Requirements
Windows NT: Administrator or Communication, Print, or Server operator group membership is required to successfully execute the NetShareEnum function at level 2. No special group membership is required for level 0 or level 1 calls.

Windows 2000: If you call this function at information level 2 on a Windows 2000 domain controller that is running Active Directory, access is allowed or denied based on the access-control list (ACL) for the securable object. The default ACL permits all authenticated users and members of the "Pre-Windows 2000 compatible access" group to view the information. By default, the "Pre-Windows 2000 compatible access" group includes Everyone as a member. This enables anonymous access to the information if the system allows anonymous access.

If you call this function at information level 2 on a Windows 2000 member server or workstation, all authenticated users can view the information. Anonymous access is also permitted if the RestrictAnonymous policy setting allows anonymous access.

Так, что если ты не админ, информацию ты не получишь.
Если найдешь решение, сбрось мне на мыло, а то я уже устал решать эту проблему. Удачи!



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
1-86963
- Tsatur -
2003-01-17 01:32
2003.01.27
Фракталы


9-86609
Alex_D
2002-07-29 16:18
2003.01.27
Графика


3-86693
MorfeyCOOL
2003-01-09 11:51
2003.01.27
Картинка в Access 2000 (XP)


8-86969
dummie
2002-10-10 14:39
2003.01.27
gluBuild2DMipmaps/glTexImage2D и видеопамять...


1-86790
Тень
2003-01-15 17:08
2003.01.27
Разметка в QReport ???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский