My requirement is to validate the password entered by a user is the correct password with which he had logged-in. So, I have written the below code, but it is always saying
At first, your LogonUser function prototype is wrong as well as its call. You can't mix data types of the function prototype and you can't use arbitrary values in a function call. You can use something like this instead:
[Code]
#ifdef UNICODE
#define AW "W"
#else
#define AW "A"
#endif
const
LOGON32_LOGON_INTERACTIVE = 2;
LOGON32_LOGON_NETWORK = 3;
LOGON32_LOGON_BATCH = 4;
LOGON32_LOGON_SERVICE = 5;
LOGON32_LOGON_UNLOCK = 7;
LOGON32_LOGON_NETWORK_CLEARTEXT = 8;
LOGON32_LOGON_NEW_CREDENTIALS = 9;
LOGON32_PROVIDER_DEFAULT = 0;
LOGON32_PROVIDER_WINNT40 = 2;
LOGON32_PROVIDER_WINNT50 = 3;
ERROR_SUCCESS = 0;
ERROR_LOGON_FAILURE = 1326;
function LogonUser(lpszUsername, lpszDomain, lpszPassword: string;
dwLogonType, dwLogonProvider: DWORD; var phToken: THandle): BOOL;
external 'LogonUser{#AW}@advapi32.dll stdcall';
var
ServerDetailsPage: TInputQueryWizardPage;
function TryLogonUser(const Domain, UserName, Password: string;
var ErrorCode: Longint): Boolean;
var
Token: THandle;
begin
Result := LogonUser(UserName, Domain, Password, LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, Token);
ErrorCode := DLLGetLastError;
end;
procedure InitializeWizard;
var
UserName: string;
begin
UserName := AddBackslash(GetEnv('USERDOMAIN')) + GetUserNameString;
ServerDetailsPage := CreateInputQueryPage(wpWelcome,
'', '', 'Please enter following data and click Next.');
ServerDetailsPage.Add('IP Address', False);
ServerDetailsPage.Add('Port Number', False);
ServerDetailsPage.Add('Domain Name\User Name', False);
ServerDetailsPage.Add('Password', True);
ServerDetailsPage.Values[1] := '80';
ServerDetailsPage.Values[2] := UserName;
end;
procedure ParseDomainUserName(const Value: string; var Domain,
UserName: string);
var
DelimPos: Integer;
begin
DelimPos := Pos('\', Value);
if DelimPos = 0 then
begin
Domain := '.';
UserName := Value;
end
else
begin
Domain := Copy(Value, 1, DelimPos - 1);
UserName := Copy(Value, DelimPos + 1, MaxInt);
end;
end;
function ServerDetailsLogonUser: Boolean;
var
Domain: string;
UserName: string;
Password: string;
ErrorCode: Longint;
begin
ParseDomainUserName(ServerDetailsPage.Values[2], Domain, UserName);
Password := ServerDetailsPage.Values[3];
Result := TryLogonUser(Domain, UserName, Password, ErrorCode);
case ErrorCode of
ERROR_SUCCESS:
MsgBox('Logon successful!', mbInformation, MB_OK);
ERROR_LOGON_FAILURE:
MsgBox('The user name or password is incorrect!', mbError, MB_OK);
else
MsgBox('Login failed!' + #13#10 + SysErrorMessage(DLLGetLastError),
mbError, MB_OK);
end;
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
if CurPageID = ServerDetailsPage.ID then
Result := ServerDetailsLogonUser;
end;