From 9f99e0a7c4d574cd1613e96ab7b08cc6bc1b57e9 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 22 Mar 2008 03:12:01 +0000 Subject: [PATCH] add tests for NtUserCallHwnd, NtUserCallHwndLock, NtUserCallHwndOpt, NtUserCallHwndParam, NtUserCallHwndParamLock, NtUserCallNoParam, NtUserCallOneParam and NtUserSystemParametersInfo svn path=/trunk/; revision=32744 --- .../apitests/w32knapi/ntuser/NtUserCallHwnd.c | 56 +++ .../w32knapi/ntuser/NtUserCallHwndLock.c | 100 +++++ .../w32knapi/ntuser/NtUserCallHwndOpt.c | 25 ++ .../w32knapi/ntuser/NtUserCallHwndParam.c | 34 ++ .../w32knapi/ntuser/NtUserCallHwndParamLock.c | 7 + .../w32knapi/ntuser/NtUserCallNoParam.c | 69 ++++ .../w32knapi/ntuser/NtUserCallOneParam.c | 73 ++++ .../apitests/w32knapi/ntuser/NtUserScrollDC.c | 1 - .../ntuser/NtUserSystemParametersInfo.c | 359 ++++++++++++++++++ rostests/apitests/w32knapi/testlist.c | 18 + rostests/apitests/w32knapi/w32knapi.c | 3 + rostests/apitests/w32knapi/w32knapi.h | 22 ++ rostests/apitests/w32knapi/w32knapi.rbuild | 3 + 13 files changed, 769 insertions(+), 1 deletion(-) create mode 100644 rostests/apitests/w32knapi/ntuser/NtUserCallHwnd.c create mode 100644 rostests/apitests/w32knapi/ntuser/NtUserCallHwndLock.c create mode 100644 rostests/apitests/w32knapi/ntuser/NtUserCallHwndOpt.c create mode 100644 rostests/apitests/w32knapi/ntuser/NtUserCallHwndParam.c create mode 100644 rostests/apitests/w32knapi/ntuser/NtUserCallHwndParamLock.c create mode 100644 rostests/apitests/w32knapi/ntuser/NtUserCallNoParam.c create mode 100644 rostests/apitests/w32knapi/ntuser/NtUserCallOneParam.c create mode 100644 rostests/apitests/w32knapi/ntuser/NtUserSystemParametersInfo.c diff --git a/rostests/apitests/w32knapi/ntuser/NtUserCallHwnd.c b/rostests/apitests/w32knapi/ntuser/NtUserCallHwnd.c new file mode 100644 index 00000000000..012dc62cfe9 --- /dev/null +++ b/rostests/apitests/w32knapi/ntuser/NtUserCallHwnd.c @@ -0,0 +1,56 @@ + +INT +Test_HwndRoutine_DeregisterShellHookWindow(PTESTINFO pti, HWND hWnd) +{ + TEST(NtUserCallHwnd(hWnd, _HWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW) == TRUE); + return APISTATUS_NORMAL; +} + +INT +Test_HwndRoutine_GetWindowContextHelpId (PTESTINFO pti, HWND hWnd) +{ + TEST(NtUserCallHwndParam(hWnd, 0xbadb00b, _HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID) == TRUE); + TEST(NtUserCallHwnd(hWnd, _HWND_ROUTINE_GETWNDCONTEXTHLPID) == 0xbadb00b); + return APISTATUS_NORMAL; +} + +INT +Test_HwndRoutine_SetMsgBox(PTESTINFO pti, HWND hWnd) +{ + TEST(NtUserCallHwnd(hWnd, 0x49) != FALSE); + return APISTATUS_NORMAL; +} + + + +INT +Test_NtUserCallHwnd(PTESTINFO pti) +{ + HWND hWnd; + + hWnd = CreateWindowA("BUTTON", + "Test", + BS_PUSHBUTTON | WS_VISIBLE, + 0, + 0, + 50, + 30, + NULL, + NULL, + g_hInstance, + 0); + ASSERT(hWnd); + + SetLastError(ERROR_SUCCESS); + TEST(NtUserCallHwnd(hWnd, 0x44) == FALSE); + Test_HwndRoutine_DeregisterShellHookWindow(pti, hWnd); /* 0x45 */ + TEST(NtUserCallHwnd(hWnd, 0x46) == FALSE); // DWP_GetEnabledPopup + Test_HwndRoutine_GetWindowContextHelpId (pti, hWnd); /* 0x47 */ + TEST(NtUserCallHwnd(hWnd, 0x48) == TRUE); + Test_HwndRoutine_SetMsgBox(pti, hWnd); /* 0x49 */ + TEST(GetLastError() == ERROR_SUCCESS); + + DestroyWindow(hWnd); + + return APISTATUS_NORMAL; +} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserCallHwndLock.c b/rostests/apitests/w32knapi/ntuser/NtUserCallHwndLock.c new file mode 100644 index 00000000000..0178346b7ab --- /dev/null +++ b/rostests/apitests/w32knapi/ntuser/NtUserCallHwndLock.c @@ -0,0 +1,100 @@ + + +HMENU g_hMenu; + +INT +Test_HwndLockRoutine_WindowHasShadow (PTESTINFO pti, HWND hWnd) /* 0x53 */ +{ +// TEST(NtUserCallHwndLock(hWnd, 0x53) == 0); + return APISTATUS_NORMAL; +} + + +INT +Test_HwndLockRoutine_ArrangeIconicWindows(PTESTINFO pti, HWND hWnd) /* 0x54 */ +{ +// TEST(NtUserCallHwndLock(hWnd, _HWNDLOCK_ROUTINE_ARRANGEICONICWINDOWS) == 0); + return APISTATUS_NORMAL; +} + +INT +Test_HwndLockRoutine_DrawMenuBar(PTESTINFO pti, HWND hWnd) /* 0x55 */ +{ + TEST(NtUserCallHwndLock(hWnd, 0x55) == 1); + return APISTATUS_NORMAL; +} + +INT +Test_HwndLockRoutine_CheckImeShowStatusInThread(PTESTINFO pti, HWND hWnd) /* 0x56 */ +{ + TEST(NtUserCallHwndLock(hWnd, 0x56) != 0); + return APISTATUS_NORMAL; +} + +INT +Test_HwndLockRoutine_GetSysMenuHandle(PTESTINFO pti, HWND hWnd) /* 0x57 */ +{ + NtUserCallHwndLock(hWnd, 0x5c); +// HMENU hMenu = (HMENU)NtUserCallHwndLock(hWnd, 0x57); +// TEST(hMenu != 0); + return APISTATUS_NORMAL; +} + +INT +Test_HwndLockRoutine_RedrawFrame(PTESTINFO pti, HWND hWnd) /* 0x58 */ +{ +// TEST(NtUserCallHwndLock(hWnd, 0x68) != 0); + return APISTATUS_NORMAL; +} + +INT +Test_HwndLockRoutine_UpdateWindow(PTESTINFO pti, HWND hWnd) /* 0x5e */ +{ + TEST(NtUserCallHwndLock(hWnd, 0x5e) == 1); + return APISTATUS_NORMAL; +} + +INT +Test_NtUserCallHwndLock(PTESTINFO pti) +{ + HWND hWnd; + g_hMenu = CreateMenu(); + + hWnd = CreateWindowA("BUTTON", + "Test", + BS_PUSHBUTTON | WS_VISIBLE, + 0, + 0, + 50, + 30, + NULL, + g_hMenu, + g_hInstance, + 0); + ASSERT(hWnd); + + SetLastError(ERROR_SUCCESS); + TEST(NtUserCallHwndLock((HWND)-22, 999) == 0); + TEST(GetLastError() == ERROR_INVALID_WINDOW_HANDLE); + + SetLastError(ERROR_SUCCESS); + TEST(NtUserCallHwndLock((HWND)0, 0x55) == 0); + TEST(GetLastError() == ERROR_INVALID_WINDOW_HANDLE); + + SetLastError(ERROR_SUCCESS); + TEST(NtUserCallHwndLock(hWnd, 999) == 0); + TEST(GetLastError() == ERROR_SUCCESS); + + Test_HwndLockRoutine_WindowHasShadow (pti, hWnd); /* 0x53 */ + Test_HwndLockRoutine_ArrangeIconicWindows(pti, hWnd); + Test_HwndLockRoutine_DrawMenuBar(pti, hWnd); + Test_HwndLockRoutine_CheckImeShowStatusInThread(pti, hWnd); + Test_HwndLockRoutine_GetSysMenuHandle(pti, hWnd); + Test_HwndLockRoutine_RedrawFrame(pti, hWnd); + + Test_HwndLockRoutine_UpdateWindow(pti, hWnd); + + DestroyWindow(hWnd); + + return APISTATUS_NORMAL; +} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserCallHwndOpt.c b/rostests/apitests/w32knapi/ntuser/NtUserCallHwndOpt.c new file mode 100644 index 00000000000..078e626e08a --- /dev/null +++ b/rostests/apitests/w32knapi/ntuser/NtUserCallHwndOpt.c @@ -0,0 +1,25 @@ + + +INT +Test_HwndOptRoutine_SetProgmanWindow(PTESTINFO pti) /* 0x4a */ +{ +// NtUserCallHwndOpt(hWnd, HWNDOPT_ROUTINE_SETPROGMANWINDOW); + return APISTATUS_NORMAL; +} + +INT +Test_HwndOptRoutine_SetTaskmanWindow (PTESTINFO pti) /* 0x4b */ +{ +// NtUserCallHwndOpt(hWnd, HWNDOPT_ROUTINE_SETTASKMANWINDOW); + return APISTATUS_NORMAL; +} + +INT +Test_NtUserCallHwndOpt(PTESTINFO pti) +{ + + Test_HwndOptRoutine_SetProgmanWindow(pti); /* 0x4a */ + Test_HwndOptRoutine_SetTaskmanWindow (pti); /* 0x4b */ + + return APISTATUS_NORMAL; +} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserCallHwndParam.c b/rostests/apitests/w32knapi/ntuser/NtUserCallHwndParam.c new file mode 100644 index 00000000000..36a4fb493f4 --- /dev/null +++ b/rostests/apitests/w32knapi/ntuser/NtUserCallHwndParam.c @@ -0,0 +1,34 @@ + +INT +Test_HwndParamRoutine_SetWindowContextHelpId (PTESTINFO pti, HWND hWnd) +{ + TEST(NtUserCallHwndParam(hWnd, 12345, _HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID) == TRUE); + TEST(NtUserCallHwnd(hWnd, _HWND_ROUTINE_GETWNDCONTEXTHLPID) == 12345); + return APISTATUS_NORMAL; +} + + +INT +Test_NtUserCallHwndParam(PTESTINFO pti) +{ + HWND hWnd; + + hWnd = CreateWindowA("BUTTON", + "Test", + BS_PUSHBUTTON | WS_VISIBLE, + 0, + 0, + 50, + 30, + NULL, + NULL, + g_hInstance, + 0); + ASSERT(hWnd); + + Test_HwndParamRoutine_SetWindowContextHelpId (pti, hWnd); + + DestroyWindow(hWnd); + + return APISTATUS_NORMAL; +} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserCallHwndParamLock.c b/rostests/apitests/w32knapi/ntuser/NtUserCallHwndParamLock.c new file mode 100644 index 00000000000..9d12583b719 --- /dev/null +++ b/rostests/apitests/w32knapi/ntuser/NtUserCallHwndParamLock.c @@ -0,0 +1,7 @@ + + +INT +Test_NtUserCallHwndParamLock(PTESTINFO pti) +{ + return APISTATUS_NORMAL; +} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserCallNoParam.c b/rostests/apitests/w32knapi/ntuser/NtUserCallNoParam.c new file mode 100644 index 00000000000..c282f1db859 --- /dev/null +++ b/rostests/apitests/w32knapi/ntuser/NtUserCallNoParam.c @@ -0,0 +1,69 @@ + +INT +Test_NoParamRoutine_CreateMenu(PTESTINFO pti) /* 0 */ +{ + HMENU hMenu; + + hMenu = (HMENU)NtUserCallNoParam(_NOPARAM_ROUTINE_CREATEMENU); + TEST(IsMenu(hMenu) == TRUE); + DestroyMenu(hMenu); + + return APISTATUS_NORMAL; +} + +INT +Test_NoParamRoutine_CreatePopupMenu(PTESTINFO pti) /* 1 */ +{ + HMENU hMenu; + + hMenu = (HMENU)NtUserCallNoParam(_NOPARAM_ROUTINE_CREATEMENUPOPUP); + TEST(IsMenu(hMenu) == TRUE); + DestroyMenu(hMenu); + + return APISTATUS_NORMAL; +} + +INT +Test_NoParamRoutine_DisableProcessWindowsGhosting(PTESTINFO pti) /* 2 */ +{ + return APISTATUS_NORMAL; +} + +INT +Test_NoParamRoutine_ClearWakeMask(PTESTINFO pti) /* 3 */ +{ + return APISTATUS_NORMAL; +} + +INT +Test_NoParamRoutine_AllowForegroundActivation(PTESTINFO pti) /* 4 */ +{ + return APISTATUS_NORMAL; +} + +INT +Test_NoParamRoutine_DestroyCaret(PTESTINFO pti) /* 5 */ +{ + return APISTATUS_NORMAL; +} + +INT +Test_NoParamRoutine_LoadUserApiHook(PTESTINFO pti) /* 0x1d */ +{ + DWORD dwRet; + dwRet = NtUserCallNoParam(_NOPARAM_ROUTINE_LOADUSERAPIHOOK); + +// TEST(dwRet != 0); + return APISTATUS_NORMAL; +} + + +INT +Test_NtUserCallNoParam(PTESTINFO pti) +{ + Test_NoParamRoutine_CreateMenu(pti); + Test_NoParamRoutine_CreatePopupMenu(pti); + Test_NoParamRoutine_LoadUserApiHook(pti); /* 0x1d */ + + return APISTATUS_NORMAL; +} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserCallOneParam.c b/rostests/apitests/w32knapi/ntuser/NtUserCallOneParam.c new file mode 100644 index 00000000000..2e62315750b --- /dev/null +++ b/rostests/apitests/w32knapi/ntuser/NtUserCallOneParam.c @@ -0,0 +1,73 @@ + +INT +Test_OneParamRoutine_BeginDeferWindowPos(PTESTINFO pti) /* 0x1e */ +{ + HDWP hWinPosInfo; + + hWinPosInfo = (HDWP)NtUserCallOneParam(5, 0x1e); + TEST(hWinPosInfo != 0); + TEST(EndDeferWindowPos(hWinPosInfo) != 0); + + return APISTATUS_NORMAL; +} + +INT +Test_OneParamRoutine_WindowFromDC(PTESTINFO pti) /* 0x1f */ +{ + HDC hDC = GetDC(NULL); + HWND hWnd; + + hWnd = (HWND)NtUserCallOneParam((DWORD)hDC, 0x1f); + TEST(hWnd != 0); + TEST(IsWindow(hWnd)); + TEST(hWnd == GetDesktopWindow()); + + return APISTATUS_NORMAL; +} + +INT +Test_OneParamRoutine_MapDesktopObject(PTESTINFO pti) /* 0x30 */ +{ + DWORD pObject; + HWND hWnd; + HMENU hMenu; + + hWnd = GetDesktopWindow(); + pObject = NtUserCallOneParam((DWORD)hWnd, _ONEPARAM_ROUTINE_MAPDEKTOPOBJECT); + TEST(pObject > 0); + TEST(pObject < 0x80000000); + + hMenu = CreateMenu(); + pObject = NtUserCallOneParam((DWORD)hMenu, _ONEPARAM_ROUTINE_MAPDEKTOPOBJECT); + TEST(pObject > 0); + TEST(pObject < 0x80000000); + + return APISTATUS_NORMAL; +} + +INT +Test_OneParamRoutine_SwapMouseButtons(PTESTINFO pti) /* 0x42 */ +{ + BOOL bInverse; + + NtUserCallOneParam(TRUE, _ONEPARAM_ROUTINE_SWAPMOUSEBUTTON); + bInverse = (BOOL)NtUserCallOneParam(FALSE, _ONEPARAM_ROUTINE_SWAPMOUSEBUTTON); + TEST(bInverse == TRUE); + bInverse = (BOOL)NtUserCallOneParam(FALSE, _ONEPARAM_ROUTINE_SWAPMOUSEBUTTON); + TEST(bInverse == FALSE); + + // TODO: test other values + return APISTATUS_NORMAL; +} + +INT +Test_NtUserCallOneParam(PTESTINFO pti) +{ + Test_OneParamRoutine_BeginDeferWindowPos(pti); /* 0x1e */ + Test_OneParamRoutine_WindowFromDC(pti); /* 0x1f */ + Test_OneParamRoutine_MapDesktopObject(pti); /* 0x30 */ + + Test_OneParamRoutine_SwapMouseButtons(pti); /* 0x42 */ + + return APISTATUS_NORMAL; +} diff --git a/rostests/apitests/w32knapi/ntuser/NtUserScrollDC.c b/rostests/apitests/w32knapi/ntuser/NtUserScrollDC.c index 1a2cc239a80..7c1b48d7f6e 100644 --- a/rostests/apitests/w32knapi/ntuser/NtUserScrollDC.c +++ b/rostests/apitests/w32knapi/ntuser/NtUserScrollDC.c @@ -74,7 +74,6 @@ Test_NtUserScrollDC(PTESTINFO pti) Result = NtUserScrollDC((HDC)0x123456, 10, 20, &rcScroll, &rcClip, hRgn, &rcUpdate); RTEST(Result == 0); RTEST(GetLastError() == ERROR_SUCCESS); - printf("%ld\n", GetLastError()); /* Test invalid update rect */ SetLastError(ERROR_SUCCESS); diff --git a/rostests/apitests/w32knapi/ntuser/NtUserSystemParametersInfo.c b/rostests/apitests/w32knapi/ntuser/NtUserSystemParametersInfo.c new file mode 100644 index 00000000000..073b2850ea9 --- /dev/null +++ b/rostests/apitests/w32knapi/ntuser/NtUserSystemParametersInfo.c @@ -0,0 +1,359 @@ + +LONG +QueryUserRegValueW(LPWSTR pszSubKey, LPWSTR pszValueName, PVOID pData, LPDWORD cbSize, LPDWORD pType) +{ + HKEY hKey; + LONG ret; + + RegOpenKeyExW(HKEY_CURRENT_USER, pszSubKey, 0, KEY_QUERY_VALUE, &hKey); + ret = RegQueryValueExW(hKey, pszValueName, NULL, pType, (LPBYTE)pData, cbSize); + RegCloseKey(hKey); + return ret; +} + + +HWND +CreateTestWindow() +{ + WNDCLASSA wc; + + wc.style = 0; + wc.lpfnWndProc = DefWindowProcA; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = g_hInstance; + wc.hIcon = NULL; + wc.hCursor = NULL; + wc.hbrBackground = NULL; + wc.lpszMenuName = NULL; + wc.lpszClassName = "testclass"; + + RegisterClassA(&wc); + return CreateWindowA("testclass", + "testwnd", + WS_VISIBLE, + 0, + 0, + 50, + 30, + NULL, + NULL, + g_hInstance, + 0); + +} + +void +Test_SPI_87_88(PTESTINFO pti) +{ + DWORD dwRet = 0xdeadbeef; + + TEST(NtUserSystemParametersInfo(87, 0, &dwRet, 0) == TRUE); + TEST(dwRet == 0xdeadbeef); + dwRet++; + TEST(NtUserSystemParametersInfo(87, 0, &dwRet, 0) == TRUE); + + + dwRet--; + TEST(NtUserSystemParametersInfo(87, 0, &dwRet, 0) == TRUE); + + +} + +void +Test_NtUserSystemParametersInfo_Params(PTESTINFO pti) +{ +// UINT uint; + DWORD data[1000]; + UINT i, uint; +#if 1 + /* Test normal */ + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(SPI_GETFOCUSBORDERHEIGHT, 0, &uint, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + + /* Test invalid SPI code */ + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(7, 0, &data, 0) == FALSE); + TEST(GetLastError() == ERROR_INVALID_PARAMETER); + + /* Test wrong cbSize member */ + ACCESSTIMEOUT ato; + ato.cbSize = 1; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, &ato, 0) == FALSE); + TEST(GetLastError() == ERROR_SUCCESS); +#endif + /* Test undocumented, but valid SPI codes */ + for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4112, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] <= 1); + TEST(data[1] == 0xdeadbeef); + + for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4113, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] == 0xbeefdead); + TEST(data[1] == 0xbeefdead); + data[0] = 0; + NtUserSystemParametersInfo(4112, 0, &data, 0); + TEST(data[0] == 1); + + for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4136, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] != 0xdeadbeef); + TEST(data[1] == 0xdeadbeef); + + for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4137, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] == 0xbeefdead); + TEST(data[1] == 0xbeefdead); + + for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4138, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] != 0xdeadbeef); + TEST(data[1] == 0xdeadbeef); + + for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4139, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] == 0xbeefdead); + TEST(data[1] == 0xbeefdead); + + for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4140, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] != 0xdeadbeef); + TEST(data[1] == 0xdeadbeef); + + for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4141, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] == 0xbeefdead); + TEST(data[1] == 0xbeefdead); + + for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4142, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] != 0xdeadbeef); + TEST(data[1] == 0xdeadbeef); + + for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4143, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] == 0xbeefdead); + TEST(data[1] == 0xbeefdead); + + for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4144, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] != 0xdeadbeef); + TEST(data[1] == 0xdeadbeef); + + for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4145, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] == 0xbeefdead); + TEST(data[1] == 0xbeefdead); + + for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4146, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] != 0xdeadbeef); + TEST(data[1] == 0xdeadbeef); + + for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4147, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] == 0xbeefdead); + TEST(data[1] == 0xbeefdead); + + for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4148, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] != 0xdeadbeef); + TEST(data[1] == 0xdeadbeef); + + for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4149, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] == 0xbeefdead); + TEST(data[1] == 0xbeefdead); + + for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4150, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] != 0xdeadbeef); + TEST(data[1] == 0xdeadbeef); + + for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4151, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] == 0xbeefdead); + TEST(data[1] == 0xbeefdead); + + for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4152, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] != 0xdeadbeef); + TEST(data[1] == 0xdeadbeef); + + for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4153, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] == 0xbeefdead); + TEST(data[1] == 0xbeefdead); + + for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4154, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] != 0xdeadbeef); + TEST(data[1] == 0xdeadbeef); + + for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4155, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] == 0xbeefdead); + TEST(data[1] == 0xbeefdead); + + for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4156, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] != 0xdeadbeef); + TEST(data[1] == 0xdeadbeef); + + for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(4157, 0, &data, 0) == TRUE); + TEST(GetLastError() == ERROR_SUCCESS); + TEST(data[0] == 0xbeefdead); + TEST(data[1] == 0xbeefdead); + + /* Test invalid pointer */ + SetLastError(ERROR_SUCCESS); + TEST(NtUserSystemParametersInfo(SPI_GETFOCUSBORDERHEIGHT, 0, (PVOID)0x80000000, 0) == FALSE); + TEST(GetLastError() == ERROR_NOACCESS); + for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; + + /* test wrong bools */ +} + +void +Test_NtUserSystemParametersInfo_fWinIni(PTESTINFO pti) +{ + ACCESSTIMEOUT ato; + UINT uFocusBorderHeight; + WCHAR Buffer[6]; + DWORD cbSize; + + ato.cbSize = sizeof(ato); + NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, &ato, 0); + ato.iTimeOutMSec++; + NtUserSystemParametersInfo(SPI_SETACCESSTIMEOUT, 0, &ato, 0); + ato.iTimeOutMSec--; + + NtUserSystemParametersInfo(SPI_GETFOCUSBORDERHEIGHT, 0, &uFocusBorderHeight, 0); + NtUserSystemParametersInfo(SPI_SETFOCUSBORDERHEIGHT, 0, &uFocusBorderHeight, SPIF_UPDATEINIFILE); + + NtUserSystemParametersInfo(SPI_SETACCESSTIMEOUT, 0, &ato, 0); + + cbSize = 6; + QueryUserRegValueW(L"Control Panel\\Accessibility\\TimeOut", L"TimeToWait", &Buffer, &cbSize, NULL); + +} + +void +Test_SPI_GETSETBEEP(PTESTINFO pti) +{ + BOOL bOrig, bTemp = 0; + WCHAR szReg[10]; + DWORD cbSize; + + /* Get original value */ + NtUserSystemParametersInfo(SPI_GETBEEP, 0, &bOrig, 0); + + /* Value 0 */ + NtUserSystemParametersInfo(SPI_SETBEEP, 0, NULL, SPIF_UPDATEINIFILE); + NtUserSystemParametersInfo(SPI_GETBEEP, 0, &bTemp, 0); + TEST(bTemp == 0); + cbSize = sizeof(szReg); + TEST(QueryUserRegValueW(L"Control Panel\\Sound", L"Beep", &szReg, &cbSize, NULL) == ERROR_SUCCESS); + TEST(wcscmpi(szReg, L"No") == 0); + + /* Value 1 */ + NtUserSystemParametersInfo(SPI_SETBEEP, 1, NULL, SPIF_UPDATEINIFILE); + NtUserSystemParametersInfo(SPI_GETBEEP, 0, &bTemp, 0); + TEST(bTemp == 1); + cbSize = sizeof(szReg); + TEST(QueryUserRegValueW(L"Control Panel\\Sound", L"Beep", &szReg, &cbSize, NULL) == ERROR_SUCCESS); + TEST(wcscmpi(szReg, L"Yes") == 0); + + /* Value 2 */ + NtUserSystemParametersInfo(SPI_SETBEEP, 2, NULL, SPIF_UPDATEINIFILE); + NtUserSystemParametersInfo(SPI_GETBEEP, 0, &bTemp, 0); + TEST(bTemp == 1); + cbSize = sizeof(szReg); + TEST(QueryUserRegValueW(L"Control Panel\\Sound", L"Beep", &szReg, &cbSize, NULL) == ERROR_SUCCESS); + TEST(wcscmpi(szReg, L"Yes") == 0); + + /* Restore original value */ + NtUserSystemParametersInfo(SPI_SETBEEP, 0, &bOrig, SPIF_UPDATEINIFILE); +} + +INT +Test_SPI_SETDESKWALLPAPER(PTESTINFO pti) +{ + /* Get old Wallpaper */ +// NtUserSystemParametersInfo(SPI_GET_DESKWALLPAPER, 0, + +// TEST(NtUserSystemParametersInfo(SPI_SETDESKWALLPAPER, 0, &hNewWallPaper, 0) == 0); + return 0; +} + +INT +Test_NtUserSystemParametersInfo(PTESTINFO pti) +{ + HWND hWnd; + + hWnd = CreateTestWindow(); +// ASSERT(hWnd); + Test_NtUserSystemParametersInfo_Params(pti); + + Test_NtUserSystemParametersInfo_fWinIni(pti); + + Test_SPI_GETSETBEEP(pti); + Test_SPI_SETDESKWALLPAPER(pti); + + Test_SPI_87_88(pti); + + DestroyWindow(hWnd); + + return APISTATUS_NORMAL; +} diff --git a/rostests/apitests/w32knapi/testlist.c b/rostests/apitests/w32knapi/testlist.c index 80d9dabab36..e402bbbbe3b 100644 --- a/rostests/apitests/w32knapi/testlist.c +++ b/rostests/apitests/w32knapi/testlist.c @@ -24,10 +24,19 @@ //#include "ntgdi/NtGdiSTROBJ_vEnumStart.c" #include "ntgdi/NtGdiGetDIBits.c" +#include "ntuser/NtUserCallHwnd.c" +#include "ntuser/NtUserCallHwndLock.c" +#include "ntuser/NtUserCallHwndOpt.c" +#include "ntuser/NtUserCallHwndParam.c" +#include "ntuser/NtUserCallHwndParamLock.c" +#include "ntuser/NtUserCallNoParam.c" +#include "ntuser/NtUserCallOneParam.c" #include "ntuser/NtUserCountClipboardFormats.c" +//#include "ntuser/NtUserCreateWindowEx.c" #include "ntuser/NtUserFindExistingCursorIcon.c" #include "ntuser/NtUserRedrawWindow.c" #include "ntuser/NtUserScrollDC.c" +#include "ntuser/NtUserSystemParametersInfo.c" #include "ntuser/NtUserToUnicodeEx.c" /* The List of tests */ @@ -58,10 +67,19 @@ TESTENTRY TestList[] = { L"NtGdiGetDIBitsInternal", Test_NtGdiGetDIBitsInternal }, /* ntuser */ + { L"NtUserCallHwnd", Test_NtUserCallHwnd }, + { L"NtUserCallHwndLock", Test_NtUserCallHwndLock }, + { L"NtUserCallHwndOpt", Test_NtUserCallHwndOpt }, + { L"NtUserCallHwndParam", Test_NtUserCallHwndParam }, + { L"NtUserCallHwndParamLock", Test_NtUserCallHwndParamLock }, + { L"NtUserCallNoParam", Test_NtUserCallNoParam }, + { L"NtUserCallOneParam", Test_NtUserCallOneParam }, { L"NtUserCountClipboardFormats", Test_NtUserCountClipboardFormats }, +// { L"NtUserCreateWindowEx", Test_NtUserCreateWindowEx }, { L"NtUserFindExistingCursorIcon", Test_NtUserFindExistingCursoricon }, { L"NtUserRedrawWindow", Test_NtUserRedrawWindow }, { L"NtUserScrollDC", Test_NtUserScrollDC }, + { L"NtUserSystemParametersInfo", Test_NtUserSystemParametersInfo }, { L"NtUserToUnicodeEx", Test_NtUserToUnicodeEx } }; diff --git a/rostests/apitests/w32knapi/w32knapi.c b/rostests/apitests/w32knapi/w32knapi.c index a80d89716d5..0c4b2160dc9 100644 --- a/rostests/apitests/w32knapi/w32knapi.c +++ b/rostests/apitests/w32knapi/w32knapi.c @@ -74,6 +74,9 @@ WinMain(HINSTANCE hInstance, /* Convert to gui thread */ // IsGUIThread(TRUE); <- does not exists on win2k + InitOsVersion(); + printf("g_OsIdx = %d\n", g_OsIdx); + g_hModule = LoadLibraryW(L"w32kdll.dll"); if (!g_hModule) { diff --git a/rostests/apitests/w32knapi/w32knapi.h b/rostests/apitests/w32knapi/w32knapi.h index 247849483bb..f6bd823d300 100644 --- a/rostests/apitests/w32knapi/w32knapi.h +++ b/rostests/apitests/w32knapi/w32knapi.h @@ -38,5 +38,27 @@ extern PGDI_TABLE_ENTRY GdiHandleTable; DWORD Syscall(LPWSTR lpszFunction, int cParams, void* pParams); BOOL InitOsVersion(); +extern UINT g_OsIdx; + +typedef UINT ASPI[5]; +extern ASPI gNOPARAM_ROUTINE_CREATEMENU; +extern ASPI gNOPARAM_ROUTINE_CREATEMENUPOPUP; +extern ASPI gNOPARAM_ROUTINE_LOADUSERAPIHOOK; +extern ASPI gONEPARAM_ROUTINE_MAPDEKTOPOBJECT; +extern ASPI gONEPARAM_ROUTINE_SWAPMOUSEBUTTON; +extern ASPI gHWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW; +extern ASPI gHWND_ROUTINE_GETWNDCONTEXTHLPID; +extern ASPI gHWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID; + +#define _NOPARAM_ROUTINE_CREATEMENU gNOPARAM_ROUTINE_CREATEMENU[g_OsIdx] +#define _NOPARAM_ROUTINE_CREATEMENUPOPUP gNOPARAM_ROUTINE_CREATEMENUPOPUP[g_OsIdx] +#define _NOPARAM_ROUTINE_LOADUSERAPIHOOK gNOPARAM_ROUTINE_LOADUSERAPIHOOK[g_OsIdx] +#define _ONEPARAM_ROUTINE_MAPDEKTOPOBJECT gONEPARAM_ROUTINE_MAPDEKTOPOBJECT[g_OsIdx] +#define _ONEPARAM_ROUTINE_SWAPMOUSEBUTTON gONEPARAM_ROUTINE_SWAPMOUSEBUTTON[g_OsIdx] +#define _HWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW gHWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW[g_OsIdx] +#define _HWND_ROUTINE_GETWNDCONTEXTHLPID gHWND_ROUTINE_GETWNDCONTEXTHLPID[g_OsIdx] +#define _HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID gHWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID[g_OsIdx] + + #endif /* _W32KNAPI_H */ diff --git a/rostests/apitests/w32knapi/w32knapi.rbuild b/rostests/apitests/w32knapi/w32knapi.rbuild index de8058e0c3d..19497cb2141 100644 --- a/rostests/apitests/w32knapi/w32knapi.rbuild +++ b/rostests/apitests/w32knapi/w32knapi.rbuild @@ -8,8 +8,11 @@ user32 gdi32 shell32 + advapi32 w32kdll + dbghelp w32knapi.c + osver.c testlist.c w32knapi.rc