int privilege_violation(string what, mixed who, mixed where, mixed how) { restore_value("#1:0\n0\n"); return 1; }
static void test_ExitCode(void) { static const char* AeDebug="Software\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug"; static const char* WineDbg="Software\\Wine\\WineDbg"; char test_exe[MAX_PATH]; DWORD ret; HKEY hkey; DWORD disposition; reg_save_value auto_value; reg_save_value debugger_value; GetModuleFileNameA(GetModuleHandle(NULL), test_exe, sizeof(test_exe)); if (GetFileAttributes(test_exe) == INVALID_FILE_ATTRIBUTES) strcat(test_exe, ".so"); if (GetFileAttributesA(test_exe) == INVALID_FILE_ATTRIBUTES) { ok(0, "could not find the test executable '%s'\n", test_exe); return; } ret=RegCreateKeyExA(HKEY_LOCAL_MACHINE, AeDebug, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, &disposition); if (ret == ERROR_SUCCESS) { save_value(hkey, "auto", &auto_value); save_value(hkey, "debugger", &debugger_value); trace("HKLM\\%s\\debugger is set to '%s'\n", AeDebug, debugger_value.data); } else if (ret == ERROR_ACCESS_DENIED) { skip("not enough privileges to change the debugger\n"); return; } else if (ret != ERROR_FILE_NOT_FOUND) { ok(0, "could not open the AeDebug key: %d\n", ret); return; } if (debugger_value.data && debugger_value.type == REG_SZ && strstr((char*)debugger_value.data, "winedbg --auto")) { HKEY hkeyWinedbg; ret=RegCreateKeyA(HKEY_CURRENT_USER, WineDbg, &hkeyWinedbg); if (ret == ERROR_SUCCESS) { static DWORD zero; reg_save_value crash_dlg_value; save_value(hkeyWinedbg, "ShowCrashDialog", &crash_dlg_value); RegSetValueExA(hkeyWinedbg, "ShowCrashDialog", 0, REG_DWORD, (BYTE *)&zero, sizeof(DWORD)); crash_and_winedbg(hkey, test_exe); restore_value(hkeyWinedbg, &crash_dlg_value); RegCloseKey(hkeyWinedbg); } else ok(0, "Couldn't access WineDbg Key - error %u\n", ret); } if (winetest_interactive) /* Since the debugging process never sets the debug event, it isn't recognized as a valid debugger and, after the debugger exits, Windows will show a dialog box asking the user what to do */ crash_and_debug(hkey, test_exe, "dbg,none"); else skip("\"none\" debugger test needs user interaction\n"); if (disposition == REG_CREATED_NEW_KEY) win_skip("'dbg,event,order' test doesn't finish on Win9x/WinMe\n"); else crash_and_debug(hkey, test_exe, "dbg,event,order"); crash_and_debug(hkey, test_exe, "dbg,attach,event,code2"); if (pDebugSetProcessKillOnExit) crash_and_debug(hkey, test_exe, "dbg,attach,event,nokill"); else win_skip("DebugSetProcessKillOnExit is not available\n"); if (pDebugActiveProcessStop) crash_and_debug(hkey, test_exe, "dbg,attach,event,detach"); else win_skip("DebugActiveProcessStop is not available\n"); if (disposition == REG_CREATED_NEW_KEY) { RegCloseKey(hkey); RegDeleteKeyA(HKEY_LOCAL_MACHINE, AeDebug); } else { restore_value(hkey, &auto_value); restore_value(hkey, &debugger_value); RegCloseKey(hkey); } }
LRESULT CALLBACK Edit::wndproc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_GETDLGCODE: { LRESULT dlgcode = SubclassedControl::wndproc(hwnd, msg, wParam, lParam); if (wParam == VK_RETURN || wParam == VK_ESCAPE) dlgcode |= DLGC_WANTMESSAGE; return dlgcode; } case WM_KILLFOCUS: if (editing) { editing = false; if (read_value()) { write_value(); SendMessage(dlg, WM_COMMAND, MAKEWPARAM(item, CB_ENTER), 0); } else { restore_value(); write_value(); MessageBox(dlg, incorrect_value(), "Error", MB_ICONEXCLAMATION | MB_OK); } } break; case WM_KEYDOWN: if (!editing) { backup_value(); editing = true; } if (editing && wParam == VK_RETURN) { editing = false; if (read_value()) { write_value(); SendMessage(dlg, WM_COMMAND, MAKEWPARAM(item, CB_ENTER), 0); } else { restore_value(); write_value(); MessageBox(dlg, incorrect_value(), "Error", MB_ICONEXCLAMATION | MB_OK); } return 0; } if (editing && wParam == VK_ESCAPE) { restore_value(); write_value(); editing = false; return 0; } break; case WM_KEYUP: case WM_CHAR: switch (wParam) { case VK_RETURN: case VK_ESCAPE: return 0; } break; } // switch (msg) // Call the original window procedure for default processing. return SubclassedControl::wndproc(hwnd, msg, wParam, lParam); }