Форум: "Сети";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизСоздание шары для определенного пользователя Найти похожие ветки
← →
ja © (2004-11-17 23:08) [0]Уважаемые мастера! По вопросу создания шары опубликовано множество подсказок, пытался разобраться в msdn, искал по rsdn, но чё-то у меня все равно не получается.
Первый вопрос на котором застрял: ругаецца "Синтаксическая ошибка в имени файла, имени папки или метке тома" при вызове NetShareAdd, причем смущает тот факт, что в передаваемой при вызове структуре SHARE_INFO_502 в msdn элементы shi502_netname, shi502_path и др. описаны как LPWSTR, а в библиотеке Win32Api (модуль lm) они же описаны, как LPTSTR - это ставит меня в тупик, как я не пытался извратится (последнее, что нашел в поисках ответа - пример на каком-то языке приведения в Unicode, т.е. в WideChar, а потом обратно в PChar), так ничего у меня и не получается, переопределять структуру в lm.pas тоже пробовал - результат упорно не меняется.
Это значит раз.
Но что я совсем понять не в состоянии, так это то, что в процессе тыканья у меня вдруг в неизменяемой по ходу части кода, переделанной из сишного примера, опубликованного старшими товарищами (правда, примеры мне попадались только без конкретизации пользователя - наверное не там искал), а именно при попытке SetSecurityDescriptorDacl, стал вдруг ругацца "уровень редакции неизвестен", а потом также вдруг перестал. Отчего это могло быть?
Код, в котором в Edit1 - имя предварительно созданного пользователя:uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, lm, WinNT, WinBase;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
var
nStatus: NET_API_STATUS;
SidLen, DomenLen: DWord;
SidNameUse: SID_NAME_USE;
sid: PSID;
pcsid, DomenName: PChar;
p: TShareInfo502;
parm_err: LPDWORD;
pSD: PSECURITY_DESCRIPTOR;
theACL: ACL;
Len_ACL: DWORD;
wcnetname, wcremark, wcpath: PWideChar;
s: string;
size: integer;
begin
LookupAccountName("TAZ",PChar(Edit1.Text),nil,SidLen,nil,DomenLen,SidNameUse);
GetMem(pcsid,SidLen);
sid := PSID(pcsid);
GetMem(DomenName,DomenLen);
if LookupAccountName("TAZ",PChar(Edit1.Text),sid,SidLen,DomenName,DomenLen,SidNameUse) then
begin
ShowMessage("Successfully SID!");
end
else begin
ShowMessage("A system error has occurred: " + SysErrorMessage(GetLastError));
end;
GetMem(pSD, SECURITY_DESCRIPTOR_MIN_LENGTH);
if InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION) then
begin
ShowMessage("Security Descriptor Initialized Successfully!");
end
else begin
ShowMessage("A system error has occurred: " + SysErrorMessage(GetLastError));
end;
Len_Acl := sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE)
+ GetLengthSid(sid) - sizeof(DWORD) ;
if InitializeACL(@theACL, Len_ACL, ACL_REVISION) then
begin
ShowMessage("ACL Initialized Successfully!");
end
else begin
ShowMessage("A system error has occurred: " + SysErrorMessage(GetLastError));
end;
if AddAccessAllowedACE(@theACL, ACL_REVISION, $1F0000, sid) then
begin
ShowMessage("Allowed ACE added Successfully!");
end
else begin
ShowMessage("A system error has occurred: " + SysErrorMessage(GetLastError));
end;
if SetSecurityDescriptorDacl(pSD,true,@theACL,false) then
begin
ShowMessage("Security Descriptor DACL set Successfully!");
end
else begin
ShowMessage("A system error has occurred: " + SysErrorMessage(GetLastError));
end;
s := "TestShare";
size := SizeOf(WideChar) * (length(s)+1);
GetMem(wcnetname,size);
wcnetname := StringToWideChar(s,wcnetname,length(s)+1);
s := "Remark for share";
size := SizeOf(WideChar) * (length(s)+1);
GetMem(wcremark,size);
wcremark := StringToWideChar(s,wcremark,length(s)+1);
s := "W:\Share"; // + "\" + Edit1.Text;
size := SizeOf(WideChar) * (length(s)+1);
GetMem(wcpath,size);
wcpath := StringToWideChar(s,wcpath,length(s)+1);
p.shi502_netname := PChar(wcnetname);
p.shi502_type := STYPE_DISKTREE;
p.shi502_remark := PChar(wcremark);
p.shi502_permissions := ACCESS_WRITE;
p.shi502_max_uses := 4;
p.shi502_current_uses := 0;
p.shi502_path := PChar(wcpath);
p.shi502_passwd := nil;
p.shi502_reserved := 0;
p.shi502_security_descriptor := pSD;
nStatus := NetShareAdd("TAZ",502,@p,parm_err);
if (nStatus = NERR_Success) then
begin
ShowMessage("Share added Successfully!");
end
else begin
ShowMessage("A system error has occurred: " + SysErrorMessage(nStatus));
end;
end;
← →
ja © (2004-11-18 01:21) [1]Вопрос снят! Поборол-таки самостоятельно! =)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c