Текущий архив: 2002.06.06;
Скачать: CL | DM;
Вниз
NetShareAdd и скрытые ресурсы Найти похожие ветки
← →
ALi (2002-03-25 13:22) [0]Здравия желаю!
Сабж при попытку создать скрытый ресурс (напр. TEST$) ругается ошибкой Access Denied. Пользователь имеет права администратора. Ресурсы без $ создаются и удаляются нормально.
Кто знает где грабли?
← →
Tosov (2002-03-25 17:27) [1]Покажи код создания сетевика. У меня с $ все работает нормально.
← →
ALi (2002-03-26 15:30) [2]To Tosov
Вот код:
.....
Type
Share_INFO_2= record
shi2_netname:PWideChar;
shi2_type:DWORD;
shi2_remark:LPTSTR;
shi2_permissions:DWORD;
shi2_max_uses:DWORD;
shi2_current_uses:DWORD;
shi2_path:PWideChar;
shi2_passwd:LPTSTR;
end;
PShare_INFO_2 = ^Share_INFO_2;
LPShare_INFO_2 = ^Share_INFO_2;
SHARE_INFO_502 =record
shi502_netname: PCHAR;
shi502_type: DWORD;
shi502_remark: PCHAR;
shi502_permissions: DWORD;
shi502_max_uses: DWORD;
shi502_current_uses: DWORD;
shi502_path: PCHAR;
shi502_passwd: PCHAR;
shi502_reserved: DWORD;
shi502_security_descriptor: PSECURITY_DESCRIPTOR;
end;
PSHARE_INFO_502= ^SHARE_INFO_502;
LPSHARE_INFO_502=^SHARE_INFO_502;
const
STYPE_DISKTREE = $0001;
ACCESS_READ = $0001;
var
Form1: TForm1;
F:Cardinal;
function NetShareAdd(
Server : PwideChar;
level : cardinal;
Buf : Pointer;
var Parm_Err : DWORD):Cardinal;stdcall; external "netapi32.dll" name "NetShareAdd";
function NetShareDel(
Server : PwideChar;
NetName : PwideChar;
Reserved : DWORD): Cardinal;stdcall; external "netapi32.dll" name "NetShareDel";
Implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
buf:Pointer;
UserInf:Share_INFO_2;
UserInf502:Share_INFO_502;
err:dWord;
begin
err:=0;
f:=0;
UserInf.shi2_netname:=PWideChar("TEST$");
UserInf.shi2_type:=0;
UserInf.shi2_remark:="";
UserInf.shi2_permissions:=1;
UserInf.shi2_max_uses:= 1;
UserInf.shi2_current_uses:=0;
UserInf.shi2_path:=PWideChar("C:\TEST");
UserInf.shi2_passwd:=nil;
GetMem(Buf ,sizeof(UserInf));
F:=NetSHAREAdd(nil,2,@UserInf,err);
ShowMessage(IntToStr(F));
ShowMessage(SysErrorMessage(GetLastError));
FreeMem(Buf);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
NetShareDel(nil,PWideChar("TEST$"),0);
ShowMessage(IntToStr(F));
end;
← →
Tosov (2002-03-26 17:15) [3]Этот код на D6 работает, если не считать мелочей -
UserInf.shi2_path:="C:\TEST";
UserInf.shi2_netname:="TEST$";
PWideChar - убрал.
Если ты делаешь вывод о неработоспособности кода по ShowMessage(SysErrorMessage(GetLastError));
то надо проверять не GetLastError, а результат функции (F)
← →
ALi (2002-03-26 18:20) [4]Похоже преобразование типов TCaption > PWideChar (у меня путь и имя берутся из TEdit) производится криво - получается белиберда типа ???$@^$, как его еще конвертить-то?
А код действительно рабочий.
и последним замечанием полностью согласен :-)
← →
Tosov (2002-03-27 00:51) [5]>как его еще конвертить-то?
Примерно так:
var
Text:PChar; //String,array of Char,TCaption
wText : PWideChar;
Size:Cardinal;
begin
size := SizeOf (WideChar) * Length (text)+1;
GetMem (wText, Size);
wText := StringToWideChar (Text, wText, Length (Text) + 1);
и где-нибудь потом
FreeMem(wText);
← →
ALi (2002-03-27 07:15) [6]Спасибо Андрей все заработало!
Страницы: 1 вся ветка
Текущий архив: 2002.06.06;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.009 c