📄 jwawincred.pas
字号:
function CredUIPromptForCredentialsA(pUiInfo: PCREDUI_INFOA; pszTargetName: PCSTR; pContext: PCtxtHandle; dwAuthError: DWORD; pszUserName: PSTR; ulUserNameBufferSize: ULONG; pszPassword: PSTR; ulPasswordBufferSize: ULONG; var save: BOOL; dwFlags: DWORD): DWORD; stdcall;
{$EXTERNALSYM CredUIPromptForCredentialsA}
{$IFDEF UNICODE}
function CredUIPromptForCredentials(pUiInfo: PCREDUI_INFOW; pszTargetName: LPCWSTR; pContext: PCtxtHandle; dwAuthError: DWORD; pszUserName: PWSTR; ulUserNameBufferSize: ULONG; pszPassword: PWSTR; ulPasswordBufferSize: ULONG; var save: BOOL; dwFlags: DWORD): DWORD; stdcall;
{$EXTERNALSYM CredUIPromptForCredentials}
{$ELSE}
function CredUIPromptForCredentials(pUiInfo: PCREDUI_INFOA; pszTargetName: PCSTR; pContext: PCtxtHandle; dwAuthError: DWORD; pszUserName: PSTR; ulUserNameBufferSize: ULONG; pszPassword: PSTR; ulPasswordBufferSize: ULONG; var save: BOOL; dwFlags: DWORD): DWORD; stdcall;
{$EXTERNALSYM CredUIPromptForCredentials}
{$ENDIF}
function CredUIParseUserNameW(pszUserName: LPCWSTR; pszUser: PWSTR; ulUserBufferSize: ULONG; pszDomain: PWSTR; ulDomainBufferSize: ULONG): DWORD; stdcall;
{$EXTERNALSYM CredUIParseUserNameW}
function CredUIParseUserNameA(pszUserName: PCSTR; pszUser: PSTR; ulUserBufferSize: ULONG; pszDomain: PSTR; ulDomainBufferSize: ULONG): DWORD; stdcall;
{$EXTERNALSYM CredUIParseUserNameA}
{$IFDEF UNICODE}
function CredUIParseUserName(pszUserName: LPCWSTR; pszUser: PWSTR; ulUserBufferSize: ULONG; pszDomain: PWSTR; ulDomainBufferSize: ULONG): DWORD; stdcall;
{$EXTERNALSYM CredUIParseUserName}
{$ELSE}
function CredUIParseUserName(pszUserName: PCSTR; pszUser: PSTR; ulUserBufferSize: ULONG; pszDomain: PSTR; ulDomainBufferSize: ULONG): DWORD; stdcall;
{$EXTERNALSYM CredUIParseUserName}
{$ENDIF}
function CredUICmdLinePromptForCredentialsW(pszTargetName: LPCWSTR; pContext: PCtxtHandle; dwAuthError: DWORD; UserName: PWSTR; ulUserBufferSize: ULONG; pszPassword: PWSTR; ulPasswordBufferSize: ULONG; pfSave: PBOOL; dwFlags: DWORD): DWORD; stdcall;
{$EXTERNALSYM CredUICmdLinePromptForCredentialsW}
function CredUICmdLinePromptForCredentialsA(pszTargetName: PCSTR; pContext: PCtxtHandle; dwAuthError: DWORD; UserName: PSTR; ulUserBufferSize: ULONG; pszPassword: PSTR; ulPasswordBufferSize: ULONG; pfSave: PBOOL; dwFlags: DWORD): DWORD; stdcall;
{$EXTERNALSYM CredUICmdLinePromptForCredentialsA}
{$IFDEF UNICODE}
function CredUICmdLinePromptForCredentials(pszTargetName: LPCWSTR; pContext: PCtxtHandle; dwAuthError: DWORD; UserName: PWSTR; ulUserBufferSize: ULONG; pszPassword: PWSTR; ulPasswordBufferSize: ULONG; pfSave: PBOOL; dwFlags: DWORD): DWORD; stdcall;
{$EXTERNALSYM CredUICmdLinePromptForCredentials}
{$ELSE}
function CredUICmdLinePromptForCredentials(pszTargetName: PCSTR; pContext: PCtxtHandle; dwAuthError: DWORD; UserName: PSTR; ulUserBufferSize: ULONG; pszPassword: PSTR; ulPasswordBufferSize: ULONG; pfSave: PBOOL; dwFlags: DWORD): DWORD; stdcall;
{$EXTERNALSYM CredUICmdLinePromptForCredentials}
{$ENDIF}
//
// Call this API with bConfirm set to TRUE to confirm that the credential (previously created
// via CredUIGetCredentials or CredUIPromptForCredentials worked, or with bConfirm set to FALSE
// to indicate it didn't
function CredUIConfirmCredentialsW(pszTargetName: LPCWSTR; bConfirm: BOOL): DWORD; stdcall;
{$EXTERNALSYM CredUIConfirmCredentialsW}
function CredUIConfirmCredentialsA(pszTargetName: PCSTR; bConfirm: BOOL): DWORD; stdcall;
{$EXTERNALSYM CredUIConfirmCredentialsA}
{$IFDEF UNICODE}
function CredUIConfirmCredentials(pszTargetName: LPCWSTR; bConfirm: BOOL): DWORD; stdcall;
{$EXTERNALSYM CredUIConfirmCredentials}
{$ELSE}
function CredUIConfirmCredentials(pszTargetName: PCSTR; bConfirm: BOOL): DWORD; stdcall;
{$EXTERNALSYM CredUIConfirmCredentials}
{$ENDIF}
implementation
function CREDUIP_IS_USER_PASSWORD_ERROR(_Status: NTSTATUS): BOOL;
begin
Result :=
(DWORD(_Status) = ERROR_LOGON_FAILURE) or
(_Status = HRESULT_FROM_WIN32(ERROR_LOGON_FAILURE)) or
(_Status = STATUS_LOGON_FAILURE) or
(_Status = HRESULT_FROM_NT(STATUS_LOGON_FAILURE)) or
(DWORD(_Status) = ERROR_ACCESS_DENIED) or
(_Status = HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED)) or
(_Status = STATUS_ACCESS_DENIED) or
(_Status = HRESULT_FROM_NT(STATUS_ACCESS_DENIED)) or
(DWORD(_Status) = ERROR_INVALID_PASSWORD) or
(_Status = HRESULT_FROM_WIN32(ERROR_INVALID_PASSWORD)) or
(_Status = STATUS_WRONG_PASSWORD) or
(_Status = HRESULT_FROM_NT(STATUS_WRONG_PASSWORD)) or
(_Status = SEC_E_NO_CREDENTIALS) or
(_Status = SEC_E_LOGON_DENIED);
end;
function CREDUIP_IS_DOWNGRADE_ERROR(_Status: NTSTATUS): BOOL;
begin
Result :=
(DWORD(_Status) = ERROR_DOWNGRADE_DETECTED) or
(_Status = HRESULT_FROM_WIN32(ERROR_DOWNGRADE_DETECTED)) or
(_Status = STATUS_DOWNGRADE_DETECTED) or
(_Status = HRESULT_FROM_NT(STATUS_DOWNGRADE_DETECTED))
end;
function CREDUIP_IS_EXPIRED_ERROR(_Status: NTSTATUS): BOOL;
begin
Result :=
(DWORD(_Status) = ERROR_PASSWORD_EXPIRED) or
(_Status = HRESULT_FROM_WIN32( ERROR_PASSWORD_EXPIRED)) or
(_Status = STATUS_PASSWORD_EXPIRED) or
(_Status = HRESULT_FROM_NT( STATUS_PASSWORD_EXPIRED)) or
(DWORD(_Status) = ERROR_PASSWORD_MUST_CHANGE) or
(_Status = HRESULT_FROM_WIN32( ERROR_PASSWORD_MUST_CHANGE)) or
(_Status = STATUS_PASSWORD_MUST_CHANGE) or
(_Status = HRESULT_FROM_NT( STATUS_PASSWORD_MUST_CHANGE)) or
(_Status = NERR_PasswordExpired) or
(_Status = HRESULT_FROM_WIN32(NERR_PasswordExpired));
end;
function CREDUI_IS_AUTHENTICATION_ERROR(_Status: NTSTATUS): BOOL;
begin
Result := CREDUIP_IS_USER_PASSWORD_ERROR(_Status) or CREDUIP_IS_DOWNGRADE_ERROR(_Status) or CREDUIP_IS_EXPIRED_ERROR(_Status);
end;
function CREDUI_NO_PROMPT_AUTHENTICATION_ERROR(_Status: NTSTATUS): BOOL;
begin
Result :=
(_Status = 1935{TODO Temp until WinError updated ERROR_AUTHENTICATION_FIREWALL_FAILED}) or
(_Status = HRESULT_FROM_WIN32(1935{TODO ERROR_AUTHENTICATION_FIREWALL_FAILED})) or
(_Status = STATUS_AUTHENTICATION_FIREWALL_FAILED) or
(_Status = HRESULT_FROM_NT(STATUS_AUTHENTICATION_FIREWALL_FAILED)) or
(DWORD(_Status) = ERROR_ACCOUNT_DISABLED) or
(_Status = HRESULT_FROM_WIN32(ERROR_ACCOUNT_DISABLED)) or
(_Status = STATUS_ACCOUNT_DISABLED) or
(_Status = HRESULT_FROM_NT(STATUS_ACCOUNT_DISABLED)) or
(DWORD(_Status) = ERROR_ACCOUNT_RESTRICTION) or
(_Status = HRESULT_FROM_WIN32(ERROR_ACCOUNT_RESTRICTION)) or
(_Status = STATUS_ACCOUNT_RESTRICTION) or
(_Status = HRESULT_FROM_NT(STATUS_ACCOUNT_RESTRICTION)) or
(DWORD(_Status) = ERROR_ACCOUNT_LOCKED_OUT) or
(_Status = HRESULT_FROM_WIN32(ERROR_ACCOUNT_LOCKED_OUT)) or
(_Status = STATUS_ACCOUNT_LOCKED_OUT) or
(_Status = HRESULT_FROM_NT(STATUS_ACCOUNT_LOCKED_OUT)) or
(DWORD(_Status) = ERROR_ACCOUNT_EXPIRED) or
(_Status = HRESULT_FROM_WIN32(ERROR_ACCOUNT_EXPIRED)) or
(_Status = STATUS_ACCOUNT_EXPIRED) or
(_Status = HRESULT_FROM_NT(STATUS_ACCOUNT_EXPIRED)) or
(DWORD(_Status) = ERROR_LOGON_TYPE_NOT_GRANTED) or
(_Status = HRESULT_FROM_WIN32(ERROR_LOGON_TYPE_NOT_GRANTED)) or
(_Status = STATUS_LOGON_TYPE_NOT_GRANTED) or
(_Status = HRESULT_FROM_NT(STATUS_LOGON_TYPE_NOT_GRANTED));
end;
const
credapi = 'advapi32.dll';
credui = 'credui.dll';
{$IFDEF DYNAMIC_LINK}
var
_CredWriteW: Pointer;
function CredWriteW;
begin
GetProcedureAddress(_CredWriteW, credapi, 'CredWriteW');
asm
mov esp, ebp
pop ebp
jmp [_CredWriteW]
end;
end;
{$ELSE}
function CredWriteW; external credapi name 'CredWriteW';
{$ENDIF DYNAMIC_LINK}
{$IFDEF DYNAMIC_LINK}
var
_CredWriteA: Pointer;
function CredWriteA;
begin
GetProcedureAddress(_CredWriteA, credapi, 'CredWriteA');
asm
mov esp, ebp
pop ebp
jmp [_CredWriteA]
end;
end;
{$ELSE}
function CredWriteA; external credapi name 'CredWriteA';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}
{$IFDEF DYNAMIC_LINK}
var
_CredWrite: Pointer;
function CredWrite;
begin
GetProcedureAddress(_CredWrite, credapi, 'CredWriteW');
asm
mov esp, ebp
pop ebp
jmp [_CredWrite]
end;
end;
{$ELSE}
function CredWrite; external credapi name 'CredWriteW';
{$ENDIF DYNAMIC_LINK}
{$ELSE}
{$IFDEF DYNAMIC_LINK}
var
_CredWrite: Pointer;
function CredWrite;
begin
GetProcedureAddress(_CredWrite, credapi, 'CredWriteA');
asm
mov esp, ebp
pop ebp
jmp [_CredWrite]
end;
end;
{$ELSE}
function CredWrite; external credapi name 'CredWriteA';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}
{$IFDEF DYNAMIC_LINK}
var
_CredReadW: Pointer;
function CredReadW;
begin
GetProcedureAddress(_CredReadW, credapi, 'CredReadW');
asm
mov esp, ebp
pop ebp
jmp [_CredReadW]
end;
end;
{$ELSE}
function CredReadW; external credapi name 'CredReadW';
{$ENDIF DYNAMIC_LINK}
{$IFDEF DYNAMIC_LINK}
var
_CredReadA: Pointer;
function CredReadA;
begin
GetProcedureAddress(_CredReadA, credapi, 'CredReadA');
asm
mov esp, ebp
pop ebp
jmp [_CredReadA]
end;
end;
{$ELSE}
function CredReadA; external credapi name 'CredReadA';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}
{$IFDEF DYNAMIC_LINK}
var
_CredRead: Pointer;
function CredRead;
begin
GetProcedureAddress(_CredRead, credapi, 'CredReadW');
asm
mov esp, ebp
pop ebp
jmp [_CredRead]
end;
end;
{$ELSE}
function CredRead; external credapi name 'CredReadW';
{$ENDIF DYNAMIC_LINK}
{$ELSE}
{$IFDEF DYNAMIC_LINK}
var
_CredRead: Pointer;
function CredRead;
begin
GetProcedureAddress(_CredRead, credapi, 'CredReadA');
asm
mov esp, ebp
pop ebp
jmp [_CredRead]
end;
end;
{$ELSE}
function CredRead; external credapi name 'CredReadA';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}
{$IFDEF DYNAMIC_LINK}
var
_CredEnumerateW: Pointer;
function CredEnumerateW;
begin
GetProcedureAddress(_CredEnumerateW, credapi, 'CredEnumerateW');
asm
mov esp, ebp
pop ebp
jmp [_CredEnumerateW]
end;
end;
{$ELSE}
function CredEnumerateW; external credapi name 'CredEnumerateW';
{$ENDIF DYNAMIC_LINK}
{$IFDEF DYNAMIC_LINK}
var
_CredEnumerateA: Pointer;
function CredEnumerateA;
begin
GetProcedureAddress(_CredEnumerateA, credapi, 'CredEnumerateA');
asm
mov esp, ebp
pop ebp
jmp [_CredEnumerateA]
end;
end;
{$ELSE}
function CredEnumerateA; external credapi name 'CredEnumerateA';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}
{$IFDEF DYNAMIC_LINK}
var
_CredEnumerate: Pointer;
function CredEnumerate;
begin
GetProcedureAddress(_CredEnumerate, credapi, 'CredEnumerateW');
asm
mov esp, ebp
pop ebp
jmp [_CredEnumerate]
end;
end;
{$ELSE}
function CredEnumerate; external credapi name 'CredEnumerateW';
{$ENDIF DYNAMIC_LINK}
{$ELSE}
{$IFDEF DYNAMIC_LINK}
var
_CredEnumerate: Pointer;
function CredEnumerate;
begin
GetProcedureAddress(_CredEnumerate, credapi, 'CredEnumerateA');
asm
mov esp, ebp
pop ebp
jmp [_CredEnumerate]
end;
end;
{$ELSE}
function CredEnumerate; external credapi name 'CredEnumerateA';
{$ENDIF DYNAMIC_LINK}
{$ENDIF}
{$IFDEF DYNAMIC_LINK}
var
_CredWriteDomainCredentialsW: Pointer;
function CredWriteDomainCredentialsW;
begin
GetProcedureAddress(_CredWriteDomainCredentialsW, credapi, 'CredWriteDomainCredentialsW');
asm
mov esp, ebp
pop ebp
jmp [_CredWriteDomainCredentialsW]
end;
end;
{$ELSE}
function CredWriteDomainCredentialsW; external credapi name 'CredWriteDomainCredentialsW';
{$ENDIF DYNAMIC_LINK}
{$IFDEF DYNAMIC_LINK}
var
_CredWriteDomainCredentialsA: Pointer;
function CredWriteDomainCredentialsA;
begin
GetProcedureAddress(_CredWriteDomainCredentialsA, credapi, 'CredWriteDomainCredentialsA');
asm
mov esp, ebp
pop ebp
jmp [_CredWriteDomainCredentialsA]
end;
end;
{$ELSE}
function CredWriteDomainCredentialsA; external credapi name 'CredWriteDomainCredentialsA';
{$ENDIF DYNAMIC_LINK}
{$IFDEF UNICODE}
{$IFDEF DYNAMIC_LINK}
var
_CredWriteDomainCredentials: Pointer;
function CredWriteDomainCredentials;
begin
GetProcedureAddress(_CredWriteDomainCredentials, credapi, 'CredWriteDomainCredentialsW');
asm
mov esp, ebp
pop ebp
jmp [_CredWriteDomainCredentials]
end;
end;
{$ELSE}
function CredWriteDomainCredentials; external credapi name 'CredWriteDomainCredentialsW';
{$ENDIF DYNAMIC_LINK}
{$ELSE}
{$IFDEF DYNAMIC_LINK}
var
_CredWriteDomainCredentials: Pointer;
function CredWriteDomainCredentials;
begin
GetProcedureAddress(_CredWriteDomainCredentials, credapi, 'CredWriteDomainCredentialsA');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -