我的应用将在客户端桌面计算机上的LAN上使用。在此LAN中,有一个专用的Windows 2k服务器。没有AD。
用户必须填写服务器的用户帐户信息,以便应用程序可以使用此帐户进行一些远程操作(映射网络驱动器)
如何针对此服务器检查用户凭据?
映射驱动程序时,如果用户帐户身份验证不正常,我会收到错误,但我想在尝试映射之前获取此信息。
类似于LogonUser API函数,但在远程计算机上工作。
谢谢,
答案 0 :(得分:3)
我用的是单位 SSPIValidatePassword.pas 来自http://www.michael-puff.de/Programmierung/Delphi/Units/ 哪个适合我。该单元中唯一导出的功能 SSPLogonUser返回true或false ....
答案 1 :(得分:3)
您可以将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;