LPWSTR lpAutoAdminLogon = NULL;
LPWSTR lpDontDisplayLastUserName = NULL;
LPWSTR lpShutdownWithoutLogon = NULL;
+ LPWSTR lpIgnoreShiftOverride = NULL;
DWORD dwDisableCAD = 0;
DWORD dwSize;
LONG rc;
pgContext->bDontDisplayLastUserName = TRUE;
}
+ rc = ReadRegSzValue(hKey,
+ L"IgnoreShiftOverride",
+ &lpIgnoreShiftOverride);
+ if (rc == ERROR_SUCCESS)
+ {
+ if (wcscmp(lpIgnoreShiftOverride, L"1") == 0)
+ pgContext->bIgnoreShiftOverride = TRUE;
+ }
+
dwSize = sizeof(pgContext->UserName);
rc = RegQueryValueExW(hKey,
L"DefaultUserName",
(LPBYTE)&pgContext->Password,
&dwSize);
+ if (lpIgnoreShiftOverride != NULL)
+ HeapFree(GetProcessHeap(), 0, lpIgnoreShiftOverride);
+
if (lpShutdownWithoutLogon != NULL)
HeapFree(GetProcessHeap(), 0, lpShutdownWithoutLogon);
if (pgContext->bAutoAdminLogon)
{
- /* Don't display the window, we want to do an automatic logon */
- pgContext->pWlxFuncs->WlxSasNotify(pgContext->hWlx, WLX_SAS_TYPE_CTRL_ALT_DEL);
- return;
+ if (pgContext->bIgnoreShiftOverride ||
+ (GetKeyState(VK_SHIFT) >= 0))
+ {
+ /* Don't display the window, we want to do an automatic logon */
+ pgContext->pWlxFuncs->WlxSasNotify(pgContext->hWlx, WLX_SAS_TYPE_CTRL_ALT_DEL);
+ return;
+ }
+
+ pgContext->bAutoAdminLogon = FALSE;
}
if (pgContext->bDisableCAD)
#include "resource.h"
-/* Values for GINA_CONTEXT.AutoLogonState */
-#define AUTOLOGON_CHECK_REGISTRY 1
-#define AUTOLOGON_ONCE 2
-#define AUTOLOGON_DISABLED 3
typedef struct
{
BOOL bAutoAdminLogon;
BOOL bDontDisplayLastUserName;
BOOL bShutdownWithoutLogon;
+ BOOL bIgnoreShiftOverride;
ULONG nShutdownAction;