- rename ASSERT1 to ASSERT

- link to w32kdll instead of implementing all syscalls as stubs. I will remove the rest of the syscall code as soon as our syscall db is more complete
- more TEST -> RTEST
- update w32kdll_ros.def
- add tests for NtGdiEngCreatePalette, NtGdiEnumFontOpen
- Add some gdi handle table code to w32knapi
- header cleanup

svn path=/trunk/; revision=28619
This commit is contained in:
Timo Kreuzer 2007-08-28 15:06:36 +00:00
parent fd255663f3
commit b91657fe81
24 changed files with 243 additions and 250 deletions

View file

@ -1,8 +1,6 @@
#ifndef _APITEST_H
#define _APITEST_H
#define WINVER 0x501
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
@ -84,8 +82,8 @@ typedef struct tagTEST
} \
}
#define ASSERT1(x) \
#undef ASSERT
#define ASSERT(x) \
if (!(x)) \
{ \
printf("Assertion failed in %s:%d (%s)\n", __FILE__, __LINE__, #x);\

View file

@ -26,12 +26,12 @@ TESTENTRY TestList[] =
{ L"CreateRectRgn", Test_CreateRectRgn },
{ L"ExtCreatePen", Test_ExtCreatePen },
{ L"GetClipRgn", Test_GetClipRgn },
{ L"GetObject", Test_GetObject },
{ L"GetStockObject", Test_GetStockObject },
{ L"SetSysColors", Test_SetSysColors },
{ L"SelectObject", Test_SelectObject },
{ L"SetDCPenColor", Test_SetDCPenColor },
// { L"SetWorldTransform", Test_SetWorldTransform },
{ L"GetObject", Test_GetObject }
};
/* The function that gives us the number of tests */

View file

@ -3,9 +3,24 @@
INT
Test_GetClipRgn(PTESTINFO pti)
{
// HRGN hRgn;
HWND hWnd;
HDC hDC;
HRGN hrgn;//, hrgn2;
/* Create a window */
hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,
NULL, NULL, g_hInstance, 0);
hDC = GetDC(hWnd);
hrgn = CreateRectRgn(0,0,0,0);
SetLastError(ERROR_SUCCESS);
// TEST(GetClipRgn(hDC)
ReleaseDC(hWnd, hDC);
DestroyWindow(hWnd);
// hRgn = CreateRectRgn(
return APISTATUS_NORMAL;
}

View file

@ -178,21 +178,21 @@ Test_Brush(PTESTINFO pti)
TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_BRUSH, 0, NULL) == sizeof(LOGBRUSH));
TEST(GetObject(hBrush, sizeof(WORD), NULL) == sizeof(LOGBRUSH));
TEST(GetObject(hBrush, 0, NULL) == sizeof(LOGBRUSH));
TEST(GetObject(hBrush, 5, NULL) == sizeof(LOGBRUSH));
TEST(GetObject(hBrush, -5, NULL) == sizeof(LOGBRUSH));
RTEST(GetObject(hBrush, 5, NULL) == sizeof(LOGBRUSH));
RTEST(GetObject(hBrush, -5, NULL) == sizeof(LOGBRUSH));
TEST(GetObject(hBrush, 0, &logbrush) == 0);
TEST(logbrush.lbStyle == 0x77777777);
TEST(GetObject(hBrush, 5, &logbrush) == sizeof(LOGBRUSH));
TEST(logbrush.lbStyle == 0);
TEST(logbrush.lbColor == 0x77777701);
RTEST(GetObject(hBrush, 0, &logbrush) == 0);
RTEST(logbrush.lbStyle == 0x77777777);
RTEST(GetObject(hBrush, 5, &logbrush) == sizeof(LOGBRUSH));
RTEST(logbrush.lbStyle == 0);
RTEST(logbrush.lbColor == 0x77777701);
TEST(GetObject(hBrush, sizeof(LOGBRUSH), &logbrush) == sizeof(LOGBRUSH));
TEST(GetObject(hBrush, sizeof(LOGBRUSH)+2, &logbrush) == sizeof(LOGBRUSH));
TEST(GetObject(hBrush, -1, &logbrush) == sizeof(LOGBRUSH));
RTEST(GetObject(hBrush, sizeof(LOGBRUSH), &logbrush) == sizeof(LOGBRUSH));
RTEST(GetObject(hBrush, sizeof(LOGBRUSH)+2, &logbrush) == sizeof(LOGBRUSH));
RTEST(GetObject(hBrush, -1, &logbrush) == sizeof(LOGBRUSH));
// TODO: test all members
TEST(GetLastError() == ERROR_SUCCESS);
RTEST(GetLastError() == ERROR_SUCCESS);
DeleteObject(hBrush);
return TRUE;
}
@ -207,21 +207,21 @@ Test_Pen(PTESTINFO pti)
hPen = CreatePen(PS_SOLID, 3, RGB(4,5,6));
if (!hPen) return FALSE;
SetLastError(ERROR_SUCCESS);
TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_PEN, 0, NULL) == sizeof(LOGPEN));
TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_PEN, 0, NULL) == sizeof(LOGPEN));
TEST(GetObject(hPen, sizeof(BITMAP), NULL) == sizeof(LOGPEN));
TEST(GetObject(hPen, 0, NULL) == sizeof(LOGPEN));
TEST(GetObject(hPen, 5, NULL) == sizeof(LOGPEN));
TEST(GetObject(hPen, -5, NULL) == sizeof(LOGPEN));
TEST(GetObject(hPen, sizeof(LOGPEN), &logpen) == sizeof(LOGPEN));
TEST(GetObject(hPen, sizeof(LOGPEN)-1, &logpen) == 0);
TEST(GetObject(hPen, sizeof(LOGPEN)+2, &logpen) == sizeof(LOGPEN));
TEST(GetObject(hPen, 0, &logpen) == 0);
TEST(GetObject(hPen, -5, &logpen) == sizeof(LOGPEN));
TEST(GetLastError() == ERROR_SUCCESS);
RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_PEN, 0, NULL) == sizeof(LOGPEN));
RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_PEN, 0, NULL) == sizeof(LOGPEN));
RTEST(GetObject(hPen, sizeof(BITMAP), NULL) == sizeof(LOGPEN));
RTEST(GetObject(hPen, 0, NULL) == sizeof(LOGPEN));
RTEST(GetObject(hPen, 5, NULL) == sizeof(LOGPEN));
RTEST(GetObject(hPen, -5, NULL) == sizeof(LOGPEN));
RTEST(GetObject(hPen, sizeof(LOGPEN), &logpen) == sizeof(LOGPEN));
RTEST(GetObject(hPen, sizeof(LOGPEN)-1, &logpen) == 0);
RTEST(GetObject(hPen, sizeof(LOGPEN)+2, &logpen) == sizeof(LOGPEN));
RTEST(GetObject(hPen, 0, &logpen) == 0);
RTEST(GetObject(hPen, -5, &logpen) == sizeof(LOGPEN));
RTEST(GetLastError() == ERROR_SUCCESS);
/* test if the fields are filled correctly */
TEST(logpen.lopnStyle == PS_SOLID);
RTEST(logpen.lopnStyle == PS_SOLID);
DeleteObject(hPen);
@ -242,8 +242,8 @@ Test_ExtPen(PTESTINFO pti)
} elpUserStyle;
SetLastError(ERROR_SUCCESS);
TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0);
TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0);
RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0);
RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0);
TEST(GetLastError() == ERROR_INVALID_PARAMETER);
FillMemory(&extlogpen, sizeof(EXTLOGPEN), 0x77);
@ -252,12 +252,12 @@ Test_ExtPen(PTESTINFO pti)
logbrush.lbHatch = 22;
hPen = ExtCreatePen(PS_GEOMETRIC | PS_DASH, 5, &logbrush, 0, NULL);
TEST(GDI_HANDLE_GET_TYPE(hPen) == GDI_OBJECT_TYPE_EXTPEN);
TEST(GetObject((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0);
TEST(GetObject(hPen, sizeof(EXTLOGPEN), NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
TEST(GetObject(hPen, 0, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
TEST(GetObject((HANDLE)GDI_HANDLE_GET_INDEX(hPen), 0, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
TEST(GetObject(hPen, 5, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
RTEST(GDI_HANDLE_GET_TYPE(hPen) == GDI_OBJECT_TYPE_EXTPEN);
RTEST(GetObject((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0);
RTEST(GetObject(hPen, sizeof(EXTLOGPEN), NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
RTEST(GetObject(hPen, 0, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
RTEST(GetObject((HANDLE)GDI_HANDLE_GET_INDEX(hPen), 0, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
RTEST(GetObject(hPen, 5, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
RTEST(GetObject(hPen, -5, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
RTEST(GetObject(hPen, 0, &extlogpen) == 0);
RTEST(GetObject(hPen, 4, &extlogpen) == 0);

View file

@ -17,7 +17,7 @@ Test_ScrollDC(PTESTINFO pti)
/* Assert that no update region is there */
hrgn = CreateRectRgn(0,0,0,0);
ASSERT1(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);
ASSERT(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);
/* Test normal scrolling */
TEST(ScrollDC(hDC, 0, 0, NULL, NULL, hrgn, NULL) == TRUE);

View file

@ -15,7 +15,7 @@ Test_ScrollWindowEx(PTESTINFO pti)
/* Assert that no update region is there */
hrgn = CreateRectRgn(0,0,0,0);
ASSERT1(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);
ASSERT(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);
Result = ScrollWindowEx(hWnd, 20, 0, NULL, NULL, NULL, NULL, 0);
TEST(Result == SIMPLEREGION);

View file

@ -10,48 +10,48 @@ LIBRARY w32kdll.dll
EXPORTS
NtGdiAbortDoc@4
NtGdiAbortPath@4
;NtGdiAddFontResourceW@24
;NtGdiAddRemoteFontToDC@16
;NtGdiAddFontMemResourceEx@20
;NtGdiRemoveMergeFont@8
;NtGdiAddRemoteMMInstanceToDC@12
NtGdiAddFontResourceW@24
NtGdiAddRemoteFontToDC@16
NtGdiAddFontMemResourceEx@20
NtGdiRemoveMergeFont@8
NtGdiAddRemoteMMInstanceToDC@12
NtGdiAlphaBlend@48
NtGdiAngleArc@24
;NtGdiAnyLinkedFonts@0
;NtGdiFontIsLinked@4
NtGdiAnyLinkedFonts@0
NtGdiFontIsLinked@4
NtGdiArcInternal@40
NtGdiBeginPath@4
NtGdiBitBlt@44
NtGdiCancelDC@4
;NtGdiCheckBitmapBits@32
NtGdiCheckBitmapBits@32
NtGdiCloseFigure@4
;NtGdiClearBitmapAttributes@8
;NtGdiClearBrushAttributes@8
;NtGdiColorCorrectPalette@24
NtGdiClearBitmapAttributes@8
NtGdiClearBrushAttributes@8
NtGdiColorCorrectPalette@24
NtGdiCombineRgn@16
NtGdiCombineTransform@12
;NtGdiComputeXformCoefficients@4
;NtGdiConsoleTextOut@16
;NtGdiConvertMetafileRect@8
NtGdiComputeXformCoefficients@4
NtGdiConsoleTextOut@16
NtGdiConvertMetafileRect@8
NtGdiCreateBitmap@20
NtGdiCreateClientObj@4
NtGdiCreateColorSpace@4
;NtGdiCreateColorTransform@32
NtGdiCreateColorTransform@32
NtGdiCreateCompatibleBitmap@12
NtGdiCreateCompatibleDC@4
NtGdiCreateDIBBrush@24
;NtGdiCreateDIBitmapInternal@44
NtGdiCreateDIBitmapInternal@44
NtGdiCreateDIBSection@36
NtGdiCreateEllipticRgn@16
NtGdiCreateHalftonePalette@4
NtGdiCreateHatchBrushInternal@12
;NtGdiCreateMetafileDC@4
;NtGdiCreatePaletteInternal@8
NtGdiCreateMetafileDC@4
NtGdiCreatePaletteInternal@8
NtGdiCreatePatternBrushInternal@12
NtGdiCreatePen@16
NtGdiCreateRectRgn@16
NtGdiCreateRoundRectRgn@24
;NtGdiCreateServerMetaFile@24
NtGdiCreateServerMetaFile@24
NtGdiCreateSolidBrush@8
NtGdiD3dContextCreate@16
NtGdiD3dContextDestroy@4
@ -109,44 +109,44 @@ NtGdiDdUnlock@8
NtGdiDdUnlockD3D@8
NtGdiDdUpdateOverlay@12
NtGdiDdWaitForVerticalBlank@8
;NtGdiDvpCanCreateVideoPort@8
;NtGdiDvpColorControl@8
;NtGdiDvpCreateVideoPort@8
;NtGdiDvpDestroyVideoPort@8
;NtGdiDvpFlipVideoPort@16
;NtGdiDvpGetVideoPortBandwidth@8
;NtGdiDvpGetVideoPortField@8
;NtGdiDvpGetVideoPortFlipStatus@8
;NtGdiDvpGetVideoPortInputFormats@8
;NtGdiDvpGetVideoPortLine@8
;NtGdiDvpGetVideoPortOutputFormats@8
;NtGdiDvpGetVideoPortConnectInfo@8
;NtGdiDvpGetVideoSignalStatus@8
;NtGdiDvpUpdateVideoPort@16
;NtGdiDvpWaitForVideoPortSync@8
;NtGdiDvpAcquireNotification@12
;NtGdiDvpReleaseNotification@8
;NtGdiDxgGenericThunk@24
NtGdiDvpCanCreateVideoPort@8
NtGdiDvpColorControl@8
NtGdiDvpCreateVideoPort@8
NtGdiDvpDestroyVideoPort@8
NtGdiDvpFlipVideoPort@16
NtGdiDvpGetVideoPortBandwidth@8
NtGdiDvpGetVideoPortField@8
NtGdiDvpGetVideoPortFlipStatus@8
NtGdiDvpGetVideoPortInputFormats@8
NtGdiDvpGetVideoPortLine@8
NtGdiDvpGetVideoPortOutputFormats@8
NtGdiDvpGetVideoPortConnectInfo@8
NtGdiDvpGetVideoSignalStatus@8
NtGdiDvpUpdateVideoPort@16
NtGdiDvpWaitForVideoPortSync@8
NtGdiDvpAcquireNotification@12
NtGdiDvpReleaseNotification@8
NtGdiDxgGenericThunk@24
NtGdiDeleteClientObj@4
NtGdiDeleteColorSpace@4
;NtGdiDeleteColorTransform@8
NtGdiDeleteColorTransform@8
NtGdiDeleteObjectApp@4
NtGdiDescribePixelFormat@16
;NtGdiGetPerBandInfo@8
;NtGdiDoBanding@16
NtGdiGetPerBandInfo@8
NtGdiDoBanding@16
NtGdiDoPalette@24
NtGdiDrawEscape@16
NtGdiEllipse@20
;NtGdiEnableEUDC@4
NtGdiEnableEudc@4
NtGdiEndDoc@4
NtGdiEndPage@4
NtGdiEndPath@4
;NtGdiEnumFontChunk@20
;NtGdiEnumFontClose@4
;NtGdiEnumFontOpen@28
NtGdiEnumFontChunk@20
NtGdiEnumFontClose@4
NtGdiEnumFontOpen@28
NtGdiEnumObjects@16
NtGdiEqualRgn@8
;NtGdiEudcLoadUnloadLink@28
NtGdiEudcLoadUnloadLink@28
NtGdiExcludeClipRect@20
NtGdiExtCreatePen@44
NtGdiExtCreateRegion@12
@ -154,37 +154,37 @@ NtGdiExtEscape@32
NtGdiExtFloodFill@20
NtGdiExtGetObjectW@12
NtGdiExtSelectClipRgn@12
;NtGdiExtTextOutW@36
NtGdiExtTextOutW@36
NtGdiFillPath@4
NtGdiFillRgn@12
NtGdiFlattenPath@4
;NtGdiFlushUserBatch@0
NtGdiFlushUserBatch@0
NtGdiFlush@0
;NtGdiForceUFIMapping@8
NtGdiForceUFIMapping@8
NtGdiFrameRgn@20
;NtGdiFullscreenControl@20
NtGdiFullscreenControl@20
NtGdiGetAndSetDCDword@16
;NtGdiGetAppClipBox@8
NtGdiGetAppClipBox@8
NtGdiGetBitmapBits@12
NtGdiGetBitmapDimension@8
NtGdiGetBoundsRect@12
;NtGdiGetCharABCWidthsW@24
;NtGdiGetCharacterPlacementW@24
NtGdiGetCharABCWidthsW@24
NtGdiGetCharacterPlacementW@24
NtGdiGetCharSet@4
;NtGdiGetCharWidthW@24
;NtGdiGetCharWidthInfo@8
NtGdiGetCharWidthW@24
NtGdiGetCharWidthInfo@8
NtGdiGetColorAdjustment@8
;NtGdiGetColorSpaceforBitmap@4
NtGdiGetColorSpaceforBitmap@4
NtGdiGetDCDword@12
;NtGdiGetDCforBitmap@4
;NtGdiGetDCObject@8
NtGdiGetDCforBitmap@4
NtGdiGetDCObject@8
NtGdiGetDCPoint@12
NtGdiGetDeviceCaps@8
NtGdiGetDeviceGammaRamp@8
;NtGdiGetDeviceCapsAll@8
;NtGdiGetDIBitsInternal@36
;NtGdiGetETM@8
;NtGdiGetEudcTimeStampEx@12
NtGdiGetDeviceCapsAll@8
NtGdiGetDIBitsInternal@36
NtGdiGetETM@8
NtGdiGetEudcTimeStampEx@12
NtGdiGetFontData@20
NtGdiGetFontResourceInfoInternalW@28
;NtGdiGetGlyphIndicesW@20

View file

@ -1,4 +1,4 @@
<module name="w32kdll_ros" type="win32dll" entrypoint="0" installname="w32kdll_ros.dll">
<module name="w32kdll" type="win32dll" entrypoint="0" installname="w32kdll.dll">
<importlibrary definition="w32kdll_ros.def" />
<define name="__USE_W32API" />
<define name="_WIN32_WINNT">0x0502</define>

View file

@ -1,22 +1,11 @@
#include "../w32knapi.h"
W32KAPI
HANDLE
APIENTRY
NtGdiDdCreateDirectDrawObject(
IN HDC hdc
)
{
return (HANDLE)Syscall(L"NtGdiDdCreateDirectDrawObject", 1, &hdc);
}
INT
Test_NtGdiDdCreateDirectDrawObject(PTESTINFO pti)
{
HANDLE hDirectDraw;
HDC hdc = CreateDCW(L"DISPLAY",NULL,NULL,NULL);
ASSERT1(hdc != NULL);
ASSERT(hdc != NULL);
/* Test ReactX */
RTEST(NtGdiDdCreateDirectDrawObject(NULL) == NULL);

View file

@ -15,12 +15,12 @@ Test_NtGdiDdDeleteDirectDrawObject(PTESTINFO pti)
{
HANDLE hDirectDraw;
HDC hdc = CreateDCW(L"DISPLAY",NULL,NULL,NULL);
ASSERT1(hdc != NULL);
ASSERT(hdc != NULL);
/* Test ReactX */
RTEST(NtGdiDdDeleteDirectDrawObject(NULL) == FALSE);
RTEST((hDirectDraw=NtGdiDdCreateDirectDrawObject(hdc)) != NULL);
ASSERT1(hDirectDraw != NULL);
ASSERT(hDirectDraw != NULL);
RTEST(NtGdiDdDeleteDirectDrawObject(hDirectDraw) == TRUE);
/* Cleanup ReactX setup */

View file

@ -64,10 +64,10 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode);
hdc = CreateDCW(L"DISPLAY",NULL,NULL,NULL);
ASSERT1(hdc != NULL);
ASSERT(hdc != NULL);
hDirectDraw = (HANDLE) Syscall(L"NtGdiDdCreateDirectDrawObject", 1, &hdc);
ASSERT1(hDirectDraw != NULL);
ASSERT(hDirectDraw != NULL);
/* Test ReactX */
hDirectDraw = (HANDLE) Syscall(L"NtGdiDdCreateDirectDrawObject", 1, &hdc);
@ -123,7 +123,7 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
RTEST(puD3dTextureFormats == NULL);
RTEST(puNumFourCC == NULL);
RTEST(puFourCC == NULL);
ASSERT1(pHalInfo != NULL);
ASSERT(pHalInfo != NULL);
RTEST(puNumHeaps == NULL);
RTEST(puvmList == NULL);
@ -131,7 +131,7 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
(pHalInfo->dwSize != sizeof(DD_HALINFO_V4)))
{
RTEST(pHalInfo->dwSize != sizeof(DD_HALINFO));
ASSERT1(pHalInfo->dwSize != sizeof(DD_HALINFO));
ASSERT(pHalInfo->dwSize != sizeof(DD_HALINFO));
}
if (pHalInfo->dwSize == sizeof(DD_HALINFO))
@ -149,7 +149,7 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
RTEST(pHalInfo->vmiData.lDisplayPitch == 0x1700;
*/
RTEST(pHalInfo->vmiData.ddpfDisplay.dwSize == sizeof(DDPIXELFORMAT) );
ASSERT1(pHalInfo->vmiData.ddpfDisplay.dwSize == sizeof(DDPIXELFORMAT));
ASSERT(pHalInfo->vmiData.ddpfDisplay.dwSize == sizeof(DDPIXELFORMAT));
/* Fail on 8bit screen deep */
RTEST(pHalInfo->vmiData.ddpfDisplay.dwFlags == DDPF_RGB);
@ -225,7 +225,7 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
RTEST(puD3dTextureFormats == NULL);
RTEST(puNumFourCC == NULL);
RTEST(puFourCC == NULL);
ASSERT1(pHalInfo != NULL);
ASSERT(pHalInfo != NULL);
RTEST(puNumHeaps == NULL);
RTEST(puvmList == NULL);
@ -266,7 +266,7 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
RTEST(puFourCC == NULL);
RTEST(puNumHeaps == NULL);
RTEST(puvmList == NULL);
ASSERT1(pHalInfo != NULL);
ASSERT(pHalInfo != NULL);
/* We do not retesting DD_HALINFO, instead we compare it */
RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);
@ -307,7 +307,7 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
RTEST(puFourCC == NULL);
RTEST(puNumHeaps == NULL);
RTEST(puvmList == NULL);
ASSERT1(pHalInfo != NULL);
ASSERT(pHalInfo != NULL);
/* We do not retesting DD_HALINFO, instead we compare it */
RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);
@ -351,7 +351,7 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
RTEST(puFourCC == NULL);
RTEST(puNumHeaps == NULL);
RTEST(puvmList == NULL);
ASSERT1(pHalInfo != NULL);
ASSERT(pHalInfo != NULL);
/* We do not retesting DD_HALINFO, instead we compare it */
RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);
@ -395,7 +395,7 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
RTEST(puFourCC == NULL);
RTEST(puNumHeaps == NULL);
RTEST(puvmList == NULL);
ASSERT1(pHalInfo != NULL);
ASSERT(pHalInfo != NULL);
/* We do not retesting DD_HALINFO, instead we compare it */
RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);
@ -453,7 +453,7 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
RTEST(puFourCC == NULL);
RTEST(puNumHeaps == NULL);
RTEST(puvmList == NULL);
ASSERT1(pHalInfo != NULL);
ASSERT(pHalInfo != NULL);
/* We do not retesting DD_HALINFO, instead we compare it */
RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);

View file

@ -1,22 +1,3 @@
#include "../w32knapi.h"
BOOL
STDCALL
NtGdiArcInternal(
ARCTYPE arctype,
HDC hDC,
int LeftRect,
int TopRect,
int RightRect,
int BottomRect,
int XStartArc,
int YStartArc,
int XEndArc,
int YEndArc)
{
return (BOOL)Syscall(L"NtGdiArcInternal", 10, &arctype);
}
INT
Test_NtGdiArcInternal(PTESTINFO pti)
{

View file

@ -1,19 +1,3 @@
#include "../w32knapi.h"
W32KAPI
HBITMAP
APIENTRY
NtGdiCreateBitmap(
IN INT cx,
IN INT cy,
IN UINT cPlanes,
IN UINT cBPP,
IN OPTIONAL LPBYTE pjInit
)
{
return (HBITMAP)Syscall(L"NtGdiCreateBitmap", 5, &cx);
}
INT
Test_NtGdiCreateBitmap_Params(PTESTINFO pti)
{
@ -66,7 +50,7 @@ Test_NtGdiCreateBitmap_Params(PTESTINFO pti)
SetLastError(ERROR_SUCCESS);
TEST((hBmp = NtGdiCreateBitmap(1, 1, 0, 1, NULL)) != NULL);
TEST(GetLastError() == ERROR_SUCCESS);
ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
TEST(bitmap.bmType == 0);
TEST(bitmap.bmWidth == 1);
TEST(bitmap.bmHeight == 1);
@ -88,7 +72,7 @@ Test_NtGdiCreateBitmap_Params(PTESTINFO pti)
SetLastError(ERROR_SUCCESS);
TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 0, NULL)) != NULL);
TEST(GetLastError() == ERROR_SUCCESS);
ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
TEST(bitmap.bmType == 0);
TEST(bitmap.bmWidth == 1);
TEST(bitmap.bmHeight == 1);
@ -105,32 +89,32 @@ Test_NtGdiCreateBitmap_Params(PTESTINFO pti)
/* Test bad cBPP */
SetLastError(ERROR_SUCCESS);
TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 3, NULL)) != NULL);
ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
TEST(bitmap.bmBitsPixel == 4);
DeleteObject(hBmp);
TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 6, NULL)) != NULL);
ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
TEST(bitmap.bmBitsPixel == 8);
DeleteObject(hBmp);
TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 15, NULL)) != NULL);
ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
TEST(bitmap.bmBitsPixel == 16);
DeleteObject(hBmp);
TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 17, NULL)) != NULL);
ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
TEST(bitmap.bmBitsPixel == 24);
DeleteObject(hBmp);
TEST((hBmp = NtGdiCreateBitmap(1, 1, 3, 7, NULL)) != NULL);
ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
TEST(bitmap.bmBitsPixel == 24);
DeleteObject(hBmp);
TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 25, NULL)) != NULL);
ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
TEST(bitmap.bmBitsPixel == 32);
DeleteObject(hBmp);
@ -154,7 +138,7 @@ Test_NtGdiCreateBitmap_Params(PTESTINFO pti)
SetLastError(ERROR_SUCCESS);
TEST((hBmp = NtGdiCreateBitmap(5, 7, 2, 4, NULL)) != NULL);
TEST(GetLastError() == ERROR_SUCCESS);
ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
TEST(bitmap.bmType == 0);
TEST(bitmap.bmWidth == 5);
TEST(bitmap.bmHeight == 7);

View file

@ -1,16 +1,3 @@
#include "../w32knapi.h"
W32KAPI
HBITMAP
APIENTRY
NtGdiCreateCompatibleBitmap(
IN HDC hdc,
IN INT cx,
IN INT cy
)
{
return (HBITMAP)Syscall(L"NtGdiCreateCompatibleBitmap", 3, &hdc);
}
INT
Test_NtGdiCreateCompatibleBitmap(PTESTINFO pti)

View file

@ -1,20 +1,3 @@
#include "../w32knapi.h"
W32KAPI
LONG
APIENTRY
NtGdiDoPalette(
IN HPALETTE hpal,
IN WORD iStart,
IN WORD cEntries,
IN PALETTEENTRY *pPalEntries,
IN DWORD iFunc,
IN BOOL bInbound
)
{
return (LONG)Syscall(L"NtGdiDoPalette", 6, &hpal);
}
HPALETTE
CreateTestPalette()
{

View file

@ -0,0 +1,33 @@
HPALETTE
APIENTRY
NtGdiEngCreatePalette(
IN ULONG iMode,
IN ULONG cColors,
IN ULONG *pulColors,
IN FLONG flRed,
IN FLONG flGreen,
IN FLONG flBlue)
{
return (HPALETTE)Syscall(L"NtGdiEngCreatePalette", 6, &iMode);
}
INT
Test_NtGdiEngCreatePalette(PTESTINFO pti)
{
HPALETTE hPal;
ULONG Colors[3] = {1,2,3};
PGDI_TABLE_ENTRY pEntry;
hPal = NtGdiEngCreatePalette(PAL_RGB, 3, Colors, 0xff000000, 0x00ff0000, 0x0000ff00);
TEST(hPal != 0);
TEST(GDI_HANDLE_GET_TYPE(hPal) == GDI_OBJECT_TYPE_PALETTE);
pEntry = &GdiHandleTable[GDI_HANDLE_GET_INDEX(hPal)];
TEST(pEntry->KernelData != NULL);
TEST(pEntry->ProcessId == (HANDLE)GetCurrentProcessId());
TEST(pEntry->UserData == 0);
TEST(pEntry->Type == (((UINT)hPal >> 16) | GDI_OBJECT_TYPE_PALETTE));
return APISTATUS_NORMAL;
}

View file

@ -0,0 +1,31 @@
INT
Test_NtGdiEnumFontOpen(PTESTINFO pti)
{
HDC hDC;
ULONG_PTR idEnum;
ULONG ulCount;
PGDI_TABLE_ENTRY pEntry;
hDC = CreateDCW(L"DISPLAY",NULL,NULL,NULL);
// FIXME: We should load the font first
idEnum = NtGdiEnumFontOpen(hDC, 2, 0, 32, L"Courier", ANSI_CHARSET, &ulCount);
ASSERT(idEnum != 0);
/* we should have a gdi handle here */
TEST(GDI_HANDLE_GET_TYPE(idEnum) == GDI_OBJECT_TYPE_ENUMFONT);
pEntry = &GdiHandleTable[GDI_HANDLE_GET_INDEX(idEnum)];
TEST(pEntry->KernelData != NULL);
TEST(pEntry->ProcessId == (HANDLE)GetCurrentProcessId());
TEST(pEntry->UserData == 0);
TEST(pEntry->Type == ((idEnum >> 16) | GDI_OBJECT_TYPE_ENUMFONT));
/* We should not be able to use DeleteObject() on the handle */
TEST(DeleteObject((HGDIOBJ)idEnum) == FALSE);
// FIXME: Close the enum handle
return APISTATUS_NORMAL;
}

View file

@ -1,15 +1,3 @@
#include "../w32knapi.h"
LONG STDCALL
NtGdiGetBitmapBits(
HBITMAP hBitmap,
DWORD Bytes,
IN PBYTE Bits)
{
return (LONG)Syscall(L"NtGdiGetBitmapBits", 3, &hBitmap);
}
INT
Test_NtGdiGetBitmapBits(PTESTINFO pti)
{

View file

@ -1,17 +1,3 @@
#include "../w32knapi.h"
W32KAPI
INT
APIENTRY
NtGdiGetRandomRgn(
IN HDC hdc,
IN HRGN hrgn,
IN INT iRgn)
{
return (INT)Syscall(L"NtGdiGetRandomRgn", 3, &hdc);
}
INT
Test_NtGdiGetRandomRgn(PTESTINFO pti)
{
@ -26,7 +12,7 @@ Test_NtGdiGetRandomRgn(PTESTINFO pti)
// UpdateWindow(hWnd);
hDC = GetDC(hWnd);
ASSERT1(hDC != NULL);
ASSERT(hDC != NULL);
hrgn = CreateRectRgn(0,0,0,0);
hrgn2 = CreateRectRgn(3,3,10,10);

View file

@ -1,15 +1,5 @@
#include "../w32knapi.h"
LONG STDCALL
NtGdiSetBitmapBits(
HBITMAP hBitmap,
DWORD Bytes,
IN PBYTE Bits)
{
return (LONG)Syscall(L"NtGdiSetBitmapBits", 3, &hBitmap);
}
INT
Test_NtGdiSetBitmapBits(PTESTINFO pti)
{

View file

@ -1,4 +1,4 @@
#include "../apitest.h"
#include "w32knapi.h"
/* include the tests */
@ -10,6 +10,9 @@
#include "ntgdi/NtGdiCreateBitmap.c"
#include "ntgdi/NtGdiCreateCompatibleBitmap.c"
#include "ntgdi/NtGdiDoPalette.c"
#include "ntgdi/NtGdiEngCreatePalette.c"
//#include "ntgdi/NtGdiEnumFontChunk.c"
#include "ntgdi/NtGdiEnumFontOpen.c"
#include "ntgdi/NtGdiGetBitmapBits.c"
#include "ntgdi/NtGdiGetRandomRgn.c"
#include "ntgdi/NtGdiSetBitmapBits.c"
@ -30,6 +33,9 @@ TESTENTRY TestList[] =
{ L"NtGdiCreateBitmap", Test_NtGdiCreateBitmap },
{ L"NtGdiCreateCompatibleBitmap", Test_NtGdiCreateCompatibleBitmap },
{ L"NtGdiDoPalette", Test_NtGdiDoPalette },
{ L"NtGdiEngCreatePalette", Test_NtGdiEngCreatePalette },
// { L"NtGdiEnumFontChunk", Test_NtGdiEnumFontChunk },
{ L"NtGdiEnumFontOpen", Test_NtGdiEnumFontOpen },
{ L"NtGdiGetBitmapBits", Test_NtGdiGetBitmapBits },
{ L"NtGdiGetRandomRgn", Test_NtGdiGetRandomRgn },
{ L"NtGdiSetBitmapBits", Test_NtGdiSetBitmapBits },

View file

@ -2,6 +2,7 @@
HINSTANCE g_hInstance;
HMODULE g_hModule = NULL;
PGDI_TABLE_ENTRY GdiHandleTable;
static DWORD STDCALL
IntSyscall(FARPROC proc, UINT cParams, PVOID pFirstParam)
@ -58,7 +59,8 @@ WinMain(HINSTANCE hInstance,
int nCmdShow)
{
g_hInstance = hInstance;
GDIQUERYPROC GdiQueryHandleTable;
printf("Win32k native API test\n");
/* Convert to gui thread */
@ -68,7 +70,18 @@ WinMain(HINSTANCE hInstance,
if (!g_hModule)
{
printf("w32kdll.dll not found!\n");
return FALSE;
return -1;
}
GdiQueryHandleTable = (GDIQUERYPROC)GetProcAddress(GetModuleHandleW(L"GDI32.DLL"), "GdiQueryTable");
if(!GdiQueryHandleTable)
{
return -1;
}
GdiHandleTable = GdiQueryHandleTable();
if(!GdiHandleTable)
{
return -1;
}
printf("\n");

View file

@ -1,10 +1,16 @@
#ifndef _W32KNAPI_H
#define _W32KNAPI_H
#include "../apitest.h"
#define WIN32_NO_STATUS
#define NTOS_MODE_USER
#define WINVER 0x501
#include <ddk/winddi.h>
#include <ddk/ntddk.h>
#include <windows.h>
#include <wingdi.h>
#include <winddi.h>
#include <ntddk.h>
#include <d3dnthal.h>
#include <prntfont.h>
/* Public Win32K Headers */
#include <win32k/callback.h>
@ -12,12 +18,14 @@
#include <win32k/ntgdityp.h>
#include <win32k/ntgdihdl.h>
#include <ntgdi.h>
#include "../apitest.h"
#define OS_UNSUPPORTED 0
#define OS_REACTOS 1
#define OS_WINDOWS 2
#define W32KAPI
typedef struct
{
LPWSTR lpszFunction;
@ -25,11 +33,11 @@ typedef struct
INT nParams;
} SYCALL_ENTRY, *PSYSCALL_ENTRY;
typedef PGDI_TABLE_ENTRY (CALLBACK * GDIQUERYPROC) (void);
extern HINSTANCE g_hInstance;
extern SYCALL_ENTRY SyscallTable_XP_2600[];
extern SYCALL_ENTRY SyscallTable_2K_2195[];
extern HMODULE g_hModule;
extern INT g_nOsVer;
extern PGDI_TABLE_ENTRY GdiHandleTable;
DWORD Syscall(LPWSTR lpszFunction, int cParams, void* pParams);
BOOL InitOsVersion();

View file

@ -7,6 +7,7 @@
<library>user32</library>
<library>gdi32</library>
<library>shell32</library>
<library>w32kdll</library>
<file>w32knapi.c</file>
<file>testlist.c</file>
</module>