Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
14-1105224082
Yanis
2005-01-09 01:41
2005.01.30
Американские программисты о русских программистах! :)


3-1103862206
Nexel
2004-12-24 07:23
2005.01.30
Ну вот и грабли с IBX


8-1097993332
Ozone
2004-10-17 10:08
2005.01.30
3D MAX + Delphi


1-1105868929
Ivolg
2005-01-16 12:48
2005.01.30
Компонент


1-1105981595
Никита
2005-01-17 20:06
2005.01.30
Как программно эмулировать: а) Щелчок мышью....





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский