69 pDlgData->hLogoBitmap =
LoadImageW(pDlgData->pgContext->hDllInstance,
72 if (pDlgData->hLogoBitmap)
74 GetObject(pDlgData->hLogoBitmap,
sizeof(bm), &bm);
75 pDlgData->LogoWidth = bm.bmWidth;
76 pDlgData->LogoHeight = bm.bmHeight;
81 if (pDlgData->hBarBitmap)
83 GetObject(pDlgData->hBarBitmap,
sizeof(bm), &bm);
84 pDlgData->BarWidth = bm.bmWidth;
85 pDlgData->BarHeight = bm.bmHeight;
119 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;
221 cxLabel = rcLabel.right - rcLabel.left;
222 cyLabel = rcLabel.bottom - rcLabel.top;
224 MoveWindow(hwndLogo, 0, 0, bmLogo.bmWidth, bmLogo.bmHeight,
TRUE);
225 MoveWindow(hwndBar, 0, bmLogo.bmHeight, bmLogo.bmWidth, bmBar.bmHeight,
TRUE);
226 MoveWindow(hwndLabel, rcLabel.left, rcLabel.top + dyLabel, cxLabel, cyLabel,
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)
528 TRACE(
"GUIDisplaySASNotice()\n");
531 pgContext->pWlxFuncs->WlxDialogBoxParam(pgContext->hWlx,
532 pgContext->hDllInstance,
573 WCHAR szCaption[256];
579 return pgContext->pWlxFuncs->WlxMessageBox(pgContext->hWlx,
595 WCHAR OldPassword[256];
596 WCHAR NewPassword1[256];
597 WCHAR NewPassword2[256];
600 ULONG RequestBufferSize;
601 ULONG ResponseBufferSize = 0;
614 if (
wcscmp(NewPassword1, NewPassword2) != 0)
635 if (RequestBuffer ==
NULL)
637 ERR(
"HeapAlloc failed\n");
692 ERR(
"ConnectToLsa() failed\n");
698 pgContext->AuthenticationPackage,
701 (
PVOID*)&ResponseBuffer,
706 ERR(
"LsaCallAuthenticationPackage failed (Status 0x%08lx)\n",
Status);
724 if ((
wcscmp(UserName, pgContext->UserName) == 0) &&
725 (
wcscmp(Domain, pgContext->DomainName) == 0) &&
726 (
wcscmp(OldPassword, pgContext->Password) == 0))
728 ZeroMemory(pgContext->Password,
sizeof(pgContext->Password));
729 wcscpy(pgContext->Password, NewPassword1);
733 if (RequestBuffer !=
NULL)
736 if (ResponseBuffer !=
NULL)
823 wsprintfW(Buffer4, Buffer1, Buffer2, Buffer3);
839 TRACE(
"OnChangePassword()\n");
841 res = pgContext->pWlxFuncs->WlxDialogBoxParam(
843 pgContext->hDllInstance,
895 return pgContext->pWlxFuncs->WlxDialogBoxParam(
897 pgContext->hDllInstance,
912 DWORD ShutdownOptions;
914 TRACE(
"OnShutDown(%p %p)\n", hwndDlg, pgContext);
919 if (pgContext->UserToken !=
NULL)
929 ERR(
"WL: ImpersonateLoggedOnUser() failed with error %lu\n",
GetLastError());
937 if (pgContext->UserToken !=
NULL)
946 ERR(
"WL: ImpersonateLoggedOnUser() failed with error %lu\n",
GetLastError());
1025 TRACE(
"GUILoggedOnSAS()\n");
1034 pgContext->pWlxFuncs->WlxSwitchDesktopToWinlogon(
1037 result = pgContext->pWlxFuncs->WlxDialogBoxParam(
1039 pgContext->hDllInstance,
1053 pgContext->pWlxFuncs->WlxSwitchDesktopToUser(
1107 TRACE(
"Account locked!\n");
1136 pgContext->UserName,
1137 pgContext->DomainName,
1138 pgContext->Password,
1142 TRACE(
"Login after password change failed! (Status 0x%08lx)\n",
Status);
1175 TRACE(
"Other error!\n");
1186 TRACE(
"DoLoginTasks failed! Status 0x%08lx\n",
Status);
1192 ERR(
"Failed to create the profile!\n");
1196 ZeroMemory(pgContext->Password,
sizeof(pgContext->Password));
1202 pgContext->bAutoAdminLogon =
FALSE;
1204 if (UserName !=
NULL)
1220 HWND hwndDomainComboBox,
1224 DWORD dwComputerNameLength;
1230 dwComputerNameLength =
_countof(szComputerName);
1239 if (lFindIndex ==
CB_ERR)
1245 lIndex = lFindIndex;
1270 if (pDlgData ==
NULL)
1386 TRACE(
"GUILoggedOutSAS()\n");
1389 L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",
1396 L"LegalNoticeCaption",
1409 pgContext->pWlxFuncs->WlxDialogBoxParam(pgContext->hWlx,
1410 pgContext->hDllInstance,
1423 result = pgContext->pWlxFuncs->WlxDialogBoxParam(
1425 pgContext->hDllInstance,
1433 WARN(
"WlxLoggedOutSAS() returns 0x%x\n",
result);
1437 WARN(
"WlxDialogBoxParam() failed (0x%x)\n",
result);
1482 wcscmp(UserName, pgContext->UserName) == 0 &&
1488 else if (
wcscmp(UserName, pgContext->UserName) == 0 &&
1507 wsprintfW(Buffer2, Buffer1, pgContext->DomainName, pgContext->UserName);
1514 if (UserName !=
NULL)
1543 if (pDlgData ==
NULL)
1600 TRACE(
"GUILockedSAS()\n");
1602 result = pgContext->pWlxFuncs->WlxDialogBoxParam(
1604 pgContext->hDllInstance,
1612 WARN(
"GUILockedSAS() returns 0x%x\n",
result);
1616 WARN(
"GUILockedSAS() failed (0x%x)\n",
result);
1637 if (pDlgData ==
NULL)
1673 TRACE(
"GUIdisplayLockedNotice()\n");
1675 pgContext->pWlxFuncs->WlxDialogBoxParam(
1677 pgContext->hDllInstance,
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
struct _DLG_DATA * PDLG_DATA
#define IDS_PASSWORDEXPIRED
#define IDC_LOGON_SHUTDOWN
static INT GUILockedSAS(IN OUT PGINA_CONTEXT pgContext)
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
#define WLX_SAS_ACTION_LOCK_WKSTA
static VOID SetLockMessage(HWND hwnd, INT nDlgItem, PGINA_CONTEXT pgContext)
struct _LEGALNOTICEDATA * PLEGALNOTICEDATA
#define IDC_LOGON_PASSWORD
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
struct _DISPLAYSTATUSMSG * PDISPLAYSTATUSMSG
struct _MSV1_0_CHANGEPASSWORD_REQUEST MSV1_0_CHANGEPASSWORD_REQUEST
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
#define IDC_SECURITY_MESSAGE
struct _LEGALNOTICEDATA LEGALNOTICEDATA
static BOOL DoUnlock(IN HWND hwndDlg, IN PGINA_CONTEXT pgContext, OUT LPINT Action)
struct tagDRAWITEMSTRUCT * LPDRAWITEMSTRUCT
#define UNREFERENCED_PARAMETER(P)
static INT_PTR CALLBACK LegalNoticeDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
BOOL WINAPI RevertToSelf(VOID)
static VOID OnInitSecurityDlg(HWND hwnd, PGINA_CONTEXT pgContext)
BOOL bDontDisplayLastUserName
#define LOCALE_USER_DEFAULT
NTSTATUS ConnectToLsa(PGINA_CONTEXT pgContext)
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
#define IDC_CHANGEPWD_DOMAIN
BOOL WINAPI UpdateWindow(_In_ HWND)
static INT OnShutDown(IN HWND hwndDlg, IN PGINA_CONTEXT pgContext)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
BOOL DoAdminUnlock(IN PGINA_CONTEXT pgContext, IN PWSTR UserName, IN PWSTR Domain, IN PWSTR Password)
BOOL WINAPI AdjustWindowRectEx(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL, _In_ DWORD)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
DWORD WINAPI GetLastError(VOID)
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
HWND WINAPI SetFocus(_In_opt_ HWND)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
DWORD GetDefaultShutdownOptions(VOID)
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
#define STATUS_ACCOUNT_LOCKED_OUT
#define GetWindowLongPtrW
BOOL WINAPI GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
static BOOL OnChangePassword(IN HWND hwnd, IN PGINA_CONTEXT pgContext)
static INT GUILoggedOutSAS(IN OUT PGINA_CONTEXT pgContext)
LONG ReadRegSzValue(IN HKEY hKey, IN LPCWSTR pszValue, OUT LPWSTR *pValue)
#define IDC_LOCKED_MESSAGE
#define IDS_ACCOUNTEXPIRED
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
static INT ResourceMessageBox(IN PGINA_CONTEXT pgContext, IN HWND hwnd, IN UINT uType, IN UINT uCaption, IN UINT uText)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
UNICODE_STRING AccountName
#define STATUS_ACCOUNT_EXPIRED
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
#define IDS_ACCOUNTRESTRICTION
#define STATUS_INVALID_LOGON_HOURS
struct GINA_CONTEXT * PGINA_CONTEXT
#define STATUS_ACCOUNT_RESTRICTION
BOOL WINAPI SetThreadDesktop(_In_ HDESK)
#define IDC_LEGALNOTICE_TEXT
#define MB_ICONEXCLAMATION
static INT_PTR CALLBACK SecurityDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
#define IDC_CHANGEPWD_USERNAME
#define DUPLICATE_SAME_ACCESS
VOID NTAPI ProtocolStatus(NDIS_HANDLE BindingContext, NDIS_STATUS GenerelStatus, PVOID StatusBuffer, UINT StatusBufferSize)
Called by NDIS when the underlying driver has changed state.
struct _DLG_DATA DLG_DATA
_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
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define IDS_ACCOUNTLOCKED
static INT_PTR CALLBACK ChangePasswordDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
#define WLX_SAS_ACTION_LOGOFF
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)
#define WLX_SAS_ACTION_UNLOCK_WKSTA
HWND WINAPI GetDesktopWindow(void)
#define IDS_PASSWORDCHANGED
NTSTATUS DoLoginTasks(IN OUT PGINA_CONTEXT pgContext, IN PWSTR UserName, IN PWSTR Domain, IN PWSTR Password, OUT PNTSTATUS SubStatus)
DWORD GetDefaultShutdownSelState(VOID)
#define IDC_SECURITY_LOGONDATE
BOOL WINAPI ImpersonateLoggedOnUser(HANDLE hToken)
static BOOL GUIDisplayStatusMessage(IN PGINA_CONTEXT pgContext, IN HDESK hDesktop, IN DWORD dwOptions, IN PWSTR pTitle, IN PWSTR pMessage)
#define ERROR_FILE_NOT_FOUND
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
static INT GUILoggedOnSAS(IN OUT PGINA_CONTEXT pgContext, IN DWORD dwSasType)
static BOOL DoChangePassword(IN PGINA_CONTEXT pgContext, IN HWND hwndDlg)
static HINSTANCE hDllInstance
#define IDS_INVALIDWORKSTATION
static INT_PTR CALLBACK UnlockDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
#define STATUS_ACCOUNT_DISABLED
static VOID AdjustStatusMessageWindow(HWND hwndDlg, PDLG_DATA pDlgData)
static BOOL GUIInitialize(IN OUT PGINA_CONTEXT pgContext)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define STATUS_PASSWORD_EXPIRED
BOOL bShutdownWithoutLogon
#define NT_SUCCESS(StatCode)
static INT_PTR CALLBACK StatusDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
UNICODE_STRING NewPassword
static INT_PTR CALLBACK LogonDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
#define IDS_INVALIDLOGONHOURS
int WINAPI GetWindowTextLengthW(_In_ HWND)
#define IDS_NONMATCHINGPASSWORDS
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
static VOID SetDomainComboBox(HWND hwndDomainComboBox, PGINA_CONTEXT pgContext)
#define IDC_UNLOCK_PASSWORD
#define IDC_STATUS_MESSAGE
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define IDS_LOCKEDWRONGPASSWORD
#define IDC_LOGON_USERNAME
#define WLX_SAS_ACTION_LOGON
static BOOL DoLogon(IN HWND hwndDlg, IN OUT PGINA_CONTEXT pgContext)
#define WLX_SAS_ACTION_SWITCH_CONSOLE
#define IDC_CHANGEPWD_OLDPWD
#define MB_ICONINFORMATION
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
#define IDS_LOGONWRONGUSERORPWD
static VOID DlgData_Destroy(_Inout_ HWND hwndDlg)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define IDC_UNLOCK_USERNAME
#define IDC_SECURITY_TASKMGR
#define WLX_SAS_TYPE_CTRL_ALT_DEL
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)
#define GetCurrentProcess()
static DWORD WINAPI StartupWindowThread(LPVOID lpParam)
UNICODE_STRING DomainName
static VOID DlgData_LoadBitmaps(_Inout_ PDLG_DATA pDlgData)
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
#define IDS_LOCKEDWRONGUSER
static INT_PTR CALLBACK LogOffDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
DWORD LoadShutdownSelState(VOID)
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
#define MAX_COMPUTERNAME_LENGTH
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
#define STATUS_INVALID_WORKSTATION
static PDLG_DATA DlgData_Create(HWND hwndDlg, PGINA_CONTEXT pgContext)
#define IDC_UNLOCK_MESSAGE
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
BOOL WINAPI DeleteDC(_In_ HDC)
static BOOL GUIRemoveStatusMessage(IN PGINA_CONTEXT pgContext)
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
#define STATUS_PASSWORD_MUST_CHANGE
#define WLX_SAS_ACTION_NONE
INT_PTR ShutdownDialog(IN HWND hwndDlg, IN DWORD ShutdownOptions, IN PGINA_CONTEXT pgContext)
#define IDS_CHANGEPWDTITLE
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
struct _DISPLAYSTATUSMSG DISPLAYSTATUSMSG
static INT_PTR CALLBACK LockedDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
#define WLX_SAS_ACTION_PWD_CHANGED
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
static INT_PTR CALLBACK WelcomeDialogProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
#define IDS_PASSWORDMUSTCHANGE
#define IDC_CHANGEPWD_NEWPWD2
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define IDS_LOGONUSERDISABLED
static BOOL GetTextboxText(IN HWND hwndDlg, IN INT TextboxId, OUT LPWSTR *pText)
#define WLX_SAS_ACTION_TASKLIST
#define IDC_SECURITY_LOGOFF
#define IDS_COMPUTERLOCKED
NTSTATUS NTAPI LsaFreeReturnBuffer(PVOID)
UNICODE_STRING OldPassword
#define IDC_SECURITY_SHUTDOWN
static VOID GUIDisplaySASNotice(IN OUT PGINA_CONTEXT pgContext)
static VOID GUIDisplayLockedNotice(IN OUT PGINA_CONTEXT pgContext)
#define GetWindowTextLength
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
#define RtlCopyMemory(Destination, Source, Length)
LANGID WINAPI GetUserDefaultLangID(void)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
static VOID SetWelcomeText(HWND hWnd)
#define SetWindowLongPtrW
#define MAKEINTRESOURCEW(i)
VOID SaveShutdownSelState(DWORD ShutdownCode)
DWORD GetAllowedShutdownOptions(VOID)
NTSTATUS NTAPI LsaCallAuthenticationPackage(HANDLE, ULONG, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS)
#define IDC_SECURITY_LOCK
#define HeapFree(x, y, z)
#define RegCloseKey(hKey)
BOOL WINAPI DuplicateHandle(IN HANDLE hSourceProcessHandle, IN HANDLE hSourceHandle, IN HANDLE hTargetProcessHandle, OUT LPHANDLE lpTargetHandle, IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN DWORD dwOptions)
static INT OnLogOff(IN HWND hwndDlg, IN PGINA_CONTEXT pgContext)
static VOID NTAPI 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)
#define IDC_CHANGEPWD_NEWPWD1
#define STATUS_LOGON_FAILURE
BOOL CreateProfile(IN OUT PGINA_CONTEXT pgContext, IN PWSTR UserName, IN PWSTR Domain, IN PWSTR Password)
#define HKEY_LOCAL_MACHINE
#define IDC_SECURITY_CHANGEPWD
#define CB_FINDSTRINGEXACT