in src/propsheet/registry.cpp [162:642]
DWORD GetRegistryValues(
__out_opt PCONSOLE_STATE_INFO pStateInfo)
{
HKEY hCurrentUserKey, hConsoleKey, hTitleKey;
NTSTATUS Status;
DWORD dwValue, dwRet = 0, i;
WCHAR awchBuffer[LF_FACESIZE];
// initial values for global v2 settings
g_fForceV2 = GetConsoleBoolValue(CONSOLE_REGISTRY_FORCEV2, TRUE);
g_fEditKeys = GetConsoleBoolValue(CONSOLE_REGISTRY_EXTENDEDEDITKEY, TRUE);
//
// Open the current user registry key and console key.
//
Status = RegistrySerialization::s_OpenConsoleKey(&hCurrentUserKey, &hConsoleKey);
if (!NT_SUCCESS(Status))
{
return 0;
}
//
// If there is no structure to fill out, just get the current
// page and bail out.
//
if (pStateInfo == nullptr)
{
Status = RegistrySerialization::s_QueryValue(hConsoleKey,
CONSOLE_REGISTRY_CURRENTPAGE,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
dwRet = dwValue;
}
goto CloseKeys;
}
//
// Open the console title subkey unless we're changing the defaults.
//
if (pStateInfo->Defaults)
{
hTitleKey = hConsoleKey;
}
else
{
Status = RegistrySerialization::s_OpenKey(hConsoleKey,
pStateInfo->OriginalTitle,
&hTitleKey);
if (!NT_SUCCESS(Status))
{
RegCloseKey(hConsoleKey);
RegCloseKey(hCurrentUserKey);
return 0;
}
}
//
// Initial screen fill
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_FILLATTR,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->ScreenAttributes = (WORD)dwValue;
}
//
// Initial popup fill
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_POPUPATTR,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->PopupAttributes = (WORD)dwValue;
}
//
// Initial color table
//
for (i = 0; i < 16; i++)
{
StringCchPrintf(awchBuffer,
ARRAYSIZE(awchBuffer),
CONSOLE_REGISTRY_COLORTABLE,
i);
Status = RegistrySerialization::s_QueryValue(hTitleKey,
awchBuffer,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->ColorTable[i] = dwValue;
}
}
//
// Initial insert mode.
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_INSERTMODE,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->InsertMode = !!dwValue;
}
//
// Initial quick edit mode
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_QUICKEDIT,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->QuickEdit = !!dwValue;
}
//
// Initial code page
//
FAIL_FAST_IF(!(OEMCP != 0));
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_CODEPAGE,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
if (IsValidCodePage(dwValue))
{
pStateInfo->CodePage = (UINT)dwValue;
}
}
//
// Initial screen buffer size.
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_BUFFERSIZE,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->ScreenBufferSize.X = LOWORD(dwValue);
pStateInfo->ScreenBufferSize.Y = HIWORD(dwValue);
}
//
// Initial window size.
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_WINDOWSIZE,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->WindowSize.X = LOWORD(dwValue);
pStateInfo->WindowSize.Y = HIWORD(dwValue);
}
//
// Initial window position.
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_WINDOWPOS,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->WindowPosX = (SHORT)LOWORD(dwValue);
pStateInfo->WindowPosY = (SHORT)HIWORD(dwValue);
pStateInfo->AutoPosition = FALSE;
}
//
// Initial font size
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_FONTSIZE,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->FontSize.X = LOWORD(dwValue);
pStateInfo->FontSize.Y = HIWORD(dwValue);
}
//
// Initial font family.
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_FONTFAMILY,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->FontFamily = dwValue;
}
//
// Initial font weight.
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_FONTWEIGHT,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->FontWeight = dwValue;
}
//
// Initial font face name.
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_FACENAME,
sizeof(awchBuffer),
REG_SZ,
(PBYTE)awchBuffer,
nullptr);
if (NT_SUCCESS(Status))
{
RtlCopyMemory(pStateInfo->FaceName, awchBuffer, sizeof(awchBuffer));
}
//
// Initial cursor size.
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_CURSORSIZE,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->CursorSize = dwValue;
}
//
// Initial history buffer size.
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_HISTORYSIZE,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->HistoryBufferSize = dwValue;
}
//
// Initial number of history buffers.
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_HISTORYBUFS,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->NumberOfHistoryBuffers = dwValue;
}
//
// Initial history duplication mode.
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_HISTORYNODUP,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->HistoryNoDup = dwValue;
}
//
// Initial text wrapping.
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_LINEWRAP,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->fWrapText = dwValue;
}
//
// Initial filter on paste.
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_FILTERONPASTE,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->fFilterOnPaste = dwValue;
}
//
// Initial ctrl shortcuts disabled.
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_CTRLKEYSHORTCUTS_DISABLED,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->fCtrlKeyShortcutsDisabled = dwValue;
}
//
// Initial line selection.
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_LINESELECTION,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->fLineSelection = dwValue;
}
//
// Initial transparency.
//
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_WINDOWALPHA,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
if (dwValue <= BYTE_MAX)
{
pStateInfo->bWindowTransparency = (BYTE)dwValue;
}
}
// Initial Cursor Color
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_CURSORCOLOR,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->CursorColor = dwValue;
}
// Initial Cursor Shape
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_CURSORTYPE,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->CursorType = dwValue;
}
// Initial Intercept Copy Paste
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_INTERCEPTCOPYPASTE,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->InterceptCopyPaste = !!dwValue;
}
// Initial Foreground Color
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_DEFAULTFOREGROUND,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->DefaultForeground = dwValue;
}
// Initial Background Color
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_DEFAULTBACKGROUND,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->DefaultBackground = dwValue;
}
// Initial Background Color
Status = RegistrySerialization::s_QueryValue(hTitleKey,
CONSOLE_REGISTRY_TERMINALSCROLLING,
sizeof(dwValue),
REG_DWORD,
(PBYTE)&dwValue,
nullptr);
if (NT_SUCCESS(Status))
{
pStateInfo->TerminalScrolling = dwValue;
}
//
// Close the registry keys
//
if (hTitleKey != hConsoleKey)
{
RegCloseKey(hTitleKey);
}
CloseKeys:
RegCloseKey(hConsoleKey);
RegCloseKey(hCurrentUserKey);
return dwRet;
}