36#define ISKEYDOWN(x) (GetKeyState(x) & 0x8000)
73 pDlgData->hLogoBitmap =
LoadImageW(pDlgData->pgContext->hDllInstance,
76 if (pDlgData->hLogoBitmap)
78 GetObject(pDlgData->hLogoBitmap,
sizeof(bm), &bm);
79 pDlgData->LogoWidth = bm.bmWidth;
80 pDlgData->LogoHeight = bm.bmHeight;
85 if (pDlgData->hBarBitmap)
87 GetObject(pDlgData->hBarBitmap,
sizeof(bm), &bm);
88 pDlgData->BarWidth = bm.bmWidth;
89 pDlgData->BarHeight = bm.bmHeight;
123 TRACE(
"GUIInitialize(%p)\n", pgContext);
140 L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",
146 WARN(
"RegOpenKeyExW() failed with error %lu\n", rc);
162 BufSize = dwWelcomeSize + ((dwTitleLength + 1) *
sizeof(
WCHAR));
192 INT xNew, yNew, cxNew, cyNew;
193 INT cxLabel, cyLabel, dyLabel;
194 RECT rc, rcBar, rcLabel, rcWnd;
221 dyLabel = bmLogo.bmHeight - rcBar.
top;
228 MoveWindow(hwndLogo, 0, 0, bmLogo.bmWidth, bmLogo.bmHeight,
TRUE);
229 MoveWindow(hwndBar, 0, bmLogo.bmHeight, bmLogo.bmWidth, bmBar.bmHeight,
TRUE);
247 xNew = xOld - (cxNew -
cxOld) / 2;
248 yNew = yOld - (cyNew -
cyOld) / 2;
272 msg->Context->hStatusWindow = hwndDlg;
280 if (pDlgData ==
NULL)
374 ERR(
"Duplicating handle failed!\n");
381 ERR(
"Setting thread desktop failed!\n");
409 TRACE(
"GUIDisplayStatusMessage(%ws)\n", pMessage);
411 if (!pgContext->hStatusWindow)
423 msg->Context = pgContext;
425 msg->pTitle = pTitle;
426 msg->pMessage = pMessage;
427 msg->hDesktop = hDesktop;
431 if (!
msg->StartupEvent)
476 if (pgContext->hStatusWindow)
479 pgContext->hStatusWindow =
NULL;
501 if (pDlgData ==
NULL)
532 TRACE(
"GUIDisplaySASNotice()\n");
535 pgContext->pWlxFuncs->WlxDialogBoxParam(pgContext->hWlx,
536 pgContext->hDllInstance,
577 WCHAR szCaption[256];
583 return pgContext->pWlxFuncs->WlxMessageBox(pgContext->hWlx,
599 WCHAR OldPassword[256];
600 WCHAR NewPassword1[256];
601 WCHAR NewPassword2[256];
604 ULONG RequestBufferSize;
605 ULONG ResponseBufferSize = 0;
618 if (
wcscmp(NewPassword1, NewPassword2) != 0)
639 if (RequestBuffer ==
NULL)
641 ERR(
"HeapAlloc failed\n");
696 ERR(
"ConnectToLsa() failed\n");
702 pgContext->AuthenticationPackage,
705 (
PVOID*)&ResponseBuffer,
710 ERR(
"LsaCallAuthenticationPackage failed (Status 0x%08lx)\n",
Status);
728 if ((
wcscmp(UserName, pgContext->UserName) == 0) &&
729 (
wcscmp(Domain, pgContext->DomainName) == 0) &&
730 (
wcscmp(OldPassword, pgContext->Password) == 0))
732 ZeroMemory(pgContext->Password,
sizeof(pgContext->Password));
733 wcscpy(pgContext->Password, NewPassword1);
737 if (RequestBuffer !=
NULL)
740 if (ResponseBuffer !=
NULL)
827 wsprintfW(Buffer4, Buffer1, Buffer2, Buffer3);
843 TRACE(
"OnChangePassword()\n");
845 res = pgContext->pWlxFuncs->WlxDialogBoxParam(
847 pgContext->hDllInstance,
899 return pgContext->pWlxFuncs->WlxDialogBoxParam(
901 pgContext->hDllInstance,
916 DWORD ShutdownOptions;
918 TRACE(
"OnShutDown(%p %p)\n", hwndDlg, pgContext);
923 if (pgContext->UserToken !=
NULL)
933 ERR(
"WL: ImpersonateLoggedOnUser() failed with error %lu\n",
GetLastError());
941 if (pgContext->UserToken !=
NULL)
950 ERR(
"WL: ImpersonateLoggedOnUser() failed with error %lu\n",
GetLastError());
1020 ERR(
"Emergency restarting NT...\n");
1061 TRACE(
"GUILoggedOnSAS()\n");
1070 pgContext->pWlxFuncs->WlxSwitchDesktopToWinlogon(
1073 result = pgContext->pWlxFuncs->WlxDialogBoxParam(
1075 pgContext->hDllInstance,
1089 pgContext->pWlxFuncs->WlxSwitchDesktopToUser(
1143 TRACE(
"Account locked!\n");
1172 pgContext->UserName,
1173 pgContext->DomainName,
1174 pgContext->Password,
1178 TRACE(
"Login after password change failed! (Status 0x%08lx)\n",
Status);
1211 TRACE(
"Other error!\n");
1222 TRACE(
"DoLoginTasks failed! Status 0x%08lx\n",
Status);
1228 ERR(
"Failed to create the profile!\n");
1232 ZeroMemory(pgContext->Password,
sizeof(pgContext->Password));
1238 pgContext->bAutoAdminLogon =
FALSE;
1240 if (UserName !=
NULL)
1256 HWND hwndDomainComboBox,
1260 DWORD dwComputerNameLength;
1266 dwComputerNameLength =
_countof(szComputerName);
1275 if (lFindIndex ==
CB_ERR)
1281 lIndex = lFindIndex;
1306 if (pDlgData ==
NULL)
1422 TRACE(
"GUILoggedOutSAS()\n");
1425 L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",
1432 L"LegalNoticeCaption",
1445 pgContext->pWlxFuncs->WlxDialogBoxParam(pgContext->hWlx,
1446 pgContext->hDllInstance,
1459 result = pgContext->pWlxFuncs->WlxDialogBoxParam(
1461 pgContext->hDllInstance,
1469 WARN(
"WlxLoggedOutSAS() returns 0x%x\n",
result);
1473 WARN(
"WlxDialogBoxParam() failed (0x%x)\n",
result);
1518 wcscmp(UserName, pgContext->UserName) == 0 &&
1524 else if (
wcscmp(UserName, pgContext->UserName) == 0 &&
1543 wsprintfW(Buffer2, Buffer1, pgContext->DomainName, pgContext->UserName);
1550 if (UserName !=
NULL)
1579 if (pDlgData ==
NULL)
1636 TRACE(
"GUILockedSAS()\n");
1638 result = pgContext->pWlxFuncs->WlxDialogBoxParam(
1640 pgContext->hDllInstance,
1648 WARN(
"GUILockedSAS() returns 0x%x\n",
result);
1652 WARN(
"GUILockedSAS() failed (0x%x)\n",
result);
1673 if (pDlgData ==
NULL)
1709 TRACE(
"GUIdisplayLockedNotice()\n");
1711 pgContext->pWlxFuncs->WlxDialogBoxParam(
1713 pgContext->hDllInstance,
#define RegCloseKey(hKey)
static HINSTANCE hDllInstance
BOOL WINAPI GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize)
#define NT_SUCCESS(StatCode)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
BOOL WINAPI ImpersonateLoggedOnUser(HANDLE hToken)
#define GetCurrentProcess()
#define HeapFree(x, y, z)
BOOL WINAPI DuplicateHandle(IN HANDLE hSourceProcessHandle, IN HANDLE hSourceHandle, IN HANDLE hTargetProcessHandle, OUT LPHANDLE lpTargetHandle, IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN DWORD dwOptions)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
LANGID WINAPI GetUserDefaultLangID(void)
static VOID SetDomainComboBox(HWND hwndDomainComboBox, PGINA_CONTEXT pgContext)
static BOOL DoLogon(IN HWND hwndDlg, IN OUT PGINA_CONTEXT pgContext)
static INT_PTR CALLBACK LogonDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
static BOOL GetTextboxText(IN HWND hwndDlg, IN INT TextboxId, OUT LPWSTR *pText)
static INT_PTR CALLBACK LogOffDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
static DWORD WINAPI StartupWindowThread(LPVOID lpParam)
static INT OnShutDown(IN HWND hwndDlg, IN PGINA_CONTEXT pgContext)
static INT_PTR CALLBACK WelcomeDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
struct _DLG_DATA * PDLG_DATA
static INT_PTR CALLBACK UnlockDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
static INT_PTR CALLBACK StatusDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
static INT_PTR CALLBACK LegalNoticeDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
static PDLG_DATA DlgData_Create(HWND hwndDlg, PGINA_CONTEXT pgContext)
static INT GUILoggedOnSAS(IN OUT PGINA_CONTEXT pgContext, IN DWORD dwSasType)
static VOID DlgData_Destroy(_Inout_ HWND hwndDlg)
static INT_PTR CALLBACK SecurityDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
static VOID SetWelcomeText(HWND hWnd)
static INT_PTR CALLBACK LockedDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
struct _DISPLAYSTATUSMSG * PDISPLAYSTATUSMSG
static BOOL GUIInitialize(IN OUT PGINA_CONTEXT pgContext)
static INT GUILockedSAS(IN OUT PGINA_CONTEXT pgContext)
static INT GUILoggedOutSAS(IN OUT PGINA_CONTEXT pgContext)
struct _LEGALNOTICEDATA LEGALNOTICEDATA
static INT_PTR CALLBACK ChangePasswordDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
static VOID AdjustStatusMessageWindow(HWND hwndDlg, PDLG_DATA pDlgData)
static BOOL DoChangePassword(IN PGINA_CONTEXT pgContext, IN HWND hwndDlg)
static BOOL GUIDisplayStatusMessage(IN PGINA_CONTEXT pgContext, IN HDESK hDesktop, IN DWORD dwOptions, IN PWSTR pTitle, IN PWSTR pMessage)
static VOID SetLockMessage(HWND hwnd, INT nDlgItem, PGINA_CONTEXT pgContext)
static VOID GUIDisplayLockedNotice(IN OUT PGINA_CONTEXT pgContext)
static INT ResourceMessageBox(IN PGINA_CONTEXT pgContext, IN HWND hwnd, IN UINT uType, IN UINT uCaption, IN UINT uText)
static BOOL GUIRemoveStatusMessage(IN PGINA_CONTEXT pgContext)
static BOOL OnChangePassword(IN HWND hwnd, IN PGINA_CONTEXT pgContext)
struct _DISPLAYSTATUSMSG DISPLAYSTATUSMSG
struct _LEGALNOTICEDATA * PLEGALNOTICEDATA
static VOID OnInitSecurityDlg(HWND hwnd, PGINA_CONTEXT pgContext)
static VOID GUIDisplaySASNotice(IN OUT PGINA_CONTEXT pgContext)
static INT OnLogOff(IN HWND hwndDlg, IN PGINA_CONTEXT pgContext)
static BOOL DoUnlock(IN HWND hwndDlg, IN PGINA_CONTEXT pgContext, OUT LPINT Action)
static VOID DlgData_LoadBitmaps(_Inout_ PDLG_DATA pDlgData)
struct _DLG_DATA DLG_DATA
NTSTATUS ConnectToLsa(PGINA_CONTEXT pgContext)
#define IDC_CHANGEPWD_USERNAME
#define IDS_COMPUTERLOCKED
#define IDS_ACCOUNTLOCKED
#define IDS_LOCKEDWRONGUSER
#define IDS_CHANGEPWDTITLE
#define IDS_INVALIDLOGONHOURS
#define IDC_CHANGEPWD_OLDPWD
#define IDC_STATUS_MESSAGE
#define IDC_CHANGEPWD_DOMAIN
#define IDS_LOGONWRONGUSERORPWD
#define IDC_UNLOCK_USERNAME
#define IDS_PASSWORDMUSTCHANGE
#define IDC_SECURITY_TASKMGR
#define IDC_CHANGEPWD_NEWPWD2
#define IDC_SECURITY_CHANGEPWD
#define IDC_CHANGEPWD_NEWPWD1
#define IDS_LOCKEDWRONGPASSWORD
#define IDS_NONMATCHINGPASSWORDS
#define IDC_LOCKED_MESSAGE
#define IDC_SECURITY_SHUTDOWN
#define IDC_SECURITY_MESSAGE
#define IDS_INVALIDWORKSTATION
#define IDC_SECURITY_LOGOFF
#define IDC_SECURITY_LOGONDATE
#define IDS_PASSWORDEXPIRED
#define IDC_UNLOCK_PASSWORD
#define IDS_PASSWORDCHANGED
#define IDC_LOGON_PASSWORD
#define IDS_EMERGENCYRESTARTTITLE
#define IDC_LOGON_SHUTDOWN
#define IDS_LOGONUSERDISABLED
#define IDS_ACCOUNTEXPIRED
#define IDC_UNLOCK_MESSAGE
#define IDS_EMERGENCYLOGOFFTITLE
#define IDS_EMERGENCYRESTART
#define IDC_SECURITY_LOCK
#define IDC_LEGALNOTICE_TEXT
#define IDC_LOGON_USERNAME
#define IDS_ACCOUNTRESTRICTION
#define IDS_EMERGENCYLOGOFF
static VOID BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
VOID NTAPI ProtocolStatus(NDIS_HANDLE BindingContext, NDIS_STATUS GenerelStatus, PVOID StatusBuffer, UINT StatusBufferSize)
Called by NDIS when the underlying driver has changed state.
#define ERROR_FILE_NOT_FOUND
#define SE_SHUTDOWN_PRIVILEGE
LONG ReadRegSzValue(IN HKEY hKey, IN LPCWSTR pszValue, OUT LPWSTR *pValue)
BOOL CreateProfile(IN OUT PGINA_CONTEXT pgContext, IN PWSTR UserName, IN PWSTR Domain, IN PWSTR Password)
BOOL DoAdminUnlock(IN PGINA_CONTEXT pgContext, IN PWSTR UserName, IN PWSTR Domain, IN PWSTR Password)
NTSTATUS DoLoginTasks(IN OUT PGINA_CONTEXT pgContext, IN PWSTR UserName, IN PWSTR Domain, IN PWSTR Password, OUT PNTSTATUS SubStatus)
DWORD GetAllowedShutdownOptions(VOID)
VOID SaveShutdownSelState(DWORD ShutdownCode)
DWORD LoadShutdownSelState(VOID)
DWORD GetDefaultShutdownSelState(VOID)
INT_PTR ShutdownDialog(IN HWND hwndDlg, IN DWORD ShutdownOptions, IN PGINA_CONTEXT pgContext)
DWORD GetDefaultShutdownOptions(VOID)
struct GINA_CONTEXT * PGINA_CONTEXT
NTSYSAPI NTSTATUS NTAPI RtlAdjustPrivilege(_In_ ULONG Privilege, _In_ BOOLEAN NewValue, _In_ BOOLEAN ForThread, _Out_ PBOOLEAN OldValue)
#define LOCALE_USER_DEFAULT
#define UNREFERENCED_PARAMETER(P)
_IRQL_requires_same_ _In_ PLSA_STRING _In_ SECURITY_LOGON_TYPE _In_ ULONG _In_ ULONG _In_opt_ PTOKEN_GROUPS _In_ PTOKEN_SOURCE _Out_ PVOID _Out_ PULONG _Inout_ PLUID _Out_ PHANDLE _Out_ PQUOTA_LIMITS _Out_ PNTSTATUS SubStatus
NTSTATUS NTAPI NtShutdownSystem(IN SHUTDOWN_ACTION Action)
struct _MSV1_0_CHANGEPASSWORD_REQUEST MSV1_0_CHANGEPASSWORD_REQUEST
NTSTATUS NTAPI LsaCallAuthenticationPackage(HANDLE, ULONG, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS)
NTSTATUS NTAPI LsaFreeReturnBuffer(PVOID)
#define STATUS_INVALID_LOGON_HOURS
#define STATUS_ACCOUNT_DISABLED
#define STATUS_PASSWORD_MUST_CHANGE
#define STATUS_PASSWORD_EXPIRED
#define STATUS_INVALID_WORKSTATION
#define STATUS_ACCOUNT_EXPIRED
#define STATUS_ACCOUNT_LOCKED_OUT
#define STATUS_LOGON_FAILURE
#define STATUS_ACCOUNT_RESTRICTION
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
BOOL bDontDisplayLastUserName
BOOL bShutdownWithoutLogon
MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
UNICODE_STRING AccountName
UNICODE_STRING NewPassword
UNICODE_STRING OldPassword
UNICODE_STRING DomainName
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
#define RtlCopyMemory(Destination, Source, Length)
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
DWORD WINAPI GetLastError(void)
BOOL WINAPI RevertToSelf(void)
#define MAX_COMPUTERNAME_LENGTH
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
BOOL WINAPI DeleteDC(_In_ HDC)
#define HKEY_LOCAL_MACHINE
struct tagDRAWITEMSTRUCT * LPDRAWITEMSTRUCT
#define GetWindowLongPtrW
BOOL WINAPI SetThreadDesktop(_In_ HDESK)
#define GetWindowTextLength
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
BOOL WINAPI AdjustWindowRectEx(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL, _In_ DWORD)
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
#define CB_FINDSTRINGEXACT
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HWND WINAPI GetDesktopWindow(void)
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
HWND WINAPI SetFocus(_In_opt_ HWND)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
BOOL WINAPI UpdateWindow(_In_ HWND)
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
int WINAPI GetWindowTextLengthW(_In_ HWND)
#define MB_ICONEXCLAMATION
#define MB_ICONINFORMATION
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define MAKEINTRESOURCEW(i)
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
#define SetWindowLongPtrW
BOOL WINAPI DrawStateW(_In_ HDC, _In_opt_ HBRUSH, _In_opt_ DRAWSTATEPROC, _In_ LPARAM, _In_ WPARAM, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
#define WLX_SAS_ACTION_NONE
#define WLX_SAS_ACTION_FORCE_LOGOFF
#define WLX_SAS_ACTION_UNLOCK_WKSTA
#define WLX_SAS_TYPE_CTRL_ALT_DEL
#define WLX_SAS_ACTION_PWD_CHANGED
#define WLX_SAS_ACTION_SWITCH_CONSOLE
#define WLX_SAS_ACTION_LOGON
#define WLX_SAS_ACTION_TASKLIST
#define WLX_SAS_ACTION_LOCK_WKSTA
#define WLX_SAS_ACTION_LOGOFF
#define DUPLICATE_SAME_ACCESS