哪位高手指点一下下面的代码!(关于编程实现目录的共享)

马丁当 2000-08-23 12:05:00
我在win98下调用NetShareAdd指定某个目录为共享,可是屡试屡败,
返回的错误信息好象指示第2个参数不对。我查找了MSDN,第2个参数
还有第2种取值502,但好象只能用在NT下!!!
代码如下。

procedure NetShareAdd(servername:LPWSTR;level:DWORD; buf:PBYTE;parm_err:LPDWORD);external 'svrapi.dll';

procedure TForm1.Button1Click(Sender: TObject);
type
SHARE_INFO_2=record
shi2_netname:LPWSTR;
shi2_type:DWORD;
shi2_remark:LPWSTR;
shi2_permissions:DWORD;
shi2_max_uses:DWORD;
shi2_current_uses:DWORD;
shi2_path:LPWSTR;
shi2_passwd:LPWSTR;
end;
var
err_Meg:Dword;
share:SHARE_INFO_2;
begin
share.shi2_netname:='Myshare';
share.shi2_type:=0;
share.shi2_remark:='asfsfd';
share.shi2_max_uses:=DWORD(-1);
share.shi2_permissions:=0;
share.shi2_current_uses:=0;
share.shi2_path:='c:\temp';
share.shi2_passwd:=nil;

NetshareAdd(nil,2,@share,@err_Meg);

messagedlg(inttostr(err_meg),mtwarning,[mbok],0);
end;
...全文
94 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Putao 2000-08-23
  • 打赏
  • 举报
回复
U皮特U 2000-08-23
  • 打赏
  • 举报
回复
不好意思,上面的代码忘记这段变量定义了:
CString strNetName = "tmp";
CString strPasswdRW = "ddd";
CString strPasswdRO = "ddd";
CString strPath = "C:\\TMP"; // 一定要大写,否则出错NERR_UnknownDevDir
CString strRemark = "my tmp";
U皮特U 2000-08-23
  • 打赏
  • 举报
回复
在win95,98机器上必须用leverl 50,也就是使用share_info_50结构。以下是详细说明,后附VC的源码,我已经调试通过。
struct share_info_50 {
char shi50_netname[LM20_NNLEN+1]; /* 共享名 */
unsigned char shi50_type; /* see below */
unsigned short shi50_flags; /* see below */
char FAR * shi50_remark; /* 共享描述 */
char FAR * shi50_path; /* 共享资源,必须大写 */
char shi50_rw_password[SHPWLEN+1]; /* 读写口令 */
char shi50_ro_password[SHPWLEN+1]; /* 只读口令 */
};

shi50_type的值:
#define STYPE_DISKTREE 0 /* 磁盘共享*/
#define STYPE_PRINTQ 1/* 打印机共享 */
#define STYPE_DEVICE 2
#define STYPE_IPC 3

shi50_flags的值:
#define SHI50F_RDONLY 0x0001
#define SHI50F_FULL 0x0002
#define SHI50F_DEPENDSON (SHI50F_RDONLY|SHI50F_FULL)
#define SHI50F_ACCESSMASK (SHI50F_RDONLY|SHI50F_FULL)
#define SHI50F_PERSIST 0x0100 /* 系统重启时重新建立该共享资源 */
#define SHI50F_SYSTEM 0x0200

以下是VC的源码:
#include <svrapi.h>
NET_API_STATUS nas;
share_info_50 si5;
si5.shi50_type = STYPE_DISKTREE;
si5.shi50_flags = SHI50F_FULL;
si5.shi50_path = (char*)LPCTSTR(strPath);
si5.shi50_remark = (char*)LPCTSTR(strRemark);
memset((void*)si5.shi50_netname, 0, SHPWLEN+1);
strncpy((char*)si5.shi50_netname, LPCTSTR(strNetName), strNetName.GetLength());
memset((void*)si5.shi50_rw_password, 0, SHPWLEN+1);
strncpy((char*)si5.shi50_rw_password, LPCTSTR(strPasswdRW), strPasswdRW.GetLength());
memset((void*)si5.shi50_ro_password, 0, SHPWLEN+1);
strncpy((char*)si5.shi50_ro_password, LPCTSTR(strPasswdRO), strPasswdRO.GetLength());

nas = NetShareAdd(NULL, 50, (char *)&si5, sizeof(share_info_50));

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧