(是350分,不是200分)请教NT下NetShareAdd的参数该怎么用(200分)

A

abcd

Unregistered / Unconfirmed
GUEST, unregistred user!
我查阅了本站已有的相关资料,知道在NT下可以用NetShareAdd实现设置目录的共享,
我在本机上也确实实现了(该函数的第一个参数是ServerName,我用Nil就是本机)
现在的问题是,我在A机上装了主域控制器,B机、C机都加入了这个域,我想用程序实
现对B机、C机的目录的控制(主要是要求能在B、C机上随便建目录,并把该目录设为共享)。
可是我在参数里试了半天也不行。
例如:A机的机器名为A(B、C类推),那么我在程序里就设
ServerName:=stralloc(100);
strpcopy(ServerName,'//B');
NetShareAdd(ServerName,.........)(其余参数略,同设本机目录共享)
结果程序老返回值53,意思是无效的机器名
我在机器名前加域名也不行,可是用手工操作时,我可以在管理工具中的“管理向导”
中得以实现,所以我想这个问题应该是可以用程序实现的,只是我不知道罢了。
所以我到大富翁来求救了。因为我是个新手,原来的帐号已经没分了,只好新申请了
一个,并把所有的分都献出来啦。另外我还花了150分问了类似的问题,所以若有人给我正
确的解答,我一定把所有的分(350)都奉上!
这个问题比较急切,希望能在两天内得到回答,请高人们该出手时就出手!
多谢!!!!!!!!!
 
答案很简单,ServerName什么也不需要加:
strpcopy(ServerName,'B');即可。

同时注意路径是该机的绝对路径(如:c:/dir1/dir2)
 
To 温柔一刀:
谢谢你,不过我试了还是不行。
下面是我的程序,麻烦各位给看看,问题到底出在哪???
---------------------------------------
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,AccCtrl;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

TSHARE_INFO_502 = record //根据API里那个Struct的要求而用Delphi仿制的
shi502_netname: PWideChar;
shi502_type: DWORD;
shi502_remark: PWideChar;
shi502_permissions: DWORD;
shi502_max_uses: DWORD;
shi502_current_uses: DWORD;
shi502_path: PWideChar;
shi502_passwd: PChar;
shi502_reserved: DWORD;
shi502_security_descriptor: PSECURITY_DESCRIPTOR;
end;

PBYTE = ^BYTE;
PDWORD = ^DWORD;
PWideChar=^WideChar;
function NetShareAdd(servername:pChar; level: DWORD; buf: PBYTE;
VAR parm_err: DWORD ): DWORD; stdcall;

var
Form1: TForm1;

implementation

function NetShareAdd; external 'netapi32.DLL' name 'NetShareAdd';

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
ServerName:pchar;
si: TSHARE_INFO_502;
r: DWORD;
parm_err:Dword;
password:pchar;
begin
si.shi502_netname := 'share1'; //共享名
si.shi502_type := 0; //STYPE_DISKTREE
si.shi502_remark := nil;
si.shi502_max_uses := $FFFFFFFF;
si.shi502_current_uses := 10;
si.shi502_path := 'g:/temp'; //在机器vodserver上的绝对路径
si.shi502_passwd := nil; //共享目录口令
si.shi502_reserved := 0;
si.shi502_security_descriptor := nil;
si.shi502_permissions:=TRUSTEE_ACCESS_ALL;
ServerName:=stralloc(200);
strpcopy(ServerName,'vodserver'); //vodserver是我想控制的机器名
try
r := NetShareAdd(ServerName, 502, @si, parm_err );
Finally
strdispose(ServerName);
end;
Edit1.Text := Format( '%d', [r] ); //显示结果总是53--未知的机器名
Edit2.Text:=inttostr(parm_err);
end;

end.
 
问题我已经在你的那个贴子中解决了,
前面只注意了//,没有看到代码,所以没发现问题。 :)
 
thx,温柔一刀,这200我先给
还有点小问题,你到我那帖上看看
回答完,我立刻再奉上150
 
顶部