关于在WIN2000域管理下面如何映射网络驱动器,急!!!(100分)

  • 主题发起人 主题发起人 sootsing
  • 开始时间 开始时间
S

sootsing

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序里面我需要映射服务器的一个目录(我把该目录的权限是由指定的用户来访问),我的机器也是win2000,但不是他们的域成员,我可以使用该用户和密码来访问,使用win98的机器也可以,就是他们的域成员却不行。昨天总是报ERROR_SESSION_CREDENTIAL_CONFLICT。
我的源码是:
NetSource.dwScope := RESOURCE_GLOBALNET;
NetSource.dwType := RESOURCETYPE_DISK;
NetSource.dwDisplayType := RESOURCEDISPLAYTYPE_SHARE;
NetSource.dwUsage := RESOURCEUSAGE_CONNECTABLE;
NetSource.lpLocalName := 'O:';
NetSource.lpRemoteName := PChar(目录);
NetSource.lpProvider := '';
WNetAddConnection2(NetSource, PChar(密码), PChar(用户名), 0);
是不是在以域成员的身份登录以后,就不能在程序再设定其他的用户身份登录呢?拜托各位大虾了。小生感激不尽
 
转贴一篇你看看
(第一篇)

基 本 原 理

----在Windows 环 境 下, 应 用 程 序 使 用Windows 网 络 函 数(WNet) 来 实 现 网 络 功 能 而 不 用 关 心 网 络 的 供 应 商 及 具 体 实 现, 因 为WNet 函 数 是 独 立 于 网 络 的。
----Wnet 函 数 主 要 有:WnetAddConnection , WnetAddConnection2 , WnetAddConnection3 , WnetCancelConnection2 等。 本 文 主 要 用 WnetAddConnection2,WnetCancelConnection2 函 数。

----WNetAddConnection2 在Windows.pas 中 的 函 数 原 型 如 下:

----function WNetAddConnection2(var lpNetResource: TNetResource;lpPassword, lpUserName:

----PChar; dwFlags: DWORD): DWORD; stdcall;

----为 调 用 此 函 数, 必 须 填 写lpNetResouce 结 构, 此 结 构 的 定 义 为:

typedef struct _NETRESOUCE{
DWORD dwScope;
DWORD dwType;
DWORD dwDisplayType;
DWORD dwUsage;
LPTSTR lpLocalName;
LPTSR lpRemoteName;
LPTSr lpProvider;
} NETRESOURCE;

----这 里 使 用dwType,lpLocalName,lpRemoteName,lpProvider 几 个 参 数。 其 含 义 如 下:

----dwType : 用 于 指 定 网 络 的 资 源 类 型, 有 以 下RESOURCETYPE_ANY( 任 何 资 源),RESOURCETYPE_DISK( 磁 盘 资 源) , RESOURCETYPE_PRINT( 打 印 机 资 源)。

----lpLocalName : 指 定 本 地 设 备。

----lpRemoteName : 指 定 远 程 网 络 名。

----lpProvider : 指 定 提 供 网 络 资 源 的 供 应 商。 如 为 空, 则 表 示 供 应 商 未 知。

----WNetAddConnection2 函 数 的lpPassword 为 远 程 资 源 的 口 令。

----lpUserName 为 远 程 资 源 的 用 户 名。dwFlags 标 志 位 用 于 指 定 登 录 时 是 否 重 新 连 接(0 时 表 示 不 重 新 连 接,CCONNECT_UPDATE_PROFILE 表 示 登 录 时 重 新 连 接)。

----WnetCancelConnection2 在Windows .pas 中 的 函 数 原 型 如 下:

----function WNetCancelConnection2(lpName: PChar;    dwFlags: DWORD; fForce: BOOL):DWORD; stdcall;

----lpName : 要 断 开 的 远 程 网 络 资 源 或 本 地 重 定 向 驱 动 器。

----dwFlags : 含 义 同 上。

----fForce : True 表 示 不 管 是 否 有 文 件 打 开, 强 制 性 断 开 网 络 驱 动 器;False 表 示 如 有 文 件 打 开 则 函 数 运 行 失 败。

实 例

----在Delphi 的File 菜 单 下 选 择New Application, 在Form1 上 放 置 一 个Button, 在Button1 的Click 事 件 中 键 入 如 下 代 码:
procedure TForm1.Button1Click(Sender : TObject);
var
NetSource : TNetResource;
begin
with NetSource do
begin
dwType := RESOURCETYPE_ANY;
lpLocalName := ‘X:';
// 将 远 程 资 源 映 射 到 此 驱 动 器
lpRemoteName := ‘//hqServer/sys';
// 远 程 网 络 资 源
lpProvider := ‘';
// 必 须 赋 值,
如 为 空 则 使 用lpRemoteName 的 值。
end;
WnetAddConnection2(NetSource,‘Password',‘Guest',
// 用 户 名 为Guest, 口 令 为Password
CONNECT_UPDATE_PROFILE);
// 下 次 登 录 时 重 新 连 接
// 此 时 在Windows 资 源 管 理 器 中
可 看 到 网 络 驱 动 器X:
if MessageDlg(‘Are you sure to disconnect Drive ?',
   mtConfirmation, [mbYes, mbNo], 0) = mrYes
then
// 不 管 是 否 有 文 件 打 开,
断 开 网 络 驱 动 器X:
WNetCancelConnection2( ‘X:', CONNECT_UPDATE_
PROFILE, True);
end;
end;

------------------------------------------------------
(第二篇)

映射网络驱动器


用此方法让你可以映射网络驱动器和断开映射网络驱动器,用本机来试通不过,如果你在网络上也通不过,请告知建立映射网络驱动器
procedure TForm1.Button1Click(Sender: Tobject);

var NetR :NETRESOURCE;ErrInfo : Longint;

begin

NetR.dwScope := RESOURCE_GLOBALNET;

NetR.dwType := RESOURCETYPE_DISK;

NetR.dwDisplayType := RESOURCEDISPLAYTYPE_SHARE;

NetR.dwUsage := RESOURCEUSAGE_CONNECTABLE;

NetR.lpLocalName := 'j:';

NetR.lpRemoteName := '//Lifang/c';

ErrInfo := WNetAddConnection2(NetR, '', '', CONNECT_UPDATE_PROFILE);

If ErrInfo = NO_ERROR Then

messagebox(0,'Net connection successful!','',0)

Else

messagebox(0,'ERROR: ','',0)
 
to app2001.
谢谢你。但是我的问题关键是在以域成员身份登录服务器以后,在程序里是否还可以指定其他的用户去登录服务器。在我使用WNetCancelConnection2该函数以后,报的错是ERROR_SESSION_CREDENTIAL_CONFLICT,而在不是域成员的机器上(win2000或是win98)都非常正常。
 

Similar threads

I
回复
0
查看
566
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部