使用给定的用户名和密码从共享目录复制文件

时间:2011-09-27 12:42:49

标签: windows delphi winapi

是否有办法使用与当前用户名和密码不同的方式在特定网络共享目录中创建/复制文件?

3 个答案:

答案 0 :(得分:1)

@Luke在评论中建议的内容,或者你可以PInvoke到NetUseAdd的功能。您可以在调用NetUseAdd时传递用户名和密码,然后从当前用户会话访问此文件共享上的资源的所有尝试都将使用这些凭据。关于如何调用它的pinvoke.net上的See example - 你必须将它翻译成Delphi。

答案 1 :(得分:1)

或者,您可以使用Windows API CreateProcessWithLogon()Link to MSDN)。

答案 2 :(得分:1)

这是我用来连接远程驱动器并将其映射到本地驱动器盘符(以及相应的取消映射操作)。将驱动器映射到驱动器号后,就像使用任何其他驱动器一样进行复制:

function MapNetworkDrive(const RemoteName, LocalDrive, 
  UserName, Password: string): Boolean;
var
  NetRes: TNetResource;
  Res: DWord;
begin
  Result := True;
  FillChar(NetRes, SizeOf(TNetResource), 0);
  NetRes.dwType := RESOURCETYPE_DISK;
  NetRes.lpRemoteName := PChar(RemoteName);
  NetRes.lpLocalName := PChar(LocalDrive);
  Res := WNetAddConnection2(NetRes, PChar(Password), PChar(UserName), 0);
  Result := (Res = NO_ERROR);
  if not Result then
    SysErrorMessage(Res);
end;

function TForm1.UnmapNetworkDrive(const LocalDrive: string): Boolean;
var
  Res: DWord;
begin
  Res := WNetCancelConnection2(PChar(LocalDrive), 0, True);
  Result := (Res = NO_ERROR);
end;

使用示例:

begin
  if MapNetworkDrive('\\192.168.1.56\C$', 'H:', 'fred', 'password') then
  begin
    try
      // Do whatever between local drive and drive 'H:'
    finally
      UnmapNetworkDrive(Local);
    end;
  end;
end;