Форум: "Сети";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
Внизбаг с расшариванием ресурса Найти похожие ветки
← →
vovan (2004-06-07 09:38) [0]под XP проблема такая папка разшаривается, но
доступа до нее нет ее даже посмотреть невозможно
делаю так
ShareNT.shi2_permissions := ACCESS_ALL;
может быть это из-за того что запускается простым пользователем,
но необходимо чтоб и в этом случае доступ к папке был полный
← →
Rouse_ © (2004-06-08 08:00) [1]ACCESS_ALL = 258; ?
← →
vovan (2004-06-08 08:48) [2]да все так
const
ACCESS_ALL = 258;
← →
Rouse_ © (2004-06-08 09:06) [3]Покажи код...
← →
vovan (2004-06-08 10:34) [4]во код
const
STYPE_DISKTREE = 0;
ACCESS_ALL = 258;
SHI50F_FULL = 258;
var
FLibHandle : THandle;
Share9x : TShareInfo50;
ShareNT : TShareInfo2;
TmpDir, TmpName: String;
TmpDirNT, TmpNameNT: PWChar;
OS: Boolean;
TmpLength: Integer;
begin
TmpDir := DirSh; //Определяем путь к будующему ресурсу
TmpName := NetName; //Определяем имя под которым он будет виден в сети
if TmpDir = "" then Exit;
if not IsNT(OS) then Close; //Выясняем тип системы
if OS then begin //Код для NT
FLibHandle := LoadLibrary("NETAPI32.DLL");
if FLibHandle = 0 then Exit;
@NetShareAddNT := GetProcAddress(FLibHandle,"NetShareAdd");
if not Assigned(NetShareAddNT) then
begin
FreeLibrary(FLibHandle);
Exit;
end;
TmpLength := SizeOF(WideChar)*256;
GetMem(TmpNameNT, TmpLength);
StringToWideChar(TmpName, TmpNameNT, TmpLength);
ShareNT.shi2_netname := TmpNameNT;
ShareNT.shi2_type := STYPE_DISKTREE;
ShareNT.shi2_remark := "";
ShareNT.shi2_permissions := ACCESS_ALL;
ShareNT.shi2_max_uses := DWORD(-1);
ShareNT.shi2_current_uses := 0;
GetMem(TmpDirNT, TmpLength);
StringToWideChar(TmpDir, TmpDirNT, TmpLength);
ShareNT.shi2_path := TmpDirNT;
ShareNT.shi2_passwd := nil; //"";
NetShareAddNT(nil,2,@ShareNT, nil);
FreeMem (TmpNameNT);
FreeMem (TmpDirNT);
end else begin
FLibHandle := LoadLibrary("SVRAPI.DLL");
if FLibHandle = 0 then Exit;
@NetShareAdd := GetProcAddress(FLibHandle,"NetShareAdd");
if not Assigned(NetShareAdd) then
begin
FreeLibrary(FLibHandle);
Exit;
end;
FillChar(Share9x.shi50_netname, SizeOf(Share9x.shi50_netname), #0);
move(TmpName[1],Share9x.shi50_netname[0],Length(TmpName)); //Имя
Share9x.shi50_type := STYPE_DISKTREE;
Share9x.shi50_flags := SHI50F_FULL;
FillChar(Share9x.shi50_remark,
SizeOf(Share9x.shi50_remark), #0);
FillChar(Share9x.shi50_path,
SizeOf(Share9x.shi50_path), #0);
Share9x.shi50_path := PAnsiChar(TmpDir);
FillChar(Share9x.shi50_rw_password,
SizeOf(Share9x.shi50_rw_password), #0);
FillChar(Share9x.shi50_ro_password,
SizeOf(Share9x.shi50_ro_password), #0);
NetShareAdd(nil,50,@Share9x,SizeOf(Share9x));
end;
FreeLibrary(FLibHandle);
← →
ValeraVV (2004-06-08 12:01) [5]У меня расшаривание ресурса с shi2_permissions не работало, я так понял, что флаги shi2_permissions нужны для информации о ресурсе. Мне приходилось формировать структуру shi502_security_descriptor для установления прав доступа на ресурс. У меня на Win2000 с shi502_security_descriptor=nil всегда открывался полный доступ всем не зависимо от заданных флагов в shi502_permissions. Приходилось формировать sd так:
Sd := PSecurity_Descriptor(LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH));
InitializeSecurityDescriptor(Sd, SECURITY_DESCRIPTOR_REVISION);
hMem:=LocalAlloc(LPTR,500);
DACL:=pointer(hmem);
AllocateAndInitializeSid(SECURITY_WORLD_SID_AUTHORITY,0,0,0,0,0,0,0,0,0,MySID);
if not IsValidSid(MySID) then
writeln("invalid sid");
InitializeAcl(DACL^,0,ACL_REVISION2);
if not IsValidAcl(DACL^) then
writeln("invalid Acl");
AddAccessAllowedAce(DACL^,1,GENERIC_READ,MySID);
if not IsValidAcl(DACL^) then
writeln("invalid Acl");
SetSecurityDescriptorDacl(Sd, True, nil, False);
if not IsValidSecurityDescriptor(Sd) then
writeln("invalid SD");
← →
ValeraVV (2004-06-08 12:08) [6]Прошу прощения, код приведенный выше может быть не рабочим, вырезано из старой копии проекта, последняя версия лежит дома :-(
← →
ValeraVV © (2004-06-08 14:08) [7]А гостевая учетка у тебя разрешена?
← →
Rouse_ © (2004-06-08 14:47) [8]Странно, вполне рабочий код, как время будет, посмотрю поподробней...
А по поводу security_descriptor - в NT он не используется...
← →
Ильичев С.А. © (2004-06-08 15:51) [9]2 vovan (07.06.04 09:38)
Папка, которую расшариваешь, физически на NTFS-разделе ?
← →
Игорь Шевченко © (2004-06-08 17:46) [10]
> А по поводу security_descriptor - в NT он не используется...
А где используется ?
← →
Rouse_ © (2004-06-08 17:56) [11]> [10] Игорь Шевченко © (08.06.04 17:46)
Блин, не descriptor а shi2_permissions :)
Сори...
← →
Rouse_ © (2004-06-08 17:57) [12]shi2_permissions
Specifies a DWORD value that indicates the shared resource"s permissions for servers running with share-level security. A server running user-level security ignores this member. This member can be one or more of the following values. Calls to the NetShareSetInfo function ignore this member.
Note that the Windows Server 2003 family, Windows XP, Windows 2000, and Windows NT do not support share-level security.
Переутал, короче, когда копировал :)
← →
vovan (2004-06-09 05:15) [13]
> Папка, которую расшариваешь, физически на NTFS-разделе ?
а какая разница?
надо шоб и так, и так работало
> ValeraVV
а где в коде указывается ресурс к которому ето применяется?
← →
Ильичёв С.А. (2004-06-10 14:43) [14]2 [13] vovan (09.06.04 05:15)
Вот как раз из-за этой разницы у тебя прога и не работает.
Можешь в этом убедиться. Используя стою прогу расшарь FAT-папку.
Даступ будет, всё как надо.
Вернёмся к NTFS. Расшарить ты папку расшарил, но вот учётная запись, с которой заходишь с другого компа, не имеет прав на эту папку(локально).
Ни на просмотр, ни на что...
Тут же нужно систему прочухать =)
Попробуй вот что:
Положим, ты заходишь с другого компа с учётной записью "Гость".
Перед расшариванием папки(1) с помощью своей проги, правой кнопкой
на папку(1) -> свойства -> закладка "Безопасность"
(если этой закладки нет, то надо отключить простой общий доступ, для этого заходим в "Свойства папки" -> "Вид" и снимаем галку, кажется пятую с верху, "Испрользовать простой общий доступ......")
И так, на закладке "Безопасность" видим список пользователей и
какие права они имеют на эту папку.
Учётной записи гость там вообще нет. Так?
Жмём добавить, пишем гость, ок.
Попадаем обратно туда где права назначаются. Ну и назначаем "гостю"
что там ему надо надо.
Заходим в твою прогу, расшариваем эту папку(1).
Заходим с другого компа под "гостем", и, вуаля, всё работает.
Отсюда вывод. Прога работает как надо =) Только она не закончена.
Просто дать доступ к папке недостаточно...
← →
Ильичёв С.А. (2004-06-10 14:46) [15]Удалено модератором
Примечание: Дубль...
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c