add tests for NtUserCallHwnd, NtUserCallHwndLock, NtUserCallHwndOpt, NtUserCallHwndParam, NtUserCallHwndParamLock, NtUserCallNoParam, NtUserCallOneParam and NtUserSystemParametersInfo

svn path=/trunk/; revision=32744
This commit is contained in:
Timo Kreuzer 2008-03-22 03:12:01 +00:00
parent 19761f316e
commit 9f99e0a7c4
13 changed files with 769 additions and 1 deletions

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -0,0 +1,7 @@
INT
Test_NtUserCallHwndParamLock(PTESTINFO pti)
{
return APISTATUS_NORMAL;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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);

View file

@ -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;
}

View file

@ -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 }
};

View file

@ -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)
{

View file

@ -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 */

View file

@ -8,8 +8,11 @@
<library>user32</library>
<library>gdi32</library>
<library>shell32</library>
<library>advapi32</library>
<library>w32kdll</library>
<library>dbghelp</library>
<file>w32knapi.c</file>
<file>osver.c</file>
<file>testlist.c</file>
<file>w32knapi.rc</file>
</module>