34#define ISKEYDOWN(x) (GetKeyState(x) & 0x8000)
71 pDlgData->hLogoBitmap =
LoadImageW(pDlgData->pgContext->hDllInstance,
74 if (pDlgData->hLogoBitmap)
76 GetObject(pDlgData->hLogoBitmap,
sizeof(bm), &bm);
77 pDlgData->LogoWidth = bm.bmWidth;
78 pDlgData->LogoHeight = bm.bmHeight;
83 if (pDlgData->hBarBitmap)
85 GetObject(pDlgData->hBarBitmap,
sizeof(bm), &bm);
86 pDlgData->BarWidth = bm.bmWidth;
87 pDlgData->BarHeight = bm.bmHeight;
121 TRACE(
"GUIInitialize(%p)\n", pgContext);
136 L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",
142 WARN(
"RegOpenKeyExW() failed with error %lu\n", rc);
158 BufSize = dwWelcomeSize + ((dwTitleLength + 1) *
sizeof(
WCHAR));
188 INT xNew, yNew, cxNew, cyNew;
189 INT cxLabel, cyLabel, dyLabel;
190 RECT rc, rcBar, rcLabel, rcWnd;
217 dyLabel = bmLogo.bmHeight - rcBar.
top;
224 MoveWindow(hwndLogo, 0, 0, bmLogo.bmWidth, bmLogo.bmHeight,
TRUE);
225 MoveWindow(hwndBar, 0, bmLogo.bmHeight, bmLogo.bmWidth, bmBar.bmHeight,
TRUE);
243 xNew = xOld - (cxNew -
cxOld) / 2;
244 yNew = yOld - (cyNew -
cyOld) / 2;
268 msg->Context->hStatusWindow = hwndDlg;
276 if (pDlgData ==
NULL)
370 ERR(
"Duplicating handle failed!\n");
377 ERR(
"Setting thread desktop failed!\n");
405 TRACE(
"GUIDisplayStatusMessage(%ws)\n", pMessage);
407 if (!pgContext->hStatusWindow)
419 msg->Context = pgContext;
421 msg->pTitle = pTitle;
422 msg->pMessage = pMessage;
423 msg->hDesktop = hDesktop;
427 if (!
msg->StartupEvent)
472 if (pgContext->hStatusWindow)
475 pgContext->hStatusWindow =
NULL;
497 if (pDlgData ==
NULL)
529 pgContext->pWlxFuncs->WlxDialogBoxParam(pgContext->hWlx,
530 pgContext->hDllInstance,
571 WCHAR szCaption[256];
577 return pgContext->pWlxFuncs->WlxMessageBox(pgContext->hWlx,
593 WCHAR OldPassword[256];
594 WCHAR NewPassword1[256];
595 WCHAR NewPassword2[256];
598 ULONG RequestBufferSize;
599 ULONG ResponseBufferSize = 0;
612 if (
wcscmp(NewPassword1, NewPassword2) != 0)
633 if (RequestBuffer ==
NULL)
635 ERR(
"HeapAlloc failed\n");
690 ERR(
"ConnectToLsa() failed\n");
696 pgContext->AuthenticationPackage,
699 (
PVOID*)&ResponseBuffer,
704 ERR(
"LsaCallAuthenticationPackage failed (Status 0x%08lx)\n",
Status);
722 if ((
wcscmp(UserName, pgContext->UserName) == 0) &&
723 (
wcscmp(Domain, pgContext->DomainName) == 0) &&
724 (
wcscmp(OldPassword, pgContext->Password) == 0))
727 wcscpy(pgContext->Password, NewPassword1);
736 if (RequestBuffer !=
NULL)
748 if (ResponseBuffer !=
NULL)
828 wsprintfW(Buffer2,
L"%s\\%s", pgContext->DomainName, pgContext->UserName);
841 wsprintfW(Buffer4, Buffer1, Buffer2, Buffer3);
846 L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",
869 L"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System",
890 L"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer",
922 TRACE(
"OnChangePassword()\n");
924 res = pgContext->pWlxFuncs->WlxDialogBoxParam(
926 pgContext->hDllInstance,
975 return pgContext->pWlxFuncs->WlxDialogBoxParam(
977 pgContext->hDllInstance,
993 DWORD ShutdownOptions = 0;
1003 pgContext->nShutdownAction = 0;
1004 if (hKeyCurrentUser)
1009 ShutdownOptions &= ~dwExcludeOptions;
1013 if ((
ret ==
IDOK) && hKeyCurrentUser)
1016 if (hKeyCurrentUser)
1083 ERR(
"Emergency restarting NT...\n");
1131 result = pgContext->pWlxFuncs->WlxDialogBoxParam(
1133 pgContext->hDllInstance,
1195 TRACE(
"Account locked!\n");
1227 pgContext->UserName,
1228 pgContext->DomainName,
1229 pgContext->Password,
1233 TRACE(
"Login after password change failed! (Status 0x%08lx)\n",
Status);
1265 TRACE(
"Other error!\n");
1276 TRACE(
"DoLoginTasks failed! Status 0x%08lx\n",
Status);
1282 ERR(
"Failed to create the profile!\n");
1292 pgContext->bAutoAdminLogon =
FALSE;
1294 if (UserName !=
NULL)
1315 HWND hwndDomainComboBox,
1319 DWORD dwComputerNameLength;
1325 dwComputerNameLength =
_countof(szComputerName);
1334 if (lFindIndex ==
CB_ERR)
1340 lIndex = lFindIndex;
1365 if (pDlgData ==
NULL)
1490 TRACE(
"GUILoggedOutSAS()\n");
1493 L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",
1500 L"LegalNoticeCaption",
1513 pgContext->pWlxFuncs->WlxDialogBoxParam(pgContext->hWlx,
1514 pgContext->hDllInstance,
1527 result = pgContext->pWlxFuncs->WlxDialogBoxParam(
1529 pgContext->hDllInstance,
1537 WARN(
"WlxLoggedOutSAS() returns 0x%x\n",
result);
1541 WARN(
"WlxDialogBoxParam() failed (0x%x)\n",
result);
1586 wcscmp(UserName, pgContext->UserName) == 0 &&
1592 else if (
wcscmp(UserName, pgContext->UserName) == 0 &&
1611 wsprintfW(Buffer2, Buffer1, pgContext->DomainName, pgContext->UserName);
1618 if (UserName !=
NULL)
1652 if (pDlgData ==
NULL)
1716 TRACE(
"GUILockedSAS()\n");
1718 result = pgContext->pWlxFuncs->WlxDialogBoxParam(
1720 pgContext->hDllInstance,
1728 WARN(
"GUILockedSAS() returns 0x%x\n",
result);
1732 WARN(
"GUILockedSAS() failed (0x%x)\n",
result);
1753 if (pDlgData ==
NULL)
1789 pgContext->pWlxFuncs->WlxDialogBoxParam(
1791 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)
#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)
INT WINAPI DECLSPEC_HOTPATCH LoadStringW(HINSTANCE instance, UINT resource_id, LPWSTR buffer, INT buflen)
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_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 OnInitSecurityDlg(_In_ HWND hwnd, _In_ PGINA_CONTEXT pgContext)
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 GUIDisplaySASNotice(IN OUT PGINA_CONTEXT pgContext)
static INT OnShutDown(_In_ HWND hwndDlg, _In_ PGINA_CONTEXT pgContext, _In_ DWORD dwExcludeOptions)
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
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(_In_opt_ HKEY hKeyCurrentUser, _In_opt_ HANDLE hUserToken)
BOOL TestTokenPrivilege(_In_opt_ HANDLE hToken, _In_ ULONG Privilege)
Verifies whether the specified token has the given privilege.
#define WLX_SHUTDOWN_STATE_LOGOFF
Shutdown state flags.
DWORD LoadShutdownSelState(_In_ HKEY hKeyCurrentUser)
VOID SaveShutdownSelState(_In_ HKEY hKeyCurrentUser, _In_ DWORD ShutdownCode)
INT_PTR ShutdownDialog(IN HWND hwndDlg, IN DWORD ShutdownOptions, IN PGINA_CONTEXT pgContext)
LONG ReadRegDwordValue(_In_ HKEY hKey, _In_ PCWSTR pszValue, _Out_ PDWORD pValue)
#define WLX_SHUTDOWN_STATE_DISCONNECT
"Disconnect" (only available in Terminal Services sessions)
struct GINA_CONTEXT * PGINA_CONTEXT
LONG RegOpenLoggedOnHKCU(_In_opt_ HANDLE hUserToken, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
Opens and retrieves a handle to the HKEY_CURRENT_USER corresponding to the specified logged-on user.
LONG ReadRegSzValue(_In_ HKEY hKey, _In_ PCWSTR pszValue, _Out_ PWSTR *pValue)
NTSYSAPI NTSTATUS NTAPI RtlAdjustPrivilege(_In_ ULONG Privilege, _In_ BOOLEAN NewValue, _In_ BOOLEAN ForThread, _Out_ PBOOLEAN OldValue)
#define KEY_CREATE_SUB_KEY
#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
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
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)
#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 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