我的应用程序将在客户端台式计算机上的 LAN 上使用。在这个 LAN 中,有一个专用的 Windows 2k 服务器。没有广告。
用户必须填写服务器的用户帐户信息,以便应用程序可以使用此帐户进行一些远程操作(映射网络驱动器)
如何针对此服务器检查用户凭据?
映射驱动程序时,如果用户帐户身份验证不正确,我会遇到错误,但我想在尝试映射之前获得此信息。
类似于 LogonUser API 函数,但在远程计算机上工作。
谢谢,
我的应用程序将在客户端台式计算机上的 LAN 上使用。在这个 LAN 中,有一个专用的 Windows 2k 服务器。没有广告。
用户必须填写服务器的用户帐户信息,以便应用程序可以使用此帐户进行一些远程操作(映射网络驱动器)
如何针对此服务器检查用户凭据?
映射驱动程序时,如果用户帐户身份验证不正确,我会遇到错误,但我想在尝试映射之前获得此信息。
类似于 LogonUser API 函数,但在远程计算机上工作。
谢谢,
我使用来自http://www.michael-puff.de/Programmierung/Delphi/Units/的单元 SSPIValidatePassword.pas, 它适合我的工作。该单元中唯一导出的函数 SSPLogonUser 返回 true 或 false....
您可以将WNetUseConnection
函数与CONNECT_INTERACTIVE
和CONNECT_PROMPT
标志一起使用。当您输入正确的凭据时,这将与空的用户 ID 和密码参数一起调用凭据对话框并连接到网络资源:
procedure TForm1.Button1Click(Sender: TObject);
var
BufferSize: DWORD;
ResultFlag: DWORD;
NetResource: TNetResource;
begin
NetResource.dwType := RESOURCETYPE_DISK;
NetResource.lpLocalName := nil;
NetResource.lpRemoteName := '\\MySuperSecret\Place';
NetResource.lpProvider := nil;
if WNetUseConnection(Handle, NetResource, nil, nil, CONNECT_INTERACTIVE or
CONNECT_PROMPT, nil, BufferSize, ResultFlag) = NO_ERROR
then
ShowMessage('Connected!');
end;
要在不提示输入凭据的情况下连接到网络资源,请删除上面指定的标志,如下面的函数所示,连接成功时应返回 True,失败时返回 False。下面是参数说明:
function TryConnect(const RemoteName, UserName, Password: string): Boolean;
var
BufferSize: DWORD;
ResultFlag: DWORD;
NetResource: TNetResource;
begin
NetResource.dwType := RESOURCETYPE_DISK;
NetResource.lpLocalName := nil;
NetResource.lpRemoteName := PChar(RemoteName);
NetResource.lpProvider := nil;
Result := WNetUseConnection(0, NetResource, PChar(UserName), PChar(Password),
0, nil, BufferSize, ResultFlag) = NO_ERROR;
end;