, Noseratio (+1), , . , .
, Noseratio, #, ++, - , :
static bool SetBrowserFeatureControlKey(wstring feature, wchar_t *appName, DWORD value) {
HKEY key;
bool success = true;
wstring featuresPath(L"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\");
wstring path(featuresPath + feature);
LONG nError = RegCreateKeyEx(HKEY_CURRENT_USER, path.c_str(), 0, NULL, REG_OPTION_VOLATILE, KEY_WRITE, NULL, &key, NULL);
if (nError != ERROR_SUCCESS) {
success = false;
} else {
nError = RegSetValueExW(key, appName, 0, REG_DWORD, (const BYTE*) &value, sizeof(value));
if (nError != ERROR_SUCCESS) {
success = false;
}
nError = RegCloseKey(key);
if (nError != ERROR_SUCCESS) {
success = false;
}
}
return success;
}
static void SetBrowserFeatureControl() {
DWORD emulationMode = GetBrowserEmulationMode();
if (emulationMode > 0) {
wchar_t fileName[MAX_PATH + 1];
ZeroMemory(fileName, (MAX_PATH + 1) * sizeof(wchar_t));
GetModuleFileNameW(NULL, fileName, 256);
vector<string> splittedFileName = split(WString2string(fileName), '\\');
ZeroMemory(fileName, (MAX_PATH + 1) * sizeof(wchar_t));
wstring exeName = String2wstring(splittedFileName.at(splittedFileName.size() - 1));
memcpy(fileName, exeName.c_str(), sizeof(wchar_t) * exeName.length());
SetBrowserFeatureControlKey(L"FEATURE_BROWSER_EMULATION", fileName, emulationMode);
SetBrowserFeatureControlKey(L"FEATURE_AJAX_CONNECTIONEVENTS", fileName, 1);
SetBrowserFeatureControlKey(L"FEATURE_GPU_RENDERING ", fileName, 1);
SetBrowserFeatureControlKey(L"FEATURE_IVIEWOBJECTDRAW_DMLT9_WITH_GDI ", fileName, 0);
SetBrowserFeatureControlKey(L"FEATURE_NINPUT_LEGACYMODE", fileName, 0);
SetBrowserFeatureControlKey(L"FEATURE_DISABLE_NAVIGATION_SOUNDS", fileName, 1);
SetBrowserFeatureControlKey(L"FEATURE_SCRIPTURL_MITIGATION", fileName, 1);
SetBrowserFeatureControlKey(L"FEATURE_SPELLCHECKING", fileName, 0);
SetBrowserFeatureControlKey(L"FEATURE_STATUS_BAR_THROTTLING", fileName, 1);
SetBrowserFeatureControlKey(L"FEATURE_VALIDATE_NAVIGATE_URL", fileName, 1);
SetBrowserFeatureControlKey(L"FEATURE_WEBOC_DOCUMENT_ZOOM", fileName, 1);
SetBrowserFeatureControlKey(L"FEATURE_WEBOC_POPUPMANAGEMENT", fileName, 0);
SetBrowserFeatureControlKey(L"FEATURE_ADDON_MANAGEMENT", fileName, 0);
SetBrowserFeatureControlKey(L"FEATURE_WEBSOCKET", fileName, 1);
SetBrowserFeatureControlKey(L"FEATURE_WINDOW_RESTRICTIONS", fileName, 0);
}
}
static LONG GetDWORDRegKey(HKEY hKey, const std::wstring &strValueName, DWORD &nValue, DWORD nDefaultValue) {
nValue = nDefaultValue;
DWORD dwBufferSize(sizeof(DWORD));
DWORD nResult(0);
LONG nError = ::RegQueryValueExW(hKey, strValueName.c_str(), 0, NULL, reinterpret_cast<LPBYTE>(&nResult), &dwBufferSize);
if (ERROR_SUCCESS == nError) {
nValue = nResult;
}
return nError;
}
static LONG GetStringRegKey(HKEY hKey, const std::wstring &strValueName, std::wstring &strValue, const std::wstring &strDefaultValue) {
strValue = strDefaultValue;
WCHAR szBuffer[512];
DWORD dwBufferSize = sizeof(szBuffer);
ULONG nError;
nError = RegQueryValueExW(hKey, strValueName.c_str(), 0, NULL, (LPBYTE)szBuffer, &dwBufferSize);
if (ERROR_SUCCESS == nError) {
strValue = szBuffer;
}
return nError;
}
static DWORD GetBrowserEmulationMode() {
int browserVersion = 7;
wstring sBrowserVersion;
HKEY key;
bool success = true;
BYTE data[256];
wstring path(L"SOFTWARE\\Microsoft\\Internet Explorer");
LONG nError = RegOpenKeyExW(HKEY_LOCAL_MACHINE, path.c_str(), 0, KEY_QUERY_VALUE, &key);
DWORD mode = 10000;
if (nError != ERROR_SUCCESS) {
success = false;
} else {
nError = GetStringRegKey(key, L"svcVersion", sBrowserVersion, L"7");
if (nError != ERROR_SUCCESS) {
nError = GetStringRegKey(key, L"version", sBrowserVersion, L"7");
if (nError != ERROR_SUCCESS) {
success = false;
}
}
if (RegCloseKey(key) != ERROR_SUCCESS) {
success = false;
}
}
if (success) {
browserVersion = std::atoi(split(WString2string(sBrowserVersion), '.').at(0).c_str());
switch (browserVersion) {
case 7:
mode = 7000;
break;
case 8:
mode = 8000;
break;
case 9:
mode = 9000;
break;
default:
break;
}
} else {
mode = -1;
}
return mode;
}