Set svn:eol-style "native" for all apitest stuff
authorColin Finck <colin@reactos.org>
Sun, 1 Jun 2008 18:06:22 +0000 (18:06 +0000)
committerColin Finck <colin@reactos.org>
Sun, 1 Jun 2008 18:06:22 +0000 (18:06 +0000)
svn path=/trunk/; revision=33818

48 files changed:
rostests/apitests/apitest.c
rostests/apitests/apitest.h
rostests/apitests/gdi32api/gdi.h
rostests/apitests/gdi32api/gdi32api.c
rostests/apitests/gdi32api/gdi32api.h
rostests/apitests/gdi32api/gdi32api.rbuild
rostests/apitests/gdi32api/testlist.c
rostests/apitests/gdi32api/tests/AddFontResourceEx.c
rostests/apitests/gdi32api/tests/CreateCompatibleDC.c
rostests/apitests/gdi32api/tests/CreateFont.c
rostests/apitests/gdi32api/tests/CreatePen.c
rostests/apitests/gdi32api/tests/CreateRectRgn.c
rostests/apitests/gdi32api/tests/ExtCreatePen.c
rostests/apitests/gdi32api/tests/GetClipRgn.c
rostests/apitests/gdi32api/tests/GetDIBits.c
rostests/apitests/gdi32api/tests/GetObject.c
rostests/apitests/gdi32api/tests/GetStockObject.c
rostests/apitests/gdi32api/tests/SelectObject.c
rostests/apitests/gdi32api/tests/SetDCPenColor.c
rostests/apitests/gdi32api/tests/SetSysColors.c
rostests/apitests/user32api/testlist.c
rostests/apitests/user32api/tests/ScrollDC.c
rostests/apitests/user32api/tests/ScrollWindowEx.c
rostests/apitests/user32api/user32api.c
rostests/apitests/user32api/user32api.h
rostests/apitests/user32api/user32api.rbuild
rostests/apitests/w32knapi/ntdd/NtGdiDdCreateDirectDrawObject.c
rostests/apitests/w32knapi/ntdd/NtGdiDdDeleteDirectDrawObject.c
rostests/apitests/w32knapi/ntdd/NtGdiDdQueryDirectDrawObject.c
rostests/apitests/w32knapi/ntgdi/NtGdiArcInternal.c
rostests/apitests/w32knapi/ntgdi/NtGdiCreateBitmap.c
rostests/apitests/w32knapi/ntgdi/NtGdiCreateCompatibleBitmap.c
rostests/apitests/w32knapi/ntgdi/NtGdiDoPalette.c
rostests/apitests/w32knapi/ntgdi/NtGdiEngCreatePalette.c
rostests/apitests/w32knapi/ntgdi/NtGdiEnumFontOpen.c
rostests/apitests/w32knapi/ntgdi/NtGdiGetBitmapBits.c
rostests/apitests/w32knapi/ntgdi/NtGdiGetDIBits.c
rostests/apitests/w32knapi/ntgdi/NtGdiGetRandomRgn.c
rostests/apitests/w32knapi/ntgdi/NtGdiSetBitmapBits.c
rostests/apitests/w32knapi/ntuser/NtUserCountClipboardFormats.c
rostests/apitests/w32knapi/ntuser/NtUserFindExistingCursorIcon.c
rostests/apitests/w32knapi/ntuser/NtUserRedrawWindow.c
rostests/apitests/w32knapi/resource.h
rostests/apitests/w32knapi/testlist.c
rostests/apitests/w32knapi/w32knapi.c
rostests/apitests/w32knapi/w32knapi.h
rostests/apitests/w32knapi/w32knapi.rbuild
rostests/apitests/w32knapi/w32knapi.rc

index b0e9eec..e1f2be5 100644 (file)
-#include "apitest.h"\r
-\r
-const char szFileHeader[] = "<html><head><style>\ntd.red {color:red}\ntd.green{color:green}\n</style>\n</head>\n<body>\n<head>\n";\r
-const char szTableHeader[] = "<table width = '800'><tr><th align='left'>Function</th><th align='left'>Status</th><th align='left'>Tests (all/passed/failed)</th><th align='left'>Regressions</th></tr>";\r
-const char szFileFooter[] = "</table></body></html>";\r
-\r
-void\r
-OutputUsage(LPWSTR pszName)\r
-{\r
-       printf("\nUsage:\n\n");\r
-       printf("%ls.exe <TestName> - perform individual test\n", pszName);\r
-       printf("%ls.exe all - perform all tests\n", pszName);\r
-       printf("%ls.exe status - create api status file\n", pszName);\r
-       printf("%ls.exe -r ... - perform regression testing\n", pszName);\r
-       printf("\n");\r
-}\r
-\r
-BOOL\r
-WriteFileHeader(UINT hFile, LPWSTR pszModule)\r
-{\r
-       char szHeader[100];\r
-\r
-       _write(hFile, szFileHeader, strlen(szFileHeader));\r
-       sprintf(szHeader, "<H1>Test results for %ls</H1>", pszModule);\r
-       _write(hFile, szHeader, strlen(szHeader));\r
-       _write(hFile, szTableHeader, strlen(szTableHeader));\r
-       return TRUE;\r
-}\r
-\r
-BOOL\r
-WriteRow(UINT hFile, LPWSTR pszFunction, PTESTINFO pti)\r
-{\r
-       char szLine[500];\r
-\r
-       sprintf(szLine, "<tr><td>%ls</td>", pszFunction);\r
-\r
-       switch(pti->nApiStatus)\r
-       {\r
-               case APISTATUS_NOT_FOUND:\r
-                       strcat(szLine, "<td class='red'>not found</td>");\r
-                       break;\r
-               case APISTATUS_UNIMPLEMENTED:\r
-                       strcat(szLine, "<td class='red'>unimplemented</td>");\r
-                       break;\r
-               case APISTATUS_ASSERTION_FAILED:\r
-                       strcat(szLine, "<td class='red'>assertion failed</td>");\r
-                       break;\r
-               case APISTATUS_REGRESSION:\r
-                       strcat(szLine, "<td class='red'>Regression!</td>");\r
-                       break;\r
-               case APISTATUS_NORMAL:\r
-                       strcat(szLine, "<td class='green'>Implemented</td>");\r
-                       break;\r
-       }\r
-\r
-       sprintf(szLine + strlen(szLine), "<td>%d / %d / %d</td><td>%d</td></tr>\n",\r
-               pti->passed+pti->failed, pti->passed, pti->failed, pti->rfailed);\r
-\r
-       _write(hFile, szLine, strlen(szLine));\r
-       return TRUE;\r
-}\r
-\r
-int\r
-TestMain(LPWSTR pszName, LPWSTR pszModule)\r
-{\r
-       INT argc, i, j;\r
-       LPWSTR *argv;\r
-       TESTINFO ti;\r
-       INT opassed, ofailed, orfailed;\r
-       BOOL bAll, bStatus;\r
-       UINT hFile = 0;\r
-\r
-       ti.bRegress = FALSE;\r
-       bAll = FALSE;\r
-       bStatus = FALSE;\r
-       opassed = ofailed = orfailed = 0;\r
-\r
-       argv = CommandLineToArgvW(GetCommandLineW(), &argc);\r
-\r
-       if (argc < 2)\r
-       {\r
-               OutputUsage(pszName);\r
-               return 0;\r
-       }\r
-\r
-       /* Get options */\r
-       for (i = 1; i < argc; i++)\r
-       {\r
-               if (_wcsicmp(argv[i], L"-r") == 0)\r
-               {\r
-                       ti.bRegress = TRUE;\r
-               }\r
-               else if (_wcsicmp(argv[i], L"all") == 0)\r
-               {\r
-                       bAll = TRUE;\r
-               }\r
-               else if (_wcsicmp(argv[i], L"status") == 0)\r
-               {\r
-                       bAll = TRUE;\r
-                       bStatus = TRUE;\r
-               }\r
-       }\r
-\r
-       if (bStatus)\r
-       {\r
-               ti.bRegress = TRUE;\r
-               char szOutputFile[MAX_PATH];\r
-               wsprintf(szOutputFile, "%ls.html", pszName);\r
-               hFile = _open(szOutputFile, O_CREAT | O_TRUNC | O_RDWR, 00700);\r
-               if (hFile == -1)\r
-               {\r
-                       printf("Could not create output file.\n");\r
-                       return 0;\r
-               }\r
-               WriteFileHeader(hFile, pszModule);\r
-       }\r
-\r
-       for (i = 0; i < NumTests(); i++)\r
-       {\r
-               for (j = 1; j < argc; j++)\r
-               {\r
-                       if (bAll || _wcsicmp(argv[j], TestList[i].Test) == 0)\r
-                       {\r
-                               ti.passed = 0;\r
-                               ti.failed = 0;\r
-                               ti.rfailed = 0;\r
-                               if (!IsFunctionPresent(TestList[i].Test))\r
-                               {\r
-                                       printf("Function %ls was not found!\n", TestList[i].Test);\r
-                                       ti.nApiStatus = APISTATUS_NOT_FOUND;\r
-                               }\r
-                               else\r
-                               {\r
-                                       printf("Executing test: %ls\n", TestList[i].Test);\r
-                                       ti.nApiStatus = TestList[i].Proc(&ti);\r
-                                       opassed += ti.passed;\r
-                                       ofailed += ti.failed;\r
-                                       orfailed += ti.rfailed;\r
-                                       printf(" tests: %d, passed: %d, failed: %d\n\n", ti.passed+ti.failed, ti.passed, ti.failed);\r
-                               }\r
-                               if (bStatus)\r
-                               {\r
-                                       if (ti.rfailed > 0)\r
-                                               ti.nApiStatus = APISTATUS_REGRESSION;\r
-                                       WriteRow(hFile, TestList[i].Test, &ti);\r
-                               }\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-\r
-       printf("Overall:\n");\r
-       printf(" tests: %d, passed: %d, failed: %d\n\n", opassed+ofailed, opassed, ofailed);\r
-       if (ti.bRegress)\r
-       {\r
-               printf(" regressions: %d\n", orfailed);\r
-       }\r
-\r
-       if (bStatus)\r
-       {\r
-               _write(hFile, szFileFooter, strlen(szFileFooter));\r
-               _close(hFile);\r
-       }\r
-\r
-       if (ti.bRegress)\r
-               return ti.rfailed;\r
-\r
-       return ti.failed;\r
-}\r
+#include "apitest.h"
+
+const char szFileHeader[] = "<html><head><style>\ntd.red {color:red}\ntd.green{color:green}\n</style>\n</head>\n<body>\n<head>\n";
+const char szTableHeader[] = "<table width = '800'><tr><th align='left'>Function</th><th align='left'>Status</th><th align='left'>Tests (all/passed/failed)</th><th align='left'>Regressions</th></tr>";
+const char szFileFooter[] = "</table></body></html>";
+
+void
+OutputUsage(LPWSTR pszName)
+{
+       printf("\nUsage:\n\n");
+       printf("%ls.exe <TestName> - perform individual test\n", pszName);
+       printf("%ls.exe all - perform all tests\n", pszName);
+       printf("%ls.exe status - create api status file\n", pszName);
+       printf("%ls.exe -r ... - perform regression testing\n", pszName);
+       printf("\n");
+}
+
+BOOL
+WriteFileHeader(UINT hFile, LPWSTR pszModule)
+{
+       char szHeader[100];
+
+       _write(hFile, szFileHeader, strlen(szFileHeader));
+       sprintf(szHeader, "<H1>Test results for %ls</H1>", pszModule);
+       _write(hFile, szHeader, strlen(szHeader));
+       _write(hFile, szTableHeader, strlen(szTableHeader));
+       return TRUE;
+}
+
+BOOL
+WriteRow(UINT hFile, LPWSTR pszFunction, PTESTINFO pti)
+{
+       char szLine[500];
+
+       sprintf(szLine, "<tr><td>%ls</td>", pszFunction);
+
+       switch(pti->nApiStatus)
+       {
+               case APISTATUS_NOT_FOUND:
+                       strcat(szLine, "<td class='red'>not found</td>");
+                       break;
+               case APISTATUS_UNIMPLEMENTED:
+                       strcat(szLine, "<td class='red'>unimplemented</td>");
+                       break;
+               case APISTATUS_ASSERTION_FAILED:
+                       strcat(szLine, "<td class='red'>assertion failed</td>");
+                       break;
+               case APISTATUS_REGRESSION:
+                       strcat(szLine, "<td class='red'>Regression!</td>");
+                       break;
+               case APISTATUS_NORMAL:
+                       strcat(szLine, "<td class='green'>Implemented</td>");
+                       break;
+       }
+
+       sprintf(szLine + strlen(szLine), "<td>%d / %d / %d</td><td>%d</td></tr>\n",
+               pti->passed+pti->failed, pti->passed, pti->failed, pti->rfailed);
+
+       _write(hFile, szLine, strlen(szLine));
+       return TRUE;
+}
+
+int
+TestMain(LPWSTR pszName, LPWSTR pszModule)
+{
+       INT argc, i, j;
+       LPWSTR *argv;
+       TESTINFO ti;
+       INT opassed, ofailed, orfailed;
+       BOOL bAll, bStatus;
+       UINT hFile = 0;
+
+       ti.bRegress = FALSE;
+       bAll = FALSE;
+       bStatus = FALSE;
+       opassed = ofailed = orfailed = 0;
+
+       argv = CommandLineToArgvW(GetCommandLineW(), &argc);
+
+       if (argc < 2)
+       {
+               OutputUsage(pszName);
+               return 0;
+       }
+
+       /* Get options */
+       for (i = 1; i < argc; i++)
+       {
+               if (_wcsicmp(argv[i], L"-r") == 0)
+               {
+                       ti.bRegress = TRUE;
+               }
+               else if (_wcsicmp(argv[i], L"all") == 0)
+               {
+                       bAll = TRUE;
+               }
+               else if (_wcsicmp(argv[i], L"status") == 0)
+               {
+                       bAll = TRUE;
+                       bStatus = TRUE;
+               }
+       }
+
+       if (bStatus)
+       {
+               ti.bRegress = TRUE;
+               char szOutputFile[MAX_PATH];
+               wsprintf(szOutputFile, "%ls.html", pszName);
+               hFile = _open(szOutputFile, O_CREAT | O_TRUNC | O_RDWR, 00700);
+               if (hFile == -1)
+               {
+                       printf("Could not create output file.\n");
+                       return 0;
+               }
+               WriteFileHeader(hFile, pszModule);
+       }
+
+       for (i = 0; i < NumTests(); i++)
+       {
+               for (j = 1; j < argc; j++)
+               {
+                       if (bAll || _wcsicmp(argv[j], TestList[i].Test) == 0)
+                       {
+                               ti.passed = 0;
+                               ti.failed = 0;
+                               ti.rfailed = 0;
+                               if (!IsFunctionPresent(TestList[i].Test))
+                               {
+                                       printf("Function %ls was not found!\n", TestList[i].Test);
+                                       ti.nApiStatus = APISTATUS_NOT_FOUND;
+                               }
+                               else
+                               {
+                                       printf("Executing test: %ls\n", TestList[i].Test);
+                                       ti.nApiStatus = TestList[i].Proc(&ti);
+                                       opassed += ti.passed;
+                                       ofailed += ti.failed;
+                                       orfailed += ti.rfailed;
+                                       printf(" tests: %d, passed: %d, failed: %d\n\n", ti.passed+ti.failed, ti.passed, ti.failed);
+                               }
+                               if (bStatus)
+                               {
+                                       if (ti.rfailed > 0)
+                                               ti.nApiStatus = APISTATUS_REGRESSION;
+                                       WriteRow(hFile, TestList[i].Test, &ti);
+                               }
+                               break;
+                       }
+               }
+       }
+
+       printf("Overall:\n");
+       printf(" tests: %d, passed: %d, failed: %d\n\n", opassed+ofailed, opassed, ofailed);
+       if (ti.bRegress)
+       {
+               printf(" regressions: %d\n", orfailed);
+       }
+
+       if (bStatus)
+       {
+               _write(hFile, szFileFooter, strlen(szFileFooter));
+               _close(hFile);
+       }
+
+       if (ti.bRegress)
+               return ti.rfailed;
+
+       return ti.failed;
+}
index fb0a0fb..2180a02 100644 (file)
@@ -1,98 +1,98 @@
-#ifndef _APITEST_H\r
-#define _APITEST_H\r
-\r
-#include <stdlib.h>\r
-#include <stdarg.h>\r
-#include <stdio.h>\r
-#include <fcntl.h>\r
-#include <windows.h>\r
-\r
-#define open _open\r
-\r
-#define APISTATUS_NORMAL 0\r
-#define APISTATUS_NOT_FOUND 1\r
-#define APISTATUS_UNIMPLEMENTED 2\r
-#define APISTATUS_ASSERTION_FAILED 3\r
-#define APISTATUS_REGRESSION 4\r
-\r
-/* type definitions */\r
-\r
-typedef struct tagTESTINFO\r
-{\r
-       INT passed;\r
-       INT failed;\r
-       INT rfailed;\r
-       BOOL bRegress;\r
-       INT nApiStatus;\r
-} TESTINFO, *PTESTINFO;\r
-\r
-typedef INT (*TESTPROC)(PTESTINFO);\r
-\r
-typedef struct tagTEST\r
-{\r
-       WCHAR* Test;\r
-       TESTPROC Proc;\r
-} TESTENTRY, *PTESTENTRY;\r
-\r
-\r
-/* macros */\r
-\r
-#define TEST(x) \\r
-       if (pti->bRegress) \\r
-       { \\r
-               if (x)\\r
-               {\\r
-                       (pti->passed)++;\\r
-                       printf("non-rtest succeeded in %s:%d (%s)\n", __FILE__, __LINE__, #x);\\r
-               } else {\\r
-                       (pti->failed)++;\\r
-               } \\r
-       } \\r
-       else \\r
-       { \\r
-               if (x)\\r
-               {\\r
-                       (pti->passed)++;\\r
-               } else {\\r
-                       (pti->failed)++;\\r
-                       printf("test failed in %s:%d (%s)\n", __FILE__, __LINE__, #x);\\r
-               } \\r
-       }\r
-\r
-#define RTEST(x) \\r
-       if (pti->bRegress) \\r
-       { \\r
-               if (x)\\r
-               {\\r
-                       (pti->passed)++;\\r
-               } else {\\r
-                       (pti->failed)++;\\r
-                       (pti->rfailed)++;\\r
-                       printf("rtest failed in %s:%d (%s)\n", __FILE__, __LINE__, #x);\\r
-               } \\r
-       } \\r
-       else \\r
-       { \\r
-               if (x)\\r
-               {\\r
-                       (pti->passed)++;\\r
-               } else {\\r
-                       (pti->failed)++;\\r
-                       printf("test failed in %s:%d (%s)\n", __FILE__, __LINE__, #x);\\r
-               } \\r
-       }\r
-\r
-#undef ASSERT\r
-#define ASSERT(x) \\r
-       if (!(x)) \\r
-       { \\r
-                       printf("Assertion failed in %s:%d (%s)\n", __FILE__, __LINE__, #x);\\r
-                       return APISTATUS_ASSERTION_FAILED; \\r
-       }\r
-\r
-int TestMain(LPWSTR pszExe, LPWSTR pszModule);\r
-extern TESTENTRY TestList[];\r
-INT NumTests(void);\r
-BOOL IsFunctionPresent(LPWSTR lpszFunction);\r
-\r
-#endif /* _APITEST_H */\r
+#ifndef _APITEST_H
+#define _APITEST_H
+
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <windows.h>
+
+#define open _open
+
+#define APISTATUS_NORMAL 0
+#define APISTATUS_NOT_FOUND 1
+#define APISTATUS_UNIMPLEMENTED 2
+#define APISTATUS_ASSERTION_FAILED 3
+#define APISTATUS_REGRESSION 4
+
+/* type definitions */
+
+typedef struct tagTESTINFO
+{
+       INT passed;
+       INT failed;
+       INT rfailed;
+       BOOL bRegress;
+       INT nApiStatus;
+} TESTINFO, *PTESTINFO;
+
+typedef INT (*TESTPROC)(PTESTINFO);
+
+typedef struct tagTEST
+{
+       WCHAR* Test;
+       TESTPROC Proc;
+} TESTENTRY, *PTESTENTRY;
+
+
+/* macros */
+
+#define TEST(x) \
+       if (pti->bRegress) \
+       { \
+               if (x)\
+               {\
+                       (pti->passed)++;\
+                       printf("non-rtest succeeded in %s:%d (%s)\n", __FILE__, __LINE__, #x);\
+               } else {\
+                       (pti->failed)++;\
+               } \
+       } \
+       else \
+       { \
+               if (x)\
+               {\
+                       (pti->passed)++;\
+               } else {\
+                       (pti->failed)++;\
+                       printf("test failed in %s:%d (%s)\n", __FILE__, __LINE__, #x);\
+               } \
+       }
+
+#define RTEST(x) \
+       if (pti->bRegress) \
+       { \
+               if (x)\
+               {\
+                       (pti->passed)++;\
+               } else {\
+                       (pti->failed)++;\
+                       (pti->rfailed)++;\
+                       printf("rtest failed in %s:%d (%s)\n", __FILE__, __LINE__, #x);\
+               } \
+       } \
+       else \
+       { \
+               if (x)\
+               {\
+                       (pti->passed)++;\
+               } else {\
+                       (pti->failed)++;\
+                       printf("test failed in %s:%d (%s)\n", __FILE__, __LINE__, #x);\
+               } \
+       }
+
+#undef ASSERT
+#define ASSERT(x) \
+       if (!(x)) \
+       { \
+                       printf("Assertion failed in %s:%d (%s)\n", __FILE__, __LINE__, #x);\
+                       return APISTATUS_ASSERTION_FAILED; \
+       }
+
+int TestMain(LPWSTR pszExe, LPWSTR pszModule);
+extern TESTENTRY TestList[];
+INT NumTests(void);
+BOOL IsFunctionPresent(LPWSTR lpszFunction);
+
+#endif /* _APITEST_H */
index 3e6520d..72fd7a1 100644 (file)
@@ -1,63 +1,63 @@
-#ifndef _WIN32_WINNT\r
-#define _WIN32_WINNT 0x0501\r
-#endif\r
-\r
-\r
-typedef PGDI_TABLE_ENTRY (CALLBACK * GDIQUERYPROC) (void);\r
-\r
-/* GDI handle table can hold 0x4000 handles */\r
-#define GDI_HANDLE_COUNT 0x10000\r
-#define GDI_GLOBAL_PROCESS (0x0)\r
-\r
-/* Handle Masks and shifts */\r
-#define GDI_HANDLE_INDEX_MASK (GDI_HANDLE_COUNT - 1)\r
-#define GDI_HANDLE_TYPE_MASK  0x007f0000\r
-#define GDI_HANDLE_STOCK_MASK 0x00800000\r
-#define GDI_HANDLE_REUSE_MASK 0xff000000\r
-#define GDI_HANDLE_REUSECNT_SHIFT 24\r
-\r
-\r
-#define GDI_OBJECT_TYPE_DC          0x00010000\r
-#define GDI_OBJECT_TYPE_REGION      0x00040000\r
-#define GDI_OBJECT_TYPE_BITMAP      0x00050000\r
-#define GDI_OBJECT_TYPE_PALETTE     0x00080000\r
-#define GDI_OBJECT_TYPE_FONT        0x000a0000\r
-#define GDI_OBJECT_TYPE_BRUSH       0x00100000\r
-#define GDI_OBJECT_TYPE_EMF         0x00210000\r
-#define GDI_OBJECT_TYPE_PEN         0x00300000\r
-#define GDI_OBJECT_TYPE_EXTPEN      0x00500000\r
-#define GDI_OBJECT_TYPE_COLORSPACE  0x00090000\r
-#define GDI_OBJECT_TYPE_METADC      0x00660000\r
-#define GDI_OBJECT_TYPE_METAFILE    0x00260000\r
-#define GDI_OBJECT_TYPE_ENHMETAFILE 0x00460000\r
-/* Following object types made up for ROS */\r
-#define GDI_OBJECT_TYPE_ENHMETADC   0x00740000\r
-#define GDI_OBJECT_TYPE_MEMDC       0x00750000\r
-#define GDI_OBJECT_TYPE_DCE         0x00770000\r
-#define GDI_OBJECT_TYPE_DONTCARE    0x007f0000\r
-/** Not really an object type. Forces GDI_FreeObj to be silent. */\r
-#define GDI_OBJECT_TYPE_SILENT      0x80000000\r
-\r
-\r
-\r
-/* Number Representation */\r
-\r
-typedef LONG FIX;\r
-\r
-\r
-\r
-\r
-HDC WINAPI GdiConvertBitmap(HDC hdc);\r
-HBRUSH WINAPI GdiConvertBrush(HBRUSH hbr);\r
-HDC WINAPI GdiConvertDC(HDC hdc);\r
-HFONT WINAPI GdiConvertFont(HFONT hfont);\r
-HPALETTE WINAPI GdiConvertPalette(HPALETTE hpal);\r
-HRGN WINAPI GdiConvertRegion(HRGN hregion);\r
-HBRUSH WINAPI GdiGetLocalBrush(HBRUSH hbr);\r
-HDC WINAPI GdiGetLocalDC(HDC hdc);\r
-BOOL WINAPI GdiDeleteLocalDC(HDC hdc);\r
-BOOL WINAPI GdiReleaseLocalDC(HDC hdc);\r
-BOOL WINAPI GdiSetAttrs(HDC hdc);\r
-\r
-\r
-\r
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x0501
+#endif
+
+
+typedef PGDI_TABLE_ENTRY (CALLBACK * GDIQUERYPROC) (void);
+
+/* GDI handle table can hold 0x4000 handles */
+#define GDI_HANDLE_COUNT 0x10000
+#define GDI_GLOBAL_PROCESS (0x0)
+
+/* Handle Masks and shifts */
+#define GDI_HANDLE_INDEX_MASK (GDI_HANDLE_COUNT - 1)
+#define GDI_HANDLE_TYPE_MASK  0x007f0000
+#define GDI_HANDLE_STOCK_MASK 0x00800000
+#define GDI_HANDLE_REUSE_MASK 0xff000000
+#define GDI_HANDLE_REUSECNT_SHIFT 24
+
+
+#define GDI_OBJECT_TYPE_DC          0x00010000
+#define GDI_OBJECT_TYPE_REGION      0x00040000
+#define GDI_OBJECT_TYPE_BITMAP      0x00050000
+#define GDI_OBJECT_TYPE_PALETTE     0x00080000
+#define GDI_OBJECT_TYPE_FONT        0x000a0000
+#define GDI_OBJECT_TYPE_BRUSH       0x00100000
+#define GDI_OBJECT_TYPE_EMF         0x00210000
+#define GDI_OBJECT_TYPE_PEN         0x00300000
+#define GDI_OBJECT_TYPE_EXTPEN      0x00500000
+#define GDI_OBJECT_TYPE_COLORSPACE  0x00090000
+#define GDI_OBJECT_TYPE_METADC      0x00660000
+#define GDI_OBJECT_TYPE_METAFILE    0x00260000
+#define GDI_OBJECT_TYPE_ENHMETAFILE 0x00460000
+/* Following object types made up for ROS */
+#define GDI_OBJECT_TYPE_ENHMETADC   0x00740000
+#define GDI_OBJECT_TYPE_MEMDC       0x00750000
+#define GDI_OBJECT_TYPE_DCE         0x00770000
+#define GDI_OBJECT_TYPE_DONTCARE    0x007f0000
+/** Not really an object type. Forces GDI_FreeObj to be silent. */
+#define GDI_OBJECT_TYPE_SILENT      0x80000000
+
+
+
+/* Number Representation */
+
+typedef LONG FIX;
+
+
+
+
+HDC WINAPI GdiConvertBitmap(HDC hdc);
+HBRUSH WINAPI GdiConvertBrush(HBRUSH hbr);
+HDC WINAPI GdiConvertDC(HDC hdc);
+HFONT WINAPI GdiConvertFont(HFONT hfont);
+HPALETTE WINAPI GdiConvertPalette(HPALETTE hpal);
+HRGN WINAPI GdiConvertRegion(HRGN hregion);
+HBRUSH WINAPI GdiGetLocalBrush(HBRUSH hbr);
+HDC WINAPI GdiGetLocalDC(HDC hdc);
+BOOL WINAPI GdiDeleteLocalDC(HDC hdc);
+BOOL WINAPI GdiReleaseLocalDC(HDC hdc);
+BOOL WINAPI GdiSetAttrs(HDC hdc);
+
+
+
index da63496..ab88895 100644 (file)
@@ -1,36 +1,36 @@
-#include "gdi32api.h"\r
-\r
-HINSTANCE g_hInstance;\r
-PGDI_TABLE_ENTRY GdiHandleTable;\r
-\r
-BOOL\r
-IsFunctionPresent(LPWSTR lpszFunction)\r
-{\r
-       return TRUE;\r
-}\r
-\r
-static\r
-PGDI_TABLE_ENTRY\r
-MyGdiQueryTable()\r
-{\r
-       PTEB pTeb = NtCurrentTeb();\r
-       PPEB pPeb = pTeb->ProcessEnvironmentBlock;\r
-       return pPeb->GdiSharedHandleTable;\r
-}\r
-\r
-int APIENTRY\r
-WinMain(HINSTANCE hInstance,\r
-        HINSTANCE hPrevInstance,\r
-        LPSTR     lpCmdLine,\r
-        int       nCmdShow)\r
-{\r
-       g_hInstance = hInstance;\r
-\r
-       GdiHandleTable = MyGdiQueryTable();\r
-       if(!GdiHandleTable)\r
-       {\r
-               return -1;\r
-       }\r
-\r
-       return TestMain(L"gdi32api", L"gdi32.dll");\r
-}\r
+#include "gdi32api.h"
+
+HINSTANCE g_hInstance;
+PGDI_TABLE_ENTRY GdiHandleTable;
+
+BOOL
+IsFunctionPresent(LPWSTR lpszFunction)
+{
+       return TRUE;
+}
+
+static
+PGDI_TABLE_ENTRY
+MyGdiQueryTable()
+{
+       PTEB pTeb = NtCurrentTeb();
+       PPEB pPeb = pTeb->ProcessEnvironmentBlock;
+       return pPeb->GdiSharedHandleTable;
+}
+
+int APIENTRY
+WinMain(HINSTANCE hInstance,
+        HINSTANCE hPrevInstance,
+        LPSTR     lpCmdLine,
+        int       nCmdShow)
+{
+       g_hInstance = hInstance;
+
+       GdiHandleTable = MyGdiQueryTable();
+       if(!GdiHandleTable)
+       {
+               return -1;
+       }
+
+       return TestMain(L"gdi32api", L"gdi32.dll");
+}
index f65b6db..73ec2a9 100644 (file)
@@ -1,26 +1,26 @@
-#ifndef _GDITEST_H\r
-#define _GDITEST_H\r
-\r
-#define WIN32_NO_STATUS\r
-#include <windows.h>\r
-#include <windows.h>\r
-#include <ndk/ntndk.h>\r
-#include <wingdi.h>\r
-#include <winddi.h>\r
-#include <d3dnthal.h>\r
-#include <prntfont.h>\r
-\r
-/* Public Win32K Headers */\r
-#include <win32k/ntgdityp.h>\r
-#include <ntgdi.h>\r
-#include <win32k/ntgdihdl.h>\r
-\r
-#include "../apitest.h"\r
-#include "gdi.h"\r
-\r
-extern HINSTANCE g_hInstance;\r
-extern PGDI_TABLE_ENTRY GdiHandleTable;\r
-\r
-#endif /* _GDITEST_H */\r
-\r
-/* EOF */\r
+#ifndef _GDITEST_H
+#define _GDITEST_H
+
+#define WIN32_NO_STATUS
+#include <windows.h>
+#include <windows.h>
+#include <ndk/ntndk.h>
+#include <wingdi.h>
+#include <winddi.h>
+#include <d3dnthal.h>
+#include <prntfont.h>
+
+/* Public Win32K Headers */
+#include <win32k/ntgdityp.h>
+#include <ntgdi.h>
+#include <win32k/ntgdihdl.h>
+
+#include "../apitest.h"
+#include "gdi.h"
+
+extern HINSTANCE g_hInstance;
+extern PGDI_TABLE_ENTRY GdiHandleTable;
+
+#endif /* _GDITEST_H */
+
+/* EOF */
index 99e4358..a045a79 100644 (file)
@@ -1,12 +1,12 @@
-<module name="gdi32api" type="win32cui">\r
-       <include base="gdi32api">.</include>\r
-       <define name="__USE_W32API" />\r
-       <define name="_WIN32_WINNT">0x0501</define>\r
-       <library>apitest</library>\r
-       <library>kernel32</library>\r
-       <library>user32</library>\r
-       <library>gdi32</library>\r
-       <library>shell32</library>\r
-       <file>gdi32api.c</file>\r
-       <file>testlist.c</file>\r
-</module>\r
+<module name="gdi32api" type="win32cui">
+       <include base="gdi32api">.</include>
+       <define name="__USE_W32API" />
+       <define name="_WIN32_WINNT">0x0501</define>
+       <library>apitest</library>
+       <library>kernel32</library>
+       <library>user32</library>
+       <library>gdi32</library>
+       <library>shell32</library>
+       <file>gdi32api.c</file>
+       <file>testlist.c</file>
+</module>
index 6a9a78c..2874209 100644 (file)
@@ -1,94 +1,94 @@
-#ifndef _GDITESTLIST_H\r
-#define _GDITESTLIST_H\r
-\r
-#include "gdi32api.h"\r
-\r
-/* include the tests */\r
-#include "tests/AddFontResource.c"\r
-#include "tests/AddFontResourceEx.c"\r
-#include "tests/CreateBitmapIndirect.c"\r
-#include "tests/CreateCompatibleDC.c"\r
-#include "tests/CreateFont.c"\r
-#include "tests/CreatePen.c"\r
-#include "tests/CreateRectRgn.c"\r
-#include "tests/EngCreateSemaphore.c"\r
-#include "tests/EngAcquireSemaphore.c"\r
-#include "tests/EngDeleteSemaphore.c"\r
-#include "tests/EngReleaseSemaphore.c"\r
-#include "tests/ExtCreatePen.c"\r
-#include "tests/GdiConvertBitmap.c"\r
-#include "tests/GdiConvertBrush.c"\r
-#include "tests/GdiConvertDC.c"\r
-#include "tests/GdiConvertFont.c"\r
-#include "tests/GdiConvertPalette.c"\r
-#include "tests/GdiConvertRegion.c"\r
-#include "tests/GdiDeleteLocalDC.c"\r
-#include "tests/GdiGetLocalBrush.c"\r
-#include "tests/GdiGetLocalDC.c"\r
-#include "tests/GdiReleaseLocalDC.c"\r
-#include "tests/GdiSetAttrs.c"\r
-#include "tests/GetClipRgn.c"\r
-#include "tests/GetCurrentObject.c"\r
-#include "tests/GetDIBits.c"\r
-#include "tests/GetObject.c"\r
-#include "tests/GetStockObject.c"\r
-#include "tests/SelectObject.c"\r
-#include "tests/SetDCPenColor.c"\r
-#include "tests/SetSysColors.c"\r
-#include "tests/SetWorldTransform.c"\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-/* The List of tests */\r
-TESTENTRY TestList[] =\r
-{\r
-       { L"AddFontResourceA", Test_AddFontResourceA },\r
-       { L"AddFontResourceEx", Test_AddFontResourceEx },\r
-       { L"CreateBitmapIndirect", Test_CreateBitmapIndirect },\r
-       { L"CreateCompatibleDC", Test_CreateCompatibleDC },\r
-       { L"CreateFont", Test_CreateFont },\r
-       { L"CreatePen", Test_CreatePen },\r
-       { L"EngCreateSemaphore", Test_EngCreateSemaphore },\r
-       { L"EngAcquireSemaphore", Test_EngAcquireSemaphore },\r
-       { L"EngDeleteSemaphore", Test_EngDeleteSemaphore },\r
-       { L"EngReleaseSemaphore", Test_EngReleaseSemaphore },\r
-       { L"CreateRectRgn", Test_CreateRectRgn },\r
-       { L"ExtCreatePen", Test_ExtCreatePen },\r
-       { L"GdiConvertBitmap", Test_GdiConvertBitmap },\r
-       { L"GdiConvertBrush", Test_GdiConvertBrush },\r
-       { L"GdiConvertBrush", Test_GdiConvertDC },\r
-       { L"GdiConvertFont", Test_GdiConvertFont },\r
-       { L"GdiConvertPalette", Test_GdiConvertPalette },\r
-       { L"GdiConvertRegion", Test_GdiConvertRegion },\r
-       { L"GdiDeleteLocalDC", Test_GdiDeleteLocalDC },\r
-       { L"GdiGetLocalBrush", Test_GdiGetLocalBrush },\r
-       { L"GdiGetLocalDC", Test_GdiGetLocalDC },\r
-       { L"GdiReleaseLocalDC", Test_GdiReleaseLocalDC },\r
-       { L"GdiSetAttrs", Test_GdiSetAttrs },\r
-       { L"GetClipRgn", Test_GetClipRgn },\r
-       { L"GetCurrentObject", Test_GetCurrentObject },\r
-       { L"GetDIBits", Test_GetDIBits },\r
-       { L"GetObject", Test_GetObject },\r
-       { L"GetStockObject", Test_GetStockObject },\r
-       { L"SelectObject", Test_SelectObject },\r
-       { L"SetDCPenColor", Test_SetDCPenColor },\r
-       { L"SetSysColors", Test_SetSysColors },\r
-       { L"SetWorldTransform", Test_SetWorldTransform },\r
-};\r
-\r
-/* The function that gives us the number of tests */\r
-INT NumTests(void)\r
-{\r
-       return sizeof(TestList) / sizeof(TESTENTRY);\r
-}\r
-\r
-#endif /* _GDITESTLIST_H */\r
-\r
-/* EOF */\r
+#ifndef _GDITESTLIST_H
+#define _GDITESTLIST_H
+
+#include "gdi32api.h"
+
+/* include the tests */
+#include "tests/AddFontResource.c"
+#include "tests/AddFontResourceEx.c"
+#include "tests/CreateBitmapIndirect.c"
+#include "tests/CreateCompatibleDC.c"
+#include "tests/CreateFont.c"
+#include "tests/CreatePen.c"
+#include "tests/CreateRectRgn.c"
+#include "tests/EngCreateSemaphore.c"
+#include "tests/EngAcquireSemaphore.c"
+#include "tests/EngDeleteSemaphore.c"
+#include "tests/EngReleaseSemaphore.c"
+#include "tests/ExtCreatePen.c"
+#include "tests/GdiConvertBitmap.c"
+#include "tests/GdiConvertBrush.c"
+#include "tests/GdiConvertDC.c"
+#include "tests/GdiConvertFont.c"
+#include "tests/GdiConvertPalette.c"
+#include "tests/GdiConvertRegion.c"
+#include "tests/GdiDeleteLocalDC.c"
+#include "tests/GdiGetLocalBrush.c"
+#include "tests/GdiGetLocalDC.c"
+#include "tests/GdiReleaseLocalDC.c"
+#include "tests/GdiSetAttrs.c"
+#include "tests/GetClipRgn.c"
+#include "tests/GetCurrentObject.c"
+#include "tests/GetDIBits.c"
+#include "tests/GetObject.c"
+#include "tests/GetStockObject.c"
+#include "tests/SelectObject.c"
+#include "tests/SetDCPenColor.c"
+#include "tests/SetSysColors.c"
+#include "tests/SetWorldTransform.c"
+
+
+
+
+
+
+
+
+
+
+/* The List of tests */
+TESTENTRY TestList[] =
+{
+       { L"AddFontResourceA", Test_AddFontResourceA },
+       { L"AddFontResourceEx", Test_AddFontResourceEx },
+       { L"CreateBitmapIndirect", Test_CreateBitmapIndirect },
+       { L"CreateCompatibleDC", Test_CreateCompatibleDC },
+       { L"CreateFont", Test_CreateFont },
+       { L"CreatePen", Test_CreatePen },
+       { L"EngCreateSemaphore", Test_EngCreateSemaphore },
+       { L"EngAcquireSemaphore", Test_EngAcquireSemaphore },
+       { L"EngDeleteSemaphore", Test_EngDeleteSemaphore },
+       { L"EngReleaseSemaphore", Test_EngReleaseSemaphore },
+       { L"CreateRectRgn", Test_CreateRectRgn },
+       { L"ExtCreatePen", Test_ExtCreatePen },
+       { L"GdiConvertBitmap", Test_GdiConvertBitmap },
+       { L"GdiConvertBrush", Test_GdiConvertBrush },
+       { L"GdiConvertBrush", Test_GdiConvertDC },
+       { L"GdiConvertFont", Test_GdiConvertFont },
+       { L"GdiConvertPalette", Test_GdiConvertPalette },
+       { L"GdiConvertRegion", Test_GdiConvertRegion },
+       { L"GdiDeleteLocalDC", Test_GdiDeleteLocalDC },
+       { L"GdiGetLocalBrush", Test_GdiGetLocalBrush },
+       { L"GdiGetLocalDC", Test_GdiGetLocalDC },
+       { L"GdiReleaseLocalDC", Test_GdiReleaseLocalDC },
+       { L"GdiSetAttrs", Test_GdiSetAttrs },
+       { L"GetClipRgn", Test_GetClipRgn },
+       { L"GetCurrentObject", Test_GetCurrentObject },
+       { L"GetDIBits", Test_GetDIBits },
+       { L"GetObject", Test_GetObject },
+       { L"GetStockObject", Test_GetStockObject },
+       { L"SelectObject", Test_SelectObject },
+       { L"SetDCPenColor", Test_SetDCPenColor },
+       { L"SetSysColors", Test_SetSysColors },
+       { L"SetWorldTransform", Test_SetWorldTransform },
+};
+
+/* The function that gives us the number of tests */
+INT NumTests(void)
+{
+       return sizeof(TestList) / sizeof(TESTENTRY);
+}
+
+#endif /* _GDITESTLIST_H */
+
+/* EOF */
index b765e50..b7cae9f 100644 (file)
@@ -1,36 +1,36 @@
-#define STAMP_DESIGNVECTOR (0x8000000 + 'd' + ('v' << 8))\r
-\r
-INT\r
-Test_AddFontResourceEx(PTESTINFO pti)\r
-{\r
-       WCHAR szFileName[MAX_PATH];\r
-\r
-       /* Test NULL filename */\r
-       SetLastError(ERROR_SUCCESS);\r
-       /* Windows crashes, would need SEH here */\r
-//     TEST(AddFontResourceExW(NULL, 0, 0) != 0);\r
-//     TEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       /* Test "" filename */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(AddFontResourceExW(L"", 0, 0) == 0);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       GetEnvironmentVariableW(L"systemroot", szFileName, MAX_PATH);\r
-       wcscat(szFileName, L"\\Fonts\\cour.ttf");\r
-\r
-       /* Test flags = 0 */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(AddFontResourceExW(szFileName, 0, 0) != 0);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(AddFontResourceExW(szFileName, 256, 0) == 0);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       /* Test invalid pointer as last parameter */\r
-       TEST(AddFontResourceExW(szFileName, 0, (void*)-1) != 0);\r
-\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
+#define STAMP_DESIGNVECTOR (0x8000000 + 'd' + ('v' << 8))
+
+INT
+Test_AddFontResourceEx(PTESTINFO pti)
+{
+       WCHAR szFileName[MAX_PATH];
+
+       /* Test NULL filename */
+       SetLastError(ERROR_SUCCESS);
+       /* Windows crashes, would need SEH here */
+//     TEST(AddFontResourceExW(NULL, 0, 0) != 0);
+//     TEST(GetLastError() == ERROR_SUCCESS);
+
+       /* Test "" filename */
+       SetLastError(ERROR_SUCCESS);
+       TEST(AddFontResourceExW(L"", 0, 0) == 0);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       GetEnvironmentVariableW(L"systemroot", szFileName, MAX_PATH);
+       wcscat(szFileName, L"\\Fonts\\cour.ttf");
+
+       /* Test flags = 0 */
+       SetLastError(ERROR_SUCCESS);
+       TEST(AddFontResourceExW(szFileName, 0, 0) != 0);
+       TEST(GetLastError() == ERROR_SUCCESS);
+
+       SetLastError(ERROR_SUCCESS);
+       TEST(AddFontResourceExW(szFileName, 256, 0) == 0);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       /* Test invalid pointer as last parameter */
+       TEST(AddFontResourceExW(szFileName, 0, (void*)-1) != 0);
+
+
+       return APISTATUS_NORMAL;
+}
index 17337bd..c6529e2 100644 (file)
@@ -1,47 +1,47 @@
-INT\r
-Test_CreateCompatibleDC(PTESTINFO pti)\r
-{\r
-       HDC hDCScreen, hOldDC, hDC, hDC2;\r
-\r
-       /* Get screen DC */\r
-       hDCScreen = GetDC(NULL);\r
-       ASSERT(hDCScreen != NULL);\r
-\r
-       /* Test NULL DC handle */\r
-       SetLastError(ERROR_SUCCESS);\r
-       hDC = CreateCompatibleDC(NULL);\r
-       TEST(hDC != NULL);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-       if(hDC) DeleteDC(hDC);\r
-\r
-       /* Test invalid DC handle */\r
-       SetLastError(ERROR_SUCCESS);\r
-       hDC = CreateCompatibleDC((HDC)0x123456);\r
-       TEST(hDC == NULL);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-       if(hDC) DeleteDC(hDC);\r
-\r
-       hDC = CreateCompatibleDC(hDCScreen);\r
-       RTEST(hDC != NULL);\r
-\r
-       // Test if first selected pen is BLACK_PEN (? or same as screen DC's pen?)\r
-       TEST(SelectObject(hDC, GetStockObject(DC_PEN)) == GetStockObject(BLACK_PEN));\r
-       TEST(SelectObject(hDC, GetStockObject(BLACK_PEN)) == GetStockObject(DC_PEN));\r
-\r
-       // Test for the starting Color == RGB(0,0,0)\r
-       TEST(SetDCPenColor(hDC, RGB(1,2,3)) == RGB(0,0,0));\r
-\r
-       // Check for reuse counter\r
-       hOldDC = hDC;\r
-       DeleteDC(hDC);\r
-       hDC = CreateCompatibleDC(hDCScreen);\r
-       hDC2 = CreateCompatibleDC(hOldDC);\r
-       RTEST(hDC2 == NULL);\r
-       if (hDC2 != NULL) DeleteDC(hDC2);\r
-\r
-       // cleanup\r
-       DeleteDC(hDC);\r
-\r
-       ReleaseDC(NULL, hDCScreen);\r
-       return APISTATUS_NORMAL;\r
-}\r
+INT
+Test_CreateCompatibleDC(PTESTINFO pti)
+{
+       HDC hDCScreen, hOldDC, hDC, hDC2;
+
+       /* Get screen DC */
+       hDCScreen = GetDC(NULL);
+       ASSERT(hDCScreen != NULL);
+
+       /* Test NULL DC handle */
+       SetLastError(ERROR_SUCCESS);
+       hDC = CreateCompatibleDC(NULL);
+       TEST(hDC != NULL);
+       TEST(GetLastError() == ERROR_SUCCESS);
+       if(hDC) DeleteDC(hDC);
+
+       /* Test invalid DC handle */
+       SetLastError(ERROR_SUCCESS);
+       hDC = CreateCompatibleDC((HDC)0x123456);
+       TEST(hDC == NULL);
+       TEST(GetLastError() == ERROR_SUCCESS);
+       if(hDC) DeleteDC(hDC);
+
+       hDC = CreateCompatibleDC(hDCScreen);
+       RTEST(hDC != NULL);
+
+       // Test if first selected pen is BLACK_PEN (? or same as screen DC's pen?)
+       TEST(SelectObject(hDC, GetStockObject(DC_PEN)) == GetStockObject(BLACK_PEN));
+       TEST(SelectObject(hDC, GetStockObject(BLACK_PEN)) == GetStockObject(DC_PEN));
+
+       // Test for the starting Color == RGB(0,0,0)
+       TEST(SetDCPenColor(hDC, RGB(1,2,3)) == RGB(0,0,0));
+
+       // Check for reuse counter
+       hOldDC = hDC;
+       DeleteDC(hDC);
+       hDC = CreateCompatibleDC(hDCScreen);
+       hDC2 = CreateCompatibleDC(hOldDC);
+       RTEST(hDC2 == NULL);
+       if (hDC2 != NULL) DeleteDC(hDC2);
+
+       // cleanup
+       DeleteDC(hDC);
+
+       ReleaseDC(NULL, hDCScreen);
+       return APISTATUS_NORMAL;
+}
index e14ba71..cb70720 100644 (file)
@@ -1,22 +1,22 @@
-#define INVALIDFONT "ThisFontDoesNotExist"\r
-\r
-INT\r
-Test_CreateFont(PTESTINFO pti)\r
-{\r
-       HFONT hFont;\r
-       LOGFONTA logfonta;\r
-\r
-       /* Test invalid font name */\r
-       hFont = CreateFontA(15, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE,\r
-                           DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,\r
-                           DEFAULT_QUALITY, DEFAULT_PITCH, INVALIDFONT);\r
-       RTEST(hFont);\r
-       RTEST(GetObjectA(hFont, sizeof(LOGFONTA), &logfonta) == sizeof(LOGFONTA));\r
-       RTEST(memcmp(logfonta.lfFaceName, INVALIDFONT, strlen(INVALIDFONT)) == 0);\r
-       RTEST(logfonta.lfWeight == FW_DONTCARE);\r
-\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
-\r
-\r
+#define INVALIDFONT "ThisFontDoesNotExist"
+
+INT
+Test_CreateFont(PTESTINFO pti)
+{
+       HFONT hFont;
+       LOGFONTA logfonta;
+
+       /* Test invalid font name */
+       hFont = CreateFontA(15, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE,
+                           DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
+                           DEFAULT_QUALITY, DEFAULT_PITCH, INVALIDFONT);
+       RTEST(hFont);
+       RTEST(GetObjectA(hFont, sizeof(LOGFONTA), &logfonta) == sizeof(LOGFONTA));
+       RTEST(memcmp(logfonta.lfFaceName, INVALIDFONT, strlen(INVALIDFONT)) == 0);
+       RTEST(logfonta.lfWeight == FW_DONTCARE);
+
+
+       return APISTATUS_NORMAL;
+}
+
+
index 20bffa6..bb1cc44 100644 (file)
@@ -1,56 +1,56 @@
-INT\r
-Test_CreatePen(PTESTINFO pti)\r
-{\r
-       HPEN hPen;\r
-       LOGPEN logpen;\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       hPen = CreatePen(PS_DASHDOT, 5, RGB(1,2,3));\r
-       RTEST(hPen);\r
-\r
-       /* Test if we have a PEN */\r
-       RTEST(GDI_HANDLE_GET_TYPE(hPen) == GDI_OBJECT_TYPE_PEN);\r
-\r
-       GetObject(hPen, sizeof(logpen), &logpen);\r
-       RTEST(logpen.lopnStyle == PS_DASHDOT);\r
-       RTEST(logpen.lopnWidth.x == 5);\r
-       RTEST(logpen.lopnColor == RGB(1,2,3));\r
-       DeleteObject(hPen);\r
-\r
-       /* PS_GEOMETRIC | PS_DASHDOT = 0x00001011 will become PS_SOLID */\r
-       logpen.lopnStyle = 22;\r
-       hPen = CreatePen(PS_GEOMETRIC | PS_DASHDOT, 5, RGB(1,2,3));\r
-       RTEST(hPen);\r
-       GetObject(hPen, sizeof(logpen), &logpen);\r
-       RTEST(logpen.lopnStyle == PS_SOLID);\r
-       DeleteObject(hPen);\r
-\r
-       /* PS_USERSTYLE will become PS_SOLID */\r
-       logpen.lopnStyle = 22;\r
-       hPen = CreatePen(PS_USERSTYLE, 5, RGB(1,2,3));\r
-       RTEST(hPen);\r
-       GetObject(hPen, sizeof(logpen), &logpen);\r
-       RTEST(logpen.lopnStyle == PS_SOLID);\r
-       DeleteObject(hPen);\r
-\r
-       /* PS_ALTERNATE will become PS_SOLID */\r
-       logpen.lopnStyle = 22;\r
-       hPen = CreatePen(PS_ALTERNATE, 5, RGB(1,2,3));\r
-       RTEST(hPen);\r
-       GetObject(hPen, sizeof(logpen), &logpen);\r
-       RTEST(logpen.lopnStyle == PS_SOLID);\r
-       DeleteObject(hPen);\r
-\r
-       /* PS_INSIDEFRAME is ok */\r
-       logpen.lopnStyle = 22;\r
-       hPen = CreatePen(PS_INSIDEFRAME, 5, RGB(1,2,3));\r
-       RTEST(hPen);\r
-       GetObject(hPen, sizeof(logpen), &logpen);\r
-       RTEST(logpen.lopnStyle == PS_INSIDEFRAME);\r
-       DeleteObject(hPen);\r
-\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
-\r
+INT
+Test_CreatePen(PTESTINFO pti)
+{
+       HPEN hPen;
+       LOGPEN logpen;
+
+       SetLastError(ERROR_SUCCESS);
+       hPen = CreatePen(PS_DASHDOT, 5, RGB(1,2,3));
+       RTEST(hPen);
+
+       /* Test if we have a PEN */
+       RTEST(GDI_HANDLE_GET_TYPE(hPen) == GDI_OBJECT_TYPE_PEN);
+
+       GetObject(hPen, sizeof(logpen), &logpen);
+       RTEST(logpen.lopnStyle == PS_DASHDOT);
+       RTEST(logpen.lopnWidth.x == 5);
+       RTEST(logpen.lopnColor == RGB(1,2,3));
+       DeleteObject(hPen);
+
+       /* PS_GEOMETRIC | PS_DASHDOT = 0x00001011 will become PS_SOLID */
+       logpen.lopnStyle = 22;
+       hPen = CreatePen(PS_GEOMETRIC | PS_DASHDOT, 5, RGB(1,2,3));
+       RTEST(hPen);
+       GetObject(hPen, sizeof(logpen), &logpen);
+       RTEST(logpen.lopnStyle == PS_SOLID);
+       DeleteObject(hPen);
+
+       /* PS_USERSTYLE will become PS_SOLID */
+       logpen.lopnStyle = 22;
+       hPen = CreatePen(PS_USERSTYLE, 5, RGB(1,2,3));
+       RTEST(hPen);
+       GetObject(hPen, sizeof(logpen), &logpen);
+       RTEST(logpen.lopnStyle == PS_SOLID);
+       DeleteObject(hPen);
+
+       /* PS_ALTERNATE will become PS_SOLID */
+       logpen.lopnStyle = 22;
+       hPen = CreatePen(PS_ALTERNATE, 5, RGB(1,2,3));
+       RTEST(hPen);
+       GetObject(hPen, sizeof(logpen), &logpen);
+       RTEST(logpen.lopnStyle == PS_SOLID);
+       DeleteObject(hPen);
+
+       /* PS_INSIDEFRAME is ok */
+       logpen.lopnStyle = 22;
+       hPen = CreatePen(PS_INSIDEFRAME, 5, RGB(1,2,3));
+       RTEST(hPen);
+       GetObject(hPen, sizeof(logpen), &logpen);
+       RTEST(logpen.lopnStyle == PS_INSIDEFRAME);
+       DeleteObject(hPen);
+
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       return APISTATUS_NORMAL;
+}
+
index 58941b4..879ac02 100644 (file)
@@ -1,8 +1,8 @@
-INT\r
-Test_CreateRectRgn(PTESTINFO pti)\r
-{\r
-//     HRGN hRgn;\r
-\r
-//     hRgn = CreateRectRgn(\r
-       return APISTATUS_NORMAL;\r
-}\r
+INT
+Test_CreateRectRgn(PTESTINFO pti)
+{
+//     HRGN hRgn;
+
+//     hRgn = CreateRectRgn(
+       return APISTATUS_NORMAL;
+}
index d2488e1..1507e95 100644 (file)
@@ -1,29 +1,29 @@
-INT\r
-Test_ExtCreatePen(PTESTINFO pti)\r
-{\r
-       HPEN hPen;\r
-       LOGBRUSH logbrush;\r
-       DWORD dwStyles[17] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};\r
-\r
-       logbrush.lbStyle = BS_SOLID;\r
-       logbrush.lbColor = RGB(1,2,3);\r
-       logbrush.lbHatch = 0;\r
-       hPen = ExtCreatePen(PS_COSMETIC, 1,&logbrush, 0, 0);\r
-       if (!hPen) return FALSE;\r
-\r
-       /* Test if we have an EXTPEN */\r
-       RTEST(GDI_HANDLE_GET_TYPE(hPen) == GDI_OBJECT_TYPE_EXTPEN);\r
-       DeleteObject(hPen);\r
-\r
-       /* test userstyles */\r
-       hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, &logbrush, 17, (CONST DWORD*)&dwStyles);\r
-       RTEST(hPen == 0);\r
-       hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, &logbrush, 16, (CONST DWORD*)&dwStyles);\r
-       RTEST(hPen != 0);\r
-\r
-       DeleteObject(hPen);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
-\r
-\r
+INT
+Test_ExtCreatePen(PTESTINFO pti)
+{
+       HPEN hPen;
+       LOGBRUSH logbrush;
+       DWORD dwStyles[17] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};
+
+       logbrush.lbStyle = BS_SOLID;
+       logbrush.lbColor = RGB(1,2,3);
+       logbrush.lbHatch = 0;
+       hPen = ExtCreatePen(PS_COSMETIC, 1,&logbrush, 0, 0);
+       if (!hPen) return FALSE;
+
+       /* Test if we have an EXTPEN */
+       RTEST(GDI_HANDLE_GET_TYPE(hPen) == GDI_OBJECT_TYPE_EXTPEN);
+       DeleteObject(hPen);
+
+       /* test userstyles */
+       hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, &logbrush, 17, (CONST DWORD*)&dwStyles);
+       RTEST(hPen == 0);
+       hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, &logbrush, 16, (CONST DWORD*)&dwStyles);
+       RTEST(hPen != 0);
+
+       DeleteObject(hPen);
+
+       return APISTATUS_NORMAL;
+}
+
+
index fee7b05..4cb9674 100644 (file)
@@ -1,31 +1,31 @@
-INT\r
-Test_GetClipRgn(PTESTINFO pti)\r
-{\r
-       HWND hWnd;\r
-       HDC hDC;\r
-       HRGN hrgn;//, hrgn2;\r
-\r
-       /* Create a window */\r
-       hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE,\r
-                           CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,\r
-                           NULL, NULL, g_hInstance, 0);\r
-\r
-       hDC = GetDC(hWnd);\r
-       hrgn = CreateRectRgn(0,0,0,0);\r
-\r
-       /* Test invalid DC */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetClipRgn((HDC)0x12345, hrgn) == -1);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       /* Test invalid hrgn */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetClipRgn(hDC, (HRGN)0x12345) == 0);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       ReleaseDC(hWnd, hDC);\r
-       DestroyWindow(hWnd);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
-\r
+INT
+Test_GetClipRgn(PTESTINFO pti)
+{
+       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);
+
+       /* Test invalid DC */
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetClipRgn((HDC)0x12345, hrgn) == -1);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       /* Test invalid hrgn */
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetClipRgn(hDC, (HRGN)0x12345) == 0);
+       TEST(GetLastError() == ERROR_SUCCESS);
+
+       ReleaseDC(hWnd, hDC);
+       DestroyWindow(hWnd);
+
+       return APISTATUS_NORMAL;
+}
+
index b778e5a..3ed96bc 100644 (file)
@@ -1,89 +1,89 @@
-INT\r
-Test_GetDIBits(PTESTINFO pti)\r
-{\r
-       HDC hDCScreen;\r
-       HBITMAP hBitmap;\r
-       BITMAPINFO bi;\r
-       INT ScreenBpp;\r
-\r
-       hDCScreen = GetDC(NULL);\r
-       if (hDCScreen == NULL)\r
-       {\r
-               return FALSE;\r
-       }\r
-\r
-       hBitmap = CreateCompatibleBitmap(hDCScreen, 16, 16);\r
-       RTEST(hBitmap != NULL);\r
-\r
-       /* misc */\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(GetDIBits(0, 0, 0, 0, NULL, NULL, 0) == 0);\r
-       RTEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(GetDIBits((HDC)2345, 0, 0, 0, NULL, NULL, 0) == 0);\r
-       RTEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(GetDIBits((HDC)2345, hBitmap, 0, 0, NULL, NULL, 0) == 0);\r
-       RTEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(GetDIBits((HDC)2345, hBitmap, 0, 15, NULL, &bi, 0) == 0);\r
-       RTEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-\r
-\r
-       /* null hdc */\r
-       SetLastError(ERROR_SUCCESS);\r
-       ZeroMemory(&bi, sizeof(BITMAPINFO));\r
-       bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\r
-       RTEST(GetDIBits(NULL, hBitmap, 0, 15, NULL, &bi, DIB_RGB_COLORS) == 0);\r
-       RTEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       /* null bitmap */\r
-       SetLastError(ERROR_SUCCESS);\r
-       ZeroMemory(&bi, sizeof(BITMAPINFO));\r
-       bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\r
-       RTEST(GetDIBits(hDCScreen, NULL, 0, 15, NULL, &bi, DIB_RGB_COLORS) == 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       /* 0 scan lines */\r
-       SetLastError(ERROR_SUCCESS);\r
-       ZeroMemory(&bi, sizeof(BITMAPINFO));\r
-       bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\r
-       RTEST(GetDIBits(hDCScreen, hBitmap, 0, 0, NULL, &bi, DIB_RGB_COLORS) > 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       /* null bitmap info - crashes XP*/\r
-       //SetLastError(ERROR_SUCCESS);\r
-       //RTEST(GetDIBits(hDCScreen, NULL, 0, 15, NULL, NULL, DIB_RGB_COLORS) == 0);\r
-       //RTEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       /* bad bmi colours (uUsage) */\r
-       SetLastError(ERROR_SUCCESS);\r
-       ZeroMemory(&bi, sizeof(BITMAPINFO));\r
-       bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\r
-       RTEST(GetDIBits(hDCScreen, hBitmap, 0, 15, NULL, &bi, 100) == 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-       RTEST(bi.bmiHeader.biWidth == 0);\r
-       RTEST(bi.bmiHeader.biHeight == 0);\r
-       RTEST(bi.bmiHeader.biBitCount == 0);\r
-       RTEST(bi.bmiHeader.biSizeImage == 0);\r
-\r
-       /* basic call */\r
-       SetLastError(ERROR_SUCCESS);\r
-       ZeroMemory(&bi, sizeof(BITMAPINFO));\r
-       bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\r
-       RTEST(GetDIBits(hDCScreen, hBitmap, 0, 15, NULL, &bi, DIB_RGB_COLORS) > 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-       ScreenBpp = GetDeviceCaps(hDCScreen, BITSPIXEL);\r
-       RTEST(bi.bmiHeader.biWidth == 16);\r
-       RTEST(bi.bmiHeader.biHeight == 16);\r
-       RTEST(bi.bmiHeader.biBitCount == ScreenBpp);\r
-       RTEST(bi.bmiHeader.biSizeImage == (16 * 16) * (ScreenBpp / 8));\r
-\r
-       DeleteObject(hBitmap);\r
-       ReleaseDC(NULL, hDCScreen);\r
-       return APISTATUS_NORMAL;\r
-}\r
+INT
+Test_GetDIBits(PTESTINFO pti)
+{
+       HDC hDCScreen;
+       HBITMAP hBitmap;
+       BITMAPINFO bi;
+       INT ScreenBpp;
+
+       hDCScreen = GetDC(NULL);
+       if (hDCScreen == NULL)
+       {
+               return FALSE;
+       }
+
+       hBitmap = CreateCompatibleBitmap(hDCScreen, 16, 16);
+       RTEST(hBitmap != NULL);
+
+       /* misc */
+       SetLastError(ERROR_SUCCESS);
+       RTEST(GetDIBits(0, 0, 0, 0, NULL, NULL, 0) == 0);
+       RTEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(GetDIBits((HDC)2345, 0, 0, 0, NULL, NULL, 0) == 0);
+       RTEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(GetDIBits((HDC)2345, hBitmap, 0, 0, NULL, NULL, 0) == 0);
+       RTEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(GetDIBits((HDC)2345, hBitmap, 0, 15, NULL, &bi, 0) == 0);
+       RTEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+
+
+       /* null hdc */
+       SetLastError(ERROR_SUCCESS);
+       ZeroMemory(&bi, sizeof(BITMAPINFO));
+       bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+       RTEST(GetDIBits(NULL, hBitmap, 0, 15, NULL, &bi, DIB_RGB_COLORS) == 0);
+       RTEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       /* null bitmap */
+       SetLastError(ERROR_SUCCESS);
+       ZeroMemory(&bi, sizeof(BITMAPINFO));
+       bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+       RTEST(GetDIBits(hDCScreen, NULL, 0, 15, NULL, &bi, DIB_RGB_COLORS) == 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       /* 0 scan lines */
+       SetLastError(ERROR_SUCCESS);
+       ZeroMemory(&bi, sizeof(BITMAPINFO));
+       bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+       RTEST(GetDIBits(hDCScreen, hBitmap, 0, 0, NULL, &bi, DIB_RGB_COLORS) > 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       /* null bitmap info - crashes XP*/
+       //SetLastError(ERROR_SUCCESS);
+       //RTEST(GetDIBits(hDCScreen, NULL, 0, 15, NULL, NULL, DIB_RGB_COLORS) == 0);
+       //RTEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       /* bad bmi colours (uUsage) */
+       SetLastError(ERROR_SUCCESS);
+       ZeroMemory(&bi, sizeof(BITMAPINFO));
+       bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+       RTEST(GetDIBits(hDCScreen, hBitmap, 0, 15, NULL, &bi, 100) == 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+       RTEST(bi.bmiHeader.biWidth == 0);
+       RTEST(bi.bmiHeader.biHeight == 0);
+       RTEST(bi.bmiHeader.biBitCount == 0);
+       RTEST(bi.bmiHeader.biSizeImage == 0);
+
+       /* basic call */
+       SetLastError(ERROR_SUCCESS);
+       ZeroMemory(&bi, sizeof(BITMAPINFO));
+       bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+       RTEST(GetDIBits(hDCScreen, hBitmap, 0, 15, NULL, &bi, DIB_RGB_COLORS) > 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+       ScreenBpp = GetDeviceCaps(hDCScreen, BITSPIXEL);
+       RTEST(bi.bmiHeader.biWidth == 16);
+       RTEST(bi.bmiHeader.biHeight == 16);
+       RTEST(bi.bmiHeader.biBitCount == ScreenBpp);
+       RTEST(bi.bmiHeader.biSizeImage == (16 * 16) * (ScreenBpp / 8));
+
+       DeleteObject(hBitmap);
+       ReleaseDC(NULL, hDCScreen);
+       return APISTATUS_NORMAL;
+}
index bcfedcf..1ba23e8 100644 (file)
-static INT\r
-Test_General(PTESTINFO pti)\r
-{\r
-       struct\r
-       {\r
-               LOGBRUSH logbrush;\r
-               BYTE additional[5];\r
-       } TestStruct;\r
-       PLOGBRUSH plogbrush;\r
-       HBRUSH hBrush;\r
-\r
-       /* Test null pointer and invalid handles */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectA(0, 0, NULL) == 0);\r
-       TEST(GetObjectA((HANDLE)-1, 0, NULL) == 0);\r
-       TEST(GetObjectA((HANDLE)0x00380000, 0, NULL) == 0);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_DC, 0, NULL) == 0);\r
-       TEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_DC, 0, NULL) == 0);\r
-       TEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_REGION, 0, NULL) == 0);\r
-       TEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_REGION, 0, NULL) == 0);\r
-       TEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_EMF, 0, NULL) == 0);\r
-       TEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_EMF, 0, NULL) == 0);\r
-       TEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METAFILE, 0, NULL) == 0);\r
-       TEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_METAFILE, 0, NULL) == 0);\r
-       TEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_ENHMETAFILE, 0, NULL) == 0);\r
-       TEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_ENHMETAFILE, 0, NULL) == 0);\r
-       TEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-\r
-       /* Test need of alignment */\r
-       hBrush = GetStockObject(WHITE_BRUSH);\r
-       plogbrush = (PVOID)((ULONG_PTR)&TestStruct.logbrush);\r
-       TEST(GetObject(hBrush, sizeof(LOGBRUSH), plogbrush) == sizeof(LOGBRUSH));\r
-       plogbrush = (PVOID)((ULONG_PTR)&TestStruct.logbrush + 2);\r
-       TEST(GetObject(hBrush, sizeof(LOGBRUSH), plogbrush) == sizeof(LOGBRUSH));\r
-       plogbrush = (PVOID)((ULONG_PTR)&TestStruct.logbrush + 1);\r
-       TEST(GetObject(hBrush, sizeof(LOGBRUSH), plogbrush) == 0);\r
-\r
-    return TRUE;\r
-}\r
-\r
-static INT\r
-Test_Bitmap(PTESTINFO pti)\r
-{\r
-       HBITMAP hBitmap;\r
-       BITMAP bitmap;\r
-       DIBSECTION dibsection;\r
-       BYTE bData[100] = {0};\r
-       BYTE Buffer[100] = {48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,0};\r
-\r
-       FillMemory(&bitmap, sizeof(BITMAP), 0x77);\r
-       hBitmap = CreateBitmap(10,10,1,8,bData);\r
-       if (!hBitmap) return FALSE;\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BITMAP, 0, NULL) == sizeof(BITMAP));\r
-       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_BITMAP, 0, NULL) == sizeof(BITMAP));\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BITMAP, sizeof(BITMAP), NULL) == sizeof(BITMAP));\r
-       TEST(GetObjectA(hBitmap, sizeof(DIBSECTION), NULL) == sizeof(BITMAP));\r
-       TEST(GetObjectA(hBitmap, 0, NULL) == sizeof(BITMAP));\r
-       TEST(GetObjectA((HANDLE)((UINT)hBitmap & 0x0000ffff), 0, NULL) == sizeof(BITMAP));\r
-       TEST(GetObjectA(hBitmap, 5, NULL) == sizeof(BITMAP));\r
-       TEST(GetObjectA(hBitmap, -5, NULL) == sizeof(BITMAP));\r
-       TEST(GetObjectA(hBitmap, 0, Buffer) == 0);\r
-       TEST(GetObjectA(hBitmap, 5, Buffer) == 0);\r
-       TEST(GetObjectA(hBitmap, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));\r
-       TEST(GetObjectA(hBitmap, sizeof(BITMAP)+2, &bitmap) == sizeof(BITMAP));\r
-       TEST(GetObjectA(hBitmap, sizeof(DIBSECTION), &dibsection) == sizeof(BITMAP));\r
-       TEST(GetObjectA(hBitmap, -5, &bitmap) == sizeof(BITMAP));\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       // todo: test invalid handle + buffer\r
-\r
-       DeleteObject(hBitmap);\r
-       return TRUE;\r
-}\r
-\r
-static INT\r
-Test_Dibsection(PTESTINFO pti)\r
-{\r
-       BITMAPINFO bmi = {{sizeof(BITMAPINFOHEADER), 10, 10, 1, 8, BI_RGB, 0, 10, 10, 0,0}};\r
-       HBITMAP hBitmap;\r
-       DIBSECTION dibsection;\r
-       PVOID pData;\r
-\r
-       FillMemory(&dibsection, sizeof(DIBSECTION), 0x77);\r
-       HDC hDC = GetDC(0);\r
-       hBitmap = CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS, &pData, NULL, 0);\r
-       if(!hBitmap) return FALSE;\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObject(hBitmap, sizeof(DIBSECTION), NULL) == sizeof(BITMAP));\r
-       TEST(GetObject(hBitmap, 0, NULL) == sizeof(BITMAP));\r
-       TEST(GetObject(hBitmap, 5, NULL) == sizeof(BITMAP));\r
-       TEST(GetObject(hBitmap, -5, NULL) == sizeof(BITMAP));\r
-       TEST(GetObject(hBitmap, 0, &dibsection) == 0);\r
-       TEST(GetObject(hBitmap, 5, &dibsection) == 0);\r
-       TEST(GetObject(hBitmap, sizeof(BITMAP), &dibsection) == sizeof(BITMAP));\r
-       TEST(GetObject(hBitmap, sizeof(BITMAP)+2, &dibsection) == sizeof(BITMAP));\r
-       TEST(GetObject(hBitmap, sizeof(DIBSECTION), &dibsection) == sizeof(DIBSECTION));\r
-       TEST(GetObject(hBitmap, sizeof(DIBSECTION)+2, &dibsection) == sizeof(DIBSECTION));\r
-       TEST(GetObject(hBitmap, -5, &dibsection) == sizeof(DIBSECTION));\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-       DeleteObject(hBitmap);\r
-       ReleaseDC(0, hDC);\r
-\r
-       return TRUE;\r
-}\r
-\r
-static INT\r
-Test_Palette(PTESTINFO pti)\r
-{\r
-       LOGPALETTE logpal;\r
-       HPALETTE hPalette;\r
-       WORD wPalette;\r
-\r
-       FillMemory(&wPalette, sizeof(WORD), 0x77);\r
-       logpal.palVersion = 0x0300;\r
-       logpal.palNumEntries = 1;\r
-       logpal.palPalEntry[0].peRed = 0;\r
-       logpal.palPalEntry[0].peGreen = 0;\r
-       logpal.palPalEntry[0].peBlue = 0;\r
-       logpal.palPalEntry[0].peFlags = PC_EXPLICIT;\r
-       hPalette = CreatePalette(&logpal);\r
-       if (!hPalette) return FALSE;\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_PALETTE, 0, NULL) == sizeof(WORD));\r
-       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_PALETTE, 0, NULL) == sizeof(WORD));\r
-       TEST(GetObject(hPalette, sizeof(WORD), NULL) == sizeof(WORD));\r
-       TEST(GetObject(hPalette, 0, NULL) == sizeof(WORD));\r
-       TEST(GetObject(hPalette, 5, NULL) == sizeof(WORD));\r
-       TEST(GetObject(hPalette, -5, NULL) == sizeof(WORD));\r
-       TEST(GetObject(hPalette, sizeof(WORD), &wPalette) == sizeof(WORD));\r
-       TEST(GetObject(hPalette, sizeof(WORD)+2, &wPalette) == sizeof(WORD));\r
-       TEST(GetObject(hPalette, 0, &wPalette) == 0);\r
-       TEST(GetObject(hPalette, 1, &wPalette) == 0);\r
-       TEST(GetObject(hPalette, -1, &wPalette) == sizeof(WORD));\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-       DeleteObject(hPalette);\r
-       return TRUE;\r
-}\r
-\r
-static INT\r
-Test_Brush(PTESTINFO pti)\r
-{\r
-       LOGBRUSH logbrush;\r
-       HBRUSH hBrush;\r
-\r
-       FillMemory(&logbrush, sizeof(LOGBRUSH), 0x77);\r
-       hBrush = CreateSolidBrush(RGB(1,2,3));\r
-       if (!hBrush) return FALSE;\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BRUSH, 0, NULL) == sizeof(LOGBRUSH));\r
-       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_BRUSH, 0, NULL) == sizeof(LOGBRUSH));\r
-       TEST(GetObject(hBrush, sizeof(WORD), NULL) == sizeof(LOGBRUSH));\r
-       TEST(GetObject(hBrush, 0, NULL) == sizeof(LOGBRUSH));\r
-       RTEST(GetObject(hBrush, 5, NULL) == sizeof(LOGBRUSH));\r
-       RTEST(GetObject(hBrush, -5, NULL) == sizeof(LOGBRUSH));\r
-\r
-       RTEST(GetObject(hBrush, 0, &logbrush) == 0);\r
-       RTEST(logbrush.lbStyle == 0x77777777);\r
-       RTEST(GetObject(hBrush, 5, &logbrush) == sizeof(LOGBRUSH));\r
-       RTEST(logbrush.lbStyle == 0);\r
-       RTEST(logbrush.lbColor == 0x77777701);\r
-\r
-       RTEST(GetObject(hBrush, sizeof(LOGBRUSH), &logbrush) == sizeof(LOGBRUSH));\r
-       RTEST(GetObject(hBrush, sizeof(LOGBRUSH)+2, &logbrush) == sizeof(LOGBRUSH));\r
-       RTEST(GetObject(hBrush, -1, &logbrush) == sizeof(LOGBRUSH));\r
-       // TODO: test all members\r
-\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-       DeleteObject(hBrush);\r
-       return TRUE;\r
-}\r
-\r
-static INT\r
-Test_Pen(PTESTINFO pti)\r
-{\r
-       LOGPEN logpen;\r
-       HPEN hPen;\r
-\r
-       FillMemory(&logpen, sizeof(LOGPEN), 0x77);\r
-       hPen = CreatePen(PS_SOLID, 3, RGB(4,5,6));\r
-       if (!hPen) return FALSE;\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_PEN, 0, NULL) == sizeof(LOGPEN));\r
-       RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_PEN, 0, NULL) == sizeof(LOGPEN));\r
-       RTEST(GetObject(hPen, sizeof(BITMAP), NULL) == sizeof(LOGPEN));\r
-       RTEST(GetObject(hPen, 0, NULL) == sizeof(LOGPEN));\r
-       RTEST(GetObject(hPen, 5, NULL) == sizeof(LOGPEN));\r
-       RTEST(GetObject(hPen, -5, NULL) == sizeof(LOGPEN));\r
-       RTEST(GetObject(hPen, sizeof(LOGPEN), &logpen) == sizeof(LOGPEN));\r
-       RTEST(GetObject(hPen, sizeof(LOGPEN)-1, &logpen) == 0);\r
-       RTEST(GetObject(hPen, sizeof(LOGPEN)+2, &logpen) == sizeof(LOGPEN));\r
-       RTEST(GetObject(hPen, 0, &logpen) == 0);\r
-       RTEST(GetObject(hPen, -5, &logpen) == sizeof(LOGPEN));\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       /* test if the fields are filled correctly */\r
-       RTEST(logpen.lopnStyle == PS_SOLID);\r
-\r
-\r
-       DeleteObject(hPen);\r
-       return TRUE;\r
-}\r
-\r
-static INT\r
-Test_ExtPen(PTESTINFO pti)\r
-{\r
-       HPEN hPen;\r
-       EXTLOGPEN extlogpen;\r
-       LOGBRUSH logbrush;\r
-       DWORD dwStyles[17] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};\r
-       struct\r
-       {\r
-               EXTLOGPEN extlogpen;\r
-               DWORD dwStyles[50];\r
-       } elpUserStyle;\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0);\r
-       RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       FillMemory(&extlogpen, sizeof(EXTLOGPEN), 0x77);\r
-       logbrush.lbStyle = BS_SOLID;\r
-       logbrush.lbColor = RGB(1,2,3);\r
-       logbrush.lbHatch = 22;\r
-       hPen = ExtCreatePen(PS_GEOMETRIC | PS_DASH, 5, &logbrush, 0, NULL);\r
-\r
-       RTEST(GDI_HANDLE_GET_TYPE(hPen) == GDI_OBJECT_TYPE_EXTPEN);\r
-       RTEST(GetObject((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0);\r
-       RTEST(GetObject(hPen, sizeof(EXTLOGPEN), NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));\r
-       RTEST(GetObject(hPen, 0, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));\r
-       RTEST(GetObject((HANDLE)GDI_HANDLE_GET_INDEX(hPen), 0, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));\r
-       RTEST(GetObject(hPen, 5, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));\r
-       RTEST(GetObject(hPen, -5, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));\r
-       RTEST(GetObject(hPen, 0, &extlogpen) == 0);\r
-       RTEST(GetObject(hPen, 4, &extlogpen) == 0);\r
-\r
-       /* Nothing should be filled */\r
-       RTEST(extlogpen.elpPenStyle == 0x77777777);\r
-       RTEST(extlogpen.elpWidth == 0x77777777);\r
-\r
-       RTEST(GetObject(hPen, sizeof(EXTLOGPEN), &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD));\r
-       RTEST(GetObject(hPen, sizeof(EXTLOGPEN)-sizeof(DWORD), &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD));\r
-       RTEST(GetObject(hPen, sizeof(EXTLOGPEN)-sizeof(DWORD)-1, &extlogpen) == 0);\r
-       RTEST(GetObject(hPen, sizeof(EXTLOGPEN)+2, &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD));\r
-       RTEST(GetObject(hPen, -5, &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD));\r
-\r
-       /* test if the fields are filled correctly */\r
-       RTEST(extlogpen.elpPenStyle == (PS_GEOMETRIC | PS_DASH));\r
-       RTEST(extlogpen.elpWidth == 5);\r
-       RTEST(extlogpen.elpBrushStyle == 0);\r
-       RTEST(extlogpen.elpColor == RGB(1,2,3));\r
-       RTEST(extlogpen.elpHatch == 22);\r
-       RTEST(extlogpen.elpNumEntries == 0);\r
-       DeleteObject(hPen);\r
-\r
-       /* A maximum of 16 Styles is allowed */\r
-       hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, &logbrush, 16, (CONST DWORD*)&dwStyles);\r
-       RTEST(GetObject(hPen, 0, NULL) == sizeof(EXTLOGPEN) + 15*sizeof(DWORD));\r
-       RTEST(GetObject(hPen, sizeof(EXTLOGPEN) + 15*sizeof(DWORD), &elpUserStyle) == sizeof(EXTLOGPEN) + 15*sizeof(DWORD));\r
-       RTEST(((EXTLOGPEN*)&elpUserStyle)->elpStyleEntry[0] == 0);\r
-       RTEST(((EXTLOGPEN*)&elpUserStyle)->elpStyleEntry[1] == 1);\r
-       RTEST(((EXTLOGPEN*)&elpUserStyle)->elpStyleEntry[15] == 15);\r
-       DeleteObject(hPen);\r
-\r
-       return TRUE;\r
-}\r
-\r
-static INT\r
-Test_Font(PTESTINFO pti)\r
-{\r
-       HFONT hFont;\r
-       LOGFONTA logfonta;\r
-       LOGFONTW logfontw;\r
-       EXTLOGFONTA extlogfonta;\r
-       EXTLOGFONTW extlogfontw;\r
-       ENUMLOGFONTEXA enumlogfontexa;\r
-       ENUMLOGFONTEXW enumlogfontexw;\r
-       ENUMLOGFONTEXDVA enumlogfontexdva;\r
-       ENUMLOGFONTEXDVW enumlogfontexdvw;\r
-       ENUMLOGFONTA enumlogfonta;\r
-       ENUMLOGFONTW enumlogfontw;\r
-       BYTE bData[270];\r
-\r
-       FillMemory(&logfonta, sizeof(LOGFONTA), 0x77);\r
-       hFont = CreateFontA(8, 8, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,\r
-               ANSI_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS,\r
-               ANTIALIASED_QUALITY, DEFAULT_PITCH, "testfont");\r
-       TEST(hFont);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, 0, NULL) == sizeof(LOGFONTA));\r
-       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, 0, NULL) == sizeof(LOGFONTW));\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(LOGFONTA), NULL) == sizeof(LOGFONTA)); // 60\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTA), NULL) == sizeof(LOGFONTA)); // 156\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXA), NULL) == sizeof(LOGFONTA)); // 188\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(EXTLOGFONTA), NULL) == sizeof(LOGFONTA)); // 192\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVA), NULL) == sizeof(LOGFONTA)); // 260\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVA)+1, NULL) == sizeof(LOGFONTA)); // 260\r
-       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(LOGFONTW), NULL) == sizeof(LOGFONTW)); // 92\r
-       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTW), NULL) == sizeof(LOGFONTW)); // 284\r
-       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(EXTLOGFONTW), NULL) == sizeof(LOGFONTW)); // 320\r
-       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXW), NULL) == sizeof(LOGFONTW)); // 348\r
-       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVW), NULL) == sizeof(LOGFONTW)); // 420\r
-       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVW)+1, NULL) == sizeof(LOGFONTW)); // 356!\r
-\r
-       TEST(GetObjectA(hFont, sizeof(LOGFONTA), NULL) == sizeof(LOGFONTA));\r
-       TEST(GetObjectA(hFont, 0, NULL) == sizeof(LOGFONTA));\r
-       TEST(GetObjectA(hFont, 5, NULL) == sizeof(LOGFONTA));\r
-       TEST(GetObjectA(hFont, -5, NULL) == sizeof(LOGFONTA));\r
-       TEST(GetObjectA(hFont, 0, &logfonta) == 0);\r
-       TEST(logfonta.lfHeight == 0x77777777);\r
-\r
-       TEST(GetObjectA(hFont, 5, &logfonta) == 5);\r
-       TEST(logfonta.lfHeight == 8);\r
-       TEST(logfonta.lfWidth == 0x77777708);\r
-\r
-       TEST(GetObjectA(hFont, sizeof(LOGFONTA), &logfonta) == sizeof(LOGFONTA)); // 60\r
-       TEST(GetObjectA(hFont, sizeof(LOGFONTW), &logfontw) == sizeof(LOGFONTA)); // 92\r
-       TEST(GetObjectA(hFont, sizeof(EXTLOGFONTA), &extlogfonta) == sizeof(EXTLOGFONTA)); // 192\r
-       TEST(GetObjectA(hFont, sizeof(EXTLOGFONTA)+1, &extlogfonta) == sizeof(EXTLOGFONTA)+1); // 192\r
-       TEST(GetObjectA(hFont, sizeof(EXTLOGFONTW), &extlogfontw) == sizeof(ENUMLOGFONTEXDVA)); // 320\r
-\r
-       TEST(GetObjectA(hFont, 261, &bData) == 260); // no\r
-\r
-       /* LOGFONT / GetObjectW */\r
-       FillMemory(&logfontw, sizeof(LOGFONTW), 0x77);\r
-\r
-       TEST(GetObjectW(hFont, sizeof(LOGFONTW), NULL) == sizeof(LOGFONTW));\r
-       TEST(GetObjectW(hFont, 0, NULL) == sizeof(LOGFONTW));\r
-       TEST(GetObjectW(hFont, 5, NULL) == sizeof(LOGFONTW));\r
-       TEST(GetObjectW(hFont, -5, NULL) == sizeof(LOGFONTW));\r
-       TEST(GetObjectW(hFont, 0, &logfontw) == 0);\r
-       TEST(logfontw.lfHeight == 0x77777777);\r
-\r
-       TEST(GetObjectW(hFont, 5, &logfontw) == 5);\r
-       TEST(logfontw.lfHeight == 8);\r
-       TEST(logfontw.lfWidth == 0x77777708);\r
-\r
-       TEST(GetObjectA(hFont, sizeof(LOGFONTA), &logfonta) == sizeof(LOGFONTA)); // 60\r
-       TEST(logfonta.lfHeight == 8);\r
-       TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTA), &enumlogfonta) == sizeof(ENUMLOGFONTA)); // 156\r
-       TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTEXA), &enumlogfontexa) == sizeof(ENUMLOGFONTEXA)); // 188\r
-       TEST(GetObjectA(hFont, sizeof(EXTLOGFONTA), &extlogfonta) == sizeof(EXTLOGFONTA)); // 192\r
-       TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTEXDVA), &enumlogfontexdva) == sizeof(ENUMLOGFONTEXDVA)); // 260\r
-       TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTEXDVA)+1, &enumlogfontexdva) == sizeof(ENUMLOGFONTEXDVA)); // 260\r
-\r
-       TEST(GetObjectW(hFont, sizeof(LOGFONTW), &logfontw) == sizeof(LOGFONTW)); // 92\r
-       TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTW), &enumlogfontw) == sizeof(ENUMLOGFONTW)); // 284\r
-       TEST(GetObjectW(hFont, sizeof(EXTLOGFONTW), &extlogfontw) == sizeof(EXTLOGFONTW)); // 320\r
-       TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTEXW), &enumlogfontexw) == sizeof(ENUMLOGFONTEXW)); // 348\r
-       TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTEXDVW), &enumlogfontexdvw) == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD)); // 420\r
-       TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTEXDVW)+1, &enumlogfontexdvw) == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD)); // 356!\r
-\r
-       TEST(GetObjectW(hFont, 356, &bData) == 356);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       DeleteObject(hFont);\r
-\r
-       return TRUE;\r
-}\r
-\r
-static INT\r
-Test_Colorspace(PTESTINFO pti)\r
-{\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_COLORSPACE, 0, NULL) == 60);// FIXME: what structure?\r
-       TEST(GetLastError() == ERROR_INSUFFICIENT_BUFFER);\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_COLORSPACE, 0, NULL) == 0);\r
-       TEST(GetLastError() == ERROR_INSUFFICIENT_BUFFER);\r
-\r
-       return TRUE;\r
-}\r
-\r
-static INT\r
-Test_MetaDC(PTESTINFO pti)\r
-{\r
-       /* Windows does not SetLastError() on a metadc, but it doesn't seem to do anything with it */\r
-       HDC hMetaDC;\r
-       BYTE buffer[100];\r
-\r
-       hMetaDC = CreateMetaFile(NULL);\r
-       if(!hMetaDC) return FALSE;\r
-       if(((UINT)hMetaDC & GDI_HANDLE_TYPE_MASK) != GDI_OBJECT_TYPE_METADC) return FALSE;\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METADC, 0, NULL) == 0);\r
-       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METADC, 100, &buffer) == 0);\r
-       TEST(GetObjectA(hMetaDC, 0, NULL) == 0);\r
-       TEST(GetObjectA(hMetaDC, 100, &buffer) == 0);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-       return TRUE;\r
-}\r
-\r
-INT\r
-Test_GetObject(PTESTINFO pti)\r
-{\r
-\r
-    HRGN hRgn;\r
-       hRgn = CreateRectRgn(0,0,5,5);\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(GetObjectW(hRgn, 0, NULL) == 0);\r
-       TEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-       DeleteObject(hRgn);\r
-\r
-       Test_Font(pti);\r
-       Test_Colorspace(pti);\r
-       Test_General(pti);\r
-       Test_Bitmap(pti);\r
-       Test_Dibsection(pti);\r
-       Test_Palette(pti);\r
-       Test_Brush(pti);\r
-       Test_Pen(pti);\r
-       Test_ExtPen(pti); // not implemented yet in ROS\r
-       Test_MetaDC(pti);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
+static INT
+Test_General(PTESTINFO pti)
+{
+       struct
+       {
+               LOGBRUSH logbrush;
+               BYTE additional[5];
+       } TestStruct;
+       PLOGBRUSH plogbrush;
+       HBRUSH hBrush;
+
+       /* Test null pointer and invalid handles */
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectA(0, 0, NULL) == 0);
+       TEST(GetObjectA((HANDLE)-1, 0, NULL) == 0);
+       TEST(GetObjectA((HANDLE)0x00380000, 0, NULL) == 0);
+       TEST(GetLastError() == ERROR_SUCCESS);
+
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_DC, 0, NULL) == 0);
+       TEST(GetLastError() == ERROR_INVALID_HANDLE);
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_DC, 0, NULL) == 0);
+       TEST(GetLastError() == ERROR_INVALID_HANDLE);
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_REGION, 0, NULL) == 0);
+       TEST(GetLastError() == ERROR_INVALID_HANDLE);
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_REGION, 0, NULL) == 0);
+       TEST(GetLastError() == ERROR_INVALID_HANDLE);
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_EMF, 0, NULL) == 0);
+       TEST(GetLastError() == ERROR_INVALID_HANDLE);
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_EMF, 0, NULL) == 0);
+       TEST(GetLastError() == ERROR_INVALID_HANDLE);
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METAFILE, 0, NULL) == 0);
+       TEST(GetLastError() == ERROR_INVALID_HANDLE);
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_METAFILE, 0, NULL) == 0);
+       TEST(GetLastError() == ERROR_INVALID_HANDLE);
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_ENHMETAFILE, 0, NULL) == 0);
+       TEST(GetLastError() == ERROR_INVALID_HANDLE);
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_ENHMETAFILE, 0, NULL) == 0);
+       TEST(GetLastError() == ERROR_INVALID_HANDLE);
+
+       /* Test need of alignment */
+       hBrush = GetStockObject(WHITE_BRUSH);
+       plogbrush = (PVOID)((ULONG_PTR)&TestStruct.logbrush);
+       TEST(GetObject(hBrush, sizeof(LOGBRUSH), plogbrush) == sizeof(LOGBRUSH));
+       plogbrush = (PVOID)((ULONG_PTR)&TestStruct.logbrush + 2);
+       TEST(GetObject(hBrush, sizeof(LOGBRUSH), plogbrush) == sizeof(LOGBRUSH));
+       plogbrush = (PVOID)((ULONG_PTR)&TestStruct.logbrush + 1);
+       TEST(GetObject(hBrush, sizeof(LOGBRUSH), plogbrush) == 0);
+
+    return TRUE;
+}
+
+static INT
+Test_Bitmap(PTESTINFO pti)
+{
+       HBITMAP hBitmap;
+       BITMAP bitmap;
+       DIBSECTION dibsection;
+       BYTE bData[100] = {0};
+       BYTE Buffer[100] = {48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,0};
+
+       FillMemory(&bitmap, sizeof(BITMAP), 0x77);
+       hBitmap = CreateBitmap(10,10,1,8,bData);
+       if (!hBitmap) return FALSE;
+
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BITMAP, 0, NULL) == sizeof(BITMAP));
+       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_BITMAP, 0, NULL) == sizeof(BITMAP));
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BITMAP, sizeof(BITMAP), NULL) == sizeof(BITMAP));
+       TEST(GetObjectA(hBitmap, sizeof(DIBSECTION), NULL) == sizeof(BITMAP));
+       TEST(GetObjectA(hBitmap, 0, NULL) == sizeof(BITMAP));
+       TEST(GetObjectA((HANDLE)((UINT)hBitmap & 0x0000ffff), 0, NULL) == sizeof(BITMAP));
+       TEST(GetObjectA(hBitmap, 5, NULL) == sizeof(BITMAP));
+       TEST(GetObjectA(hBitmap, -5, NULL) == sizeof(BITMAP));
+       TEST(GetObjectA(hBitmap, 0, Buffer) == 0);
+       TEST(GetObjectA(hBitmap, 5, Buffer) == 0);
+       TEST(GetObjectA(hBitmap, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
+       TEST(GetObjectA(hBitmap, sizeof(BITMAP)+2, &bitmap) == sizeof(BITMAP));
+       TEST(GetObjectA(hBitmap, sizeof(DIBSECTION), &dibsection) == sizeof(BITMAP));
+       TEST(GetObjectA(hBitmap, -5, &bitmap) == sizeof(BITMAP));
+       TEST(GetLastError() == ERROR_SUCCESS);
+
+       // todo: test invalid handle + buffer
+
+       DeleteObject(hBitmap);
+       return TRUE;
+}
+
+static INT
+Test_Dibsection(PTESTINFO pti)
+{
+       BITMAPINFO bmi = {{sizeof(BITMAPINFOHEADER), 10, 10, 1, 8, BI_RGB, 0, 10, 10, 0,0}};
+       HBITMAP hBitmap;
+       DIBSECTION dibsection;
+       PVOID pData;
+
+       FillMemory(&dibsection, sizeof(DIBSECTION), 0x77);
+       HDC hDC = GetDC(0);
+       hBitmap = CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS, &pData, NULL, 0);
+       if(!hBitmap) return FALSE;
+
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObject(hBitmap, sizeof(DIBSECTION), NULL) == sizeof(BITMAP));
+       TEST(GetObject(hBitmap, 0, NULL) == sizeof(BITMAP));
+       TEST(GetObject(hBitmap, 5, NULL) == sizeof(BITMAP));
+       TEST(GetObject(hBitmap, -5, NULL) == sizeof(BITMAP));
+       TEST(GetObject(hBitmap, 0, &dibsection) == 0);
+       TEST(GetObject(hBitmap, 5, &dibsection) == 0);
+       TEST(GetObject(hBitmap, sizeof(BITMAP), &dibsection) == sizeof(BITMAP));
+       TEST(GetObject(hBitmap, sizeof(BITMAP)+2, &dibsection) == sizeof(BITMAP));
+       TEST(GetObject(hBitmap, sizeof(DIBSECTION), &dibsection) == sizeof(DIBSECTION));
+       TEST(GetObject(hBitmap, sizeof(DIBSECTION)+2, &dibsection) == sizeof(DIBSECTION));
+       TEST(GetObject(hBitmap, -5, &dibsection) == sizeof(DIBSECTION));
+       TEST(GetLastError() == ERROR_SUCCESS);
+       DeleteObject(hBitmap);
+       ReleaseDC(0, hDC);
+
+       return TRUE;
+}
+
+static INT
+Test_Palette(PTESTINFO pti)
+{
+       LOGPALETTE logpal;
+       HPALETTE hPalette;
+       WORD wPalette;
+
+       FillMemory(&wPalette, sizeof(WORD), 0x77);
+       logpal.palVersion = 0x0300;
+       logpal.palNumEntries = 1;
+       logpal.palPalEntry[0].peRed = 0;
+       logpal.palPalEntry[0].peGreen = 0;
+       logpal.palPalEntry[0].peBlue = 0;
+       logpal.palPalEntry[0].peFlags = PC_EXPLICIT;
+       hPalette = CreatePalette(&logpal);
+       if (!hPalette) return FALSE;
+
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_PALETTE, 0, NULL) == sizeof(WORD));
+       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_PALETTE, 0, NULL) == sizeof(WORD));
+       TEST(GetObject(hPalette, sizeof(WORD), NULL) == sizeof(WORD));
+       TEST(GetObject(hPalette, 0, NULL) == sizeof(WORD));
+       TEST(GetObject(hPalette, 5, NULL) == sizeof(WORD));
+       TEST(GetObject(hPalette, -5, NULL) == sizeof(WORD));
+       TEST(GetObject(hPalette, sizeof(WORD), &wPalette) == sizeof(WORD));
+       TEST(GetObject(hPalette, sizeof(WORD)+2, &wPalette) == sizeof(WORD));
+       TEST(GetObject(hPalette, 0, &wPalette) == 0);
+       TEST(GetObject(hPalette, 1, &wPalette) == 0);
+       TEST(GetObject(hPalette, -1, &wPalette) == sizeof(WORD));
+       TEST(GetLastError() == ERROR_SUCCESS);
+       DeleteObject(hPalette);
+       return TRUE;
+}
+
+static INT
+Test_Brush(PTESTINFO pti)
+{
+       LOGBRUSH logbrush;
+       HBRUSH hBrush;
+
+       FillMemory(&logbrush, sizeof(LOGBRUSH), 0x77);
+       hBrush = CreateSolidBrush(RGB(1,2,3));
+       if (!hBrush) return FALSE;
+
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BRUSH, 0, NULL) == sizeof(LOGBRUSH));
+       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));
+       RTEST(GetObject(hBrush, 5, NULL) == sizeof(LOGBRUSH));
+       RTEST(GetObject(hBrush, -5, NULL) == sizeof(LOGBRUSH));
+
+       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);
+
+       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
+
+       RTEST(GetLastError() == ERROR_SUCCESS);
+       DeleteObject(hBrush);
+       return TRUE;
+}
+
+static INT
+Test_Pen(PTESTINFO pti)
+{
+       LOGPEN logpen;
+       HPEN hPen;
+
+       FillMemory(&logpen, sizeof(LOGPEN), 0x77);
+       hPen = CreatePen(PS_SOLID, 3, RGB(4,5,6));
+       if (!hPen) return FALSE;
+       SetLastError(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 */
+       RTEST(logpen.lopnStyle == PS_SOLID);
+
+
+       DeleteObject(hPen);
+       return TRUE;
+}
+
+static INT
+Test_ExtPen(PTESTINFO pti)
+{
+       HPEN hPen;
+       EXTLOGPEN extlogpen;
+       LOGBRUSH logbrush;
+       DWORD dwStyles[17] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
+       struct
+       {
+               EXTLOGPEN extlogpen;
+               DWORD dwStyles[50];
+       } elpUserStyle;
+
+       SetLastError(ERROR_SUCCESS);
+       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);
+       logbrush.lbStyle = BS_SOLID;
+       logbrush.lbColor = RGB(1,2,3);
+       logbrush.lbHatch = 22;
+       hPen = ExtCreatePen(PS_GEOMETRIC | PS_DASH, 5, &logbrush, 0, NULL);
+
+       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);
+
+       /* Nothing should be filled */
+       RTEST(extlogpen.elpPenStyle == 0x77777777);
+       RTEST(extlogpen.elpWidth == 0x77777777);
+
+       RTEST(GetObject(hPen, sizeof(EXTLOGPEN), &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD));
+       RTEST(GetObject(hPen, sizeof(EXTLOGPEN)-sizeof(DWORD), &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD));
+       RTEST(GetObject(hPen, sizeof(EXTLOGPEN)-sizeof(DWORD)-1, &extlogpen) == 0);
+       RTEST(GetObject(hPen, sizeof(EXTLOGPEN)+2, &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD));
+       RTEST(GetObject(hPen, -5, &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD));
+
+       /* test if the fields are filled correctly */
+       RTEST(extlogpen.elpPenStyle == (PS_GEOMETRIC | PS_DASH));
+       RTEST(extlogpen.elpWidth == 5);
+       RTEST(extlogpen.elpBrushStyle == 0);
+       RTEST(extlogpen.elpColor == RGB(1,2,3));
+       RTEST(extlogpen.elpHatch == 22);
+       RTEST(extlogpen.elpNumEntries == 0);
+       DeleteObject(hPen);
+
+       /* A maximum of 16 Styles is allowed */
+       hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, &logbrush, 16, (CONST DWORD*)&dwStyles);
+       RTEST(GetObject(hPen, 0, NULL) == sizeof(EXTLOGPEN) + 15*sizeof(DWORD));
+       RTEST(GetObject(hPen, sizeof(EXTLOGPEN) + 15*sizeof(DWORD), &elpUserStyle) == sizeof(EXTLOGPEN) + 15*sizeof(DWORD));
+       RTEST(((EXTLOGPEN*)&elpUserStyle)->elpStyleEntry[0] == 0);
+       RTEST(((EXTLOGPEN*)&elpUserStyle)->elpStyleEntry[1] == 1);
+       RTEST(((EXTLOGPEN*)&elpUserStyle)->elpStyleEntry[15] == 15);
+       DeleteObject(hPen);
+
+       return TRUE;
+}
+
+static INT
+Test_Font(PTESTINFO pti)
+{
+       HFONT hFont;
+       LOGFONTA logfonta;
+       LOGFONTW logfontw;
+       EXTLOGFONTA extlogfonta;
+       EXTLOGFONTW extlogfontw;
+       ENUMLOGFONTEXA enumlogfontexa;
+       ENUMLOGFONTEXW enumlogfontexw;
+       ENUMLOGFONTEXDVA enumlogfontexdva;
+       ENUMLOGFONTEXDVW enumlogfontexdvw;
+       ENUMLOGFONTA enumlogfonta;
+       ENUMLOGFONTW enumlogfontw;
+       BYTE bData[270];
+
+       FillMemory(&logfonta, sizeof(LOGFONTA), 0x77);
+       hFont = CreateFontA(8, 8, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
+               ANSI_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS,
+               ANTIALIASED_QUALITY, DEFAULT_PITCH, "testfont");
+       TEST(hFont);
+
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, 0, NULL) == sizeof(LOGFONTA));
+       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, 0, NULL) == sizeof(LOGFONTW));
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(LOGFONTA), NULL) == sizeof(LOGFONTA)); // 60
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTA), NULL) == sizeof(LOGFONTA)); // 156
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXA), NULL) == sizeof(LOGFONTA)); // 188
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(EXTLOGFONTA), NULL) == sizeof(LOGFONTA)); // 192
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVA), NULL) == sizeof(LOGFONTA)); // 260
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVA)+1, NULL) == sizeof(LOGFONTA)); // 260
+       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(LOGFONTW), NULL) == sizeof(LOGFONTW)); // 92
+       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTW), NULL) == sizeof(LOGFONTW)); // 284
+       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(EXTLOGFONTW), NULL) == sizeof(LOGFONTW)); // 320
+       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXW), NULL) == sizeof(LOGFONTW)); // 348
+       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVW), NULL) == sizeof(LOGFONTW)); // 420
+       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVW)+1, NULL) == sizeof(LOGFONTW)); // 356!
+
+       TEST(GetObjectA(hFont, sizeof(LOGFONTA), NULL) == sizeof(LOGFONTA));
+       TEST(GetObjectA(hFont, 0, NULL) == sizeof(LOGFONTA));
+       TEST(GetObjectA(hFont, 5, NULL) == sizeof(LOGFONTA));
+       TEST(GetObjectA(hFont, -5, NULL) == sizeof(LOGFONTA));
+       TEST(GetObjectA(hFont, 0, &logfonta) == 0);
+       TEST(logfonta.lfHeight == 0x77777777);
+
+       TEST(GetObjectA(hFont, 5, &logfonta) == 5);
+       TEST(logfonta.lfHeight == 8);
+       TEST(logfonta.lfWidth == 0x77777708);
+
+       TEST(GetObjectA(hFont, sizeof(LOGFONTA), &logfonta) == sizeof(LOGFONTA)); // 60
+       TEST(GetObjectA(hFont, sizeof(LOGFONTW), &logfontw) == sizeof(LOGFONTA)); // 92
+       TEST(GetObjectA(hFont, sizeof(EXTLOGFONTA), &extlogfonta) == sizeof(EXTLOGFONTA)); // 192
+       TEST(GetObjectA(hFont, sizeof(EXTLOGFONTA)+1, &extlogfonta) == sizeof(EXTLOGFONTA)+1); // 192
+       TEST(GetObjectA(hFont, sizeof(EXTLOGFONTW), &extlogfontw) == sizeof(ENUMLOGFONTEXDVA)); // 320
+
+       TEST(GetObjectA(hFont, 261, &bData) == 260); // no
+
+       /* LOGFONT / GetObjectW */
+       FillMemory(&logfontw, sizeof(LOGFONTW), 0x77);
+
+       TEST(GetObjectW(hFont, sizeof(LOGFONTW), NULL) == sizeof(LOGFONTW));
+       TEST(GetObjectW(hFont, 0, NULL) == sizeof(LOGFONTW));
+       TEST(GetObjectW(hFont, 5, NULL) == sizeof(LOGFONTW));
+       TEST(GetObjectW(hFont, -5, NULL) == sizeof(LOGFONTW));
+       TEST(GetObjectW(hFont, 0, &logfontw) == 0);
+       TEST(logfontw.lfHeight == 0x77777777);
+
+       TEST(GetObjectW(hFont, 5, &logfontw) == 5);
+       TEST(logfontw.lfHeight == 8);
+       TEST(logfontw.lfWidth == 0x77777708);
+
+       TEST(GetObjectA(hFont, sizeof(LOGFONTA), &logfonta) == sizeof(LOGFONTA)); // 60
+       TEST(logfonta.lfHeight == 8);
+       TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTA), &enumlogfonta) == sizeof(ENUMLOGFONTA)); // 156
+       TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTEXA), &enumlogfontexa) == sizeof(ENUMLOGFONTEXA)); // 188
+       TEST(GetObjectA(hFont, sizeof(EXTLOGFONTA), &extlogfonta) == sizeof(EXTLOGFONTA)); // 192
+       TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTEXDVA), &enumlogfontexdva) == sizeof(ENUMLOGFONTEXDVA)); // 260
+       TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTEXDVA)+1, &enumlogfontexdva) == sizeof(ENUMLOGFONTEXDVA)); // 260
+
+       TEST(GetObjectW(hFont, sizeof(LOGFONTW), &logfontw) == sizeof(LOGFONTW)); // 92
+       TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTW), &enumlogfontw) == sizeof(ENUMLOGFONTW)); // 284
+       TEST(GetObjectW(hFont, sizeof(EXTLOGFONTW), &extlogfontw) == sizeof(EXTLOGFONTW)); // 320
+       TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTEXW), &enumlogfontexw) == sizeof(ENUMLOGFONTEXW)); // 348
+       TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTEXDVW), &enumlogfontexdvw) == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD)); // 420
+       TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTEXDVW)+1, &enumlogfontexdvw) == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD)); // 356!
+
+       TEST(GetObjectW(hFont, 356, &bData) == 356);
+       TEST(GetLastError() == ERROR_SUCCESS);
+
+       DeleteObject(hFont);
+
+       return TRUE;
+}
+
+static INT
+Test_Colorspace(PTESTINFO pti)
+{
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_COLORSPACE, 0, NULL) == 60);// FIXME: what structure?
+       TEST(GetLastError() == ERROR_INSUFFICIENT_BUFFER);
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_COLORSPACE, 0, NULL) == 0);
+       TEST(GetLastError() == ERROR_INSUFFICIENT_BUFFER);
+
+       return TRUE;
+}
+
+static INT
+Test_MetaDC(PTESTINFO pti)
+{
+       /* Windows does not SetLastError() on a metadc, but it doesn't seem to do anything with it */
+       HDC hMetaDC;
+       BYTE buffer[100];
+
+       hMetaDC = CreateMetaFile(NULL);
+       if(!hMetaDC) return FALSE;
+       if(((UINT)hMetaDC & GDI_HANDLE_TYPE_MASK) != GDI_OBJECT_TYPE_METADC) return FALSE;
+
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METADC, 0, NULL) == 0);
+       TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METADC, 100, &buffer) == 0);
+       TEST(GetObjectA(hMetaDC, 0, NULL) == 0);
+       TEST(GetObjectA(hMetaDC, 100, &buffer) == 0);
+       TEST(GetLastError() == ERROR_SUCCESS);
+       return TRUE;
+}
+
+INT
+Test_GetObject(PTESTINFO pti)
+{
+
+    HRGN hRgn;
+       hRgn = CreateRectRgn(0,0,5,5);
+       SetLastError(ERROR_SUCCESS);
+       TEST(GetObjectW(hRgn, 0, NULL) == 0);
+       TEST(GetLastError() == ERROR_INVALID_HANDLE);
+       DeleteObject(hRgn);
+
+       Test_Font(pti);
+       Test_Colorspace(pti);
+       Test_General(pti);
+       Test_Bitmap(pti);
+       Test_Dibsection(pti);
+       Test_Palette(pti);
+       Test_Brush(pti);
+       Test_Pen(pti);
+       Test_ExtPen(pti); // not implemented yet in ROS
+       Test_MetaDC(pti);
+
+       return APISTATUS_NORMAL;
+}
index bdb37b9..c4fd72f 100644 (file)
@@ -1,41 +1,41 @@
-INT\r
-Test_GetStockObject(PTESTINFO pti)\r
-{\r
-       /* Test limits and error */\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(GetStockObject(0) != NULL);\r
-       TEST(GetStockObject(20) != NULL);\r
-       TEST(GetStockObject(21) != NULL);\r
-       RTEST(GetStockObject(-1) == NULL);\r
-       RTEST(GetStockObject(9) == NULL);\r
-       RTEST(GetStockObject(22) == NULL);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       /* Test for the stock bit */\r
-       RTEST((UINT)GetStockObject(WHITE_BRUSH) && GDI_HANDLE_STOCK_MASK);\r
-\r
-       /* Test for correct types */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(WHITE_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 0 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(LTGRAY_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 1 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(GRAY_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 1 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(DKGRAY_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 1 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(BLACK_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 1 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(NULL_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 1 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(WHITE_PEN)) == GDI_OBJECT_TYPE_PEN); /* 6 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(BLACK_PEN)) == GDI_OBJECT_TYPE_PEN); /* 7 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(NULL_PEN)) == GDI_OBJECT_TYPE_PEN); /* 8 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(OEM_FIXED_FONT)) == GDI_OBJECT_TYPE_FONT); /* 10 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(ANSI_FIXED_FONT)) == GDI_OBJECT_TYPE_FONT); /* 11 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(ANSI_VAR_FONT)) == GDI_OBJECT_TYPE_FONT); /* 12 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(SYSTEM_FONT)) == GDI_OBJECT_TYPE_FONT); /* 13 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(DEVICE_DEFAULT_FONT)) == GDI_OBJECT_TYPE_FONT); /* 14 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(DEFAULT_PALETTE)) == GDI_OBJECT_TYPE_PALETTE); /* 15 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(SYSTEM_FIXED_FONT)) == GDI_OBJECT_TYPE_FONT); /* 16 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(DEFAULT_GUI_FONT)) == GDI_OBJECT_TYPE_FONT); /* 17 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(DC_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 18 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(DC_PEN)) == GDI_OBJECT_TYPE_PEN); /* 19 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(20)) == GDI_OBJECT_TYPE_COLORSPACE); /* 20 */\r
-       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(21)) == GDI_OBJECT_TYPE_BITMAP); /* 21 */\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
+INT
+Test_GetStockObject(PTESTINFO pti)
+{
+       /* Test limits and error */
+       SetLastError(ERROR_SUCCESS);
+       RTEST(GetStockObject(0) != NULL);
+       TEST(GetStockObject(20) != NULL);
+       TEST(GetStockObject(21) != NULL);
+       RTEST(GetStockObject(-1) == NULL);
+       RTEST(GetStockObject(9) == NULL);
+       RTEST(GetStockObject(22) == NULL);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       /* Test for the stock bit */
+       RTEST((UINT)GetStockObject(WHITE_BRUSH) && GDI_HANDLE_STOCK_MASK);
+
+       /* Test for correct types */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(WHITE_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 0 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(LTGRAY_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 1 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(GRAY_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 1 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(DKGRAY_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 1 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(BLACK_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 1 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(NULL_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 1 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(WHITE_PEN)) == GDI_OBJECT_TYPE_PEN); /* 6 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(BLACK_PEN)) == GDI_OBJECT_TYPE_PEN); /* 7 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(NULL_PEN)) == GDI_OBJECT_TYPE_PEN); /* 8 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(OEM_FIXED_FONT)) == GDI_OBJECT_TYPE_FONT); /* 10 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(ANSI_FIXED_FONT)) == GDI_OBJECT_TYPE_FONT); /* 11 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(ANSI_VAR_FONT)) == GDI_OBJECT_TYPE_FONT); /* 12 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(SYSTEM_FONT)) == GDI_OBJECT_TYPE_FONT); /* 13 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(DEVICE_DEFAULT_FONT)) == GDI_OBJECT_TYPE_FONT); /* 14 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(DEFAULT_PALETTE)) == GDI_OBJECT_TYPE_PALETTE); /* 15 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(SYSTEM_FIXED_FONT)) == GDI_OBJECT_TYPE_FONT); /* 16 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(DEFAULT_GUI_FONT)) == GDI_OBJECT_TYPE_FONT); /* 17 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(DC_BRUSH)) == GDI_OBJECT_TYPE_BRUSH); /* 18 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(DC_PEN)) == GDI_OBJECT_TYPE_PEN); /* 19 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(20)) == GDI_OBJECT_TYPE_COLORSPACE); /* 20 */
+       TEST(GDI_HANDLE_GET_TYPE(GetStockObject(21)) == GDI_OBJECT_TYPE_BITMAP); /* 21 */
+
+       return APISTATUS_NORMAL;
+}
index c45b318..88f07ee 100644 (file)
-INT\r
-Test_SelectObject(PTESTINFO pti)\r
-{\r
-       HGDIOBJ hOldObj, hNewObj;\r
-       HDC hScreenDC, hDC, hDC2;\r
-       PGDI_TABLE_ENTRY pEntry;\r
-       PDC_ATTR pDc_Attr;\r
-       HANDLE hcmXform;\r
-       BYTE bmBits[4] = {0};\r
-\r
-       hScreenDC = GetDC(NULL);\r
-       ASSERT (hScreenDC != NULL);\r
-       hDC = CreateCompatibleDC(hScreenDC);\r
-       ASSERT (hDC != NULL);\r
-\r
-       /* Get the Dc_Attr for later testing */\r
-       pEntry = &GdiHandleTable[GDI_HANDLE_GET_INDEX(hDC)];\r
-       ASSERT(pEntry);\r
-       pDc_Attr = pEntry->UserData;\r
-       ASSERT(pDc_Attr);\r
-\r
-       /* Test incomplete dc handle doesn't work */\r
-       SetLastError(ERROR_SUCCESS);\r
-       hNewObj = GetStockObject(GRAY_BRUSH);\r
-       hOldObj = SelectObject((HDC)GDI_HANDLE_GET_INDEX(hDC), hNewObj);\r
-       TEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-       TEST(hOldObj == NULL);\r
-       TEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH));\r
-       SelectObject(hDC, hOldObj);\r
-\r
-       /* Test incomplete hobj handle works */\r
-       hNewObj = GetStockObject(GRAY_BRUSH);\r
-       hOldObj = SelectObject(hDC, (HGDIOBJ)GDI_HANDLE_GET_INDEX(hNewObj));\r
-       TEST(hOldObj == GetStockObject(WHITE_BRUSH));\r
-       TEST(pDc_Attr->hbrush == hNewObj);\r
-       SelectObject(hDC, hOldObj);\r
-\r
-       /* Test wrong hDC handle type */\r
-       SetLastError(ERROR_SUCCESS);\r
-       hNewObj = GetStockObject(GRAY_BRUSH);\r
-       hDC2 = (HDC)((UINT_PTR)hDC & ~GDI_HANDLE_TYPE_MASK);\r
-       hDC2 = (HDC)((UINT_PTR)hDC2 | GDI_OBJECT_TYPE_PEN);\r
-       hOldObj = SelectObject(hDC2, hNewObj);\r
-       TEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-       TEST(hOldObj == NULL);\r
-       TEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH));\r
-\r
-       /* Test wrong hobj handle type */\r
-       SetLastError(ERROR_SUCCESS);\r
-       hNewObj = GetStockObject(GRAY_BRUSH);\r
-       hNewObj = (HGDIOBJ)((UINT_PTR)hNewObj & ~GDI_HANDLE_TYPE_MASK);\r
-       hNewObj = (HGDIOBJ)((UINT_PTR)hNewObj | GDI_OBJECT_TYPE_PEN);\r
-       hOldObj = SelectObject(hDC, hNewObj);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-       TEST(hOldObj == NULL);\r
-       TEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH));\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       hNewObj = (HGDIOBJ)0x00761234;\r
-       hOldObj = SelectObject(hDC, hNewObj);\r
-       TEST(hOldObj == NULL);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-       SelectObject(hDC, hOldObj);\r
-\r
-       /* Test DC */\r
-       SetLastError(ERROR_SUCCESS);\r
-       hOldObj = SelectObject(hDC, hScreenDC);\r
-       TEST(hOldObj == NULL);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       /* Test REGION */\r
-       SetLastError(ERROR_SUCCESS);\r
-       hNewObj = CreateRectRgn(0,0,0,0);\r
-       hOldObj = SelectObject(hDC, hNewObj);\r
-       TEST((UINT_PTR)hOldObj == NULLREGION);\r
-       DeleteObject(hNewObj);\r
-\r
-       hNewObj = CreateRectRgn(0,0,10,10);\r
-       TEST((UINT_PTR)SelectObject(hDC, hNewObj) == SIMPLEREGION);\r
-       hOldObj = CreateRectRgn(5,5,20,20);\r
-       TEST(CombineRgn(hNewObj, hNewObj, hOldObj, RGN_OR) == COMPLEXREGION);\r
-       DeleteObject(hOldObj);\r
-       TEST((UINT_PTR)SelectObject(hDC, hNewObj) == SIMPLEREGION); // ??? Why this?\r
-       DeleteObject(hNewObj);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       /* Test BITMAP */\r
-       hNewObj = CreateBitmap(2, 2, 1, 1, &bmBits);\r
-       ASSERT(hNewObj != NULL);\r
-       hOldObj = SelectObject(hDC, hNewObj);\r
-       TEST(GDI_HANDLE_GET_TYPE(hOldObj) == GDI_OBJECT_TYPE_BITMAP);\r
-       hOldObj = SelectObject(hDC, hOldObj);\r
-       TEST(hOldObj == hNewObj);\r
-\r
-       /* Test CLIOBJ */\r
-\r
-       /* Test PATH */\r
-\r
-       /* Test PALETTE */\r
-       SetLastError(ERROR_SUCCESS);\r
-       hNewObj = GetStockObject(DEFAULT_PALETTE);\r
-       hOldObj = SelectObject(hDC, hNewObj);\r
-       TEST(hOldObj == NULL);\r
-       TEST(GetLastError() == ERROR_INVALID_FUNCTION);\r
-\r
-       /* Test COLORSPACE */\r
-\r
-       /* Test FONT */\r
-\r
-       /* Test PFE */\r
-\r
-       /* Test BRUSH */\r
-       hNewObj = GetStockObject(GRAY_BRUSH);\r
-       hOldObj = SelectObject(hDC, hNewObj);\r
-       TEST(hOldObj == GetStockObject(WHITE_BRUSH));\r
-       TEST(pDc_Attr->hbrush == hNewObj);\r
-       TEST(GDI_HANDLE_GET_TYPE(hOldObj) == GDI_OBJECT_TYPE_BRUSH);\r
-       SelectObject(hDC, hOldObj);\r
-\r
-       /* Test DC_BRUSH */\r
-       hNewObj = GetStockObject(DC_BRUSH);\r
-       hOldObj = SelectObject(hDC, hNewObj);\r
-       TEST(pDc_Attr->hbrush == hNewObj);\r
-       SelectObject(hDC, hOldObj);\r
-\r
-       /* Test BRUSH color xform */\r
-       hcmXform = (HANDLE)pDc_Attr->hcmXform;\r
-\r
-\r
-       /* Test EMF */\r
-\r
-       /* test METAFILE */\r
-\r
-       /* Test ENHMETAFILE */\r
-\r
-       /* Test PEN */\r
-       hNewObj = GetStockObject(GRAY_BRUSH);\r
-       hOldObj = SelectObject(hDC, hNewObj);\r
-       TEST(hOldObj == GetStockObject(WHITE_BRUSH));\r
-       TEST(pDc_Attr->hbrush == hNewObj);\r
-       TEST(GDI_HANDLE_GET_TYPE(hOldObj) == GDI_OBJECT_TYPE_BRUSH);\r
-       SelectObject(hDC, hOldObj);\r
-\r
-\r
-       /* Test EXTPEN */\r
-\r
-       /* Test METADC */\r
-\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
-\r
+INT
+Test_SelectObject(PTESTINFO pti)
+{
+       HGDIOBJ hOldObj, hNewObj;
+       HDC hScreenDC, hDC, hDC2;
+       PGDI_TABLE_ENTRY pEntry;
+       PDC_ATTR pDc_Attr;
+       HANDLE hcmXform;
+       BYTE bmBits[4] = {0};
+
+       hScreenDC = GetDC(NULL);
+       ASSERT (hScreenDC != NULL);
+       hDC = CreateCompatibleDC(hScreenDC);
+       ASSERT (hDC != NULL);
+
+       /* Get the Dc_Attr for later testing */
+       pEntry = &GdiHandleTable[GDI_HANDLE_GET_INDEX(hDC)];
+       ASSERT(pEntry);
+       pDc_Attr = pEntry->UserData;
+       ASSERT(pDc_Attr);
+
+       /* Test incomplete dc handle doesn't work */
+       SetLastError(ERROR_SUCCESS);
+       hNewObj = GetStockObject(GRAY_BRUSH);
+       hOldObj = SelectObject((HDC)GDI_HANDLE_GET_INDEX(hDC), hNewObj);
+       TEST(GetLastError() == ERROR_INVALID_HANDLE);
+       TEST(hOldObj == NULL);
+       TEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH));
+       SelectObject(hDC, hOldObj);
+
+       /* Test incomplete hobj handle works */
+       hNewObj = GetStockObject(GRAY_BRUSH);
+       hOldObj = SelectObject(hDC, (HGDIOBJ)GDI_HANDLE_GET_INDEX(hNewObj));
+       TEST(hOldObj == GetStockObject(WHITE_BRUSH));
+       TEST(pDc_Attr->hbrush == hNewObj);
+       SelectObject(hDC, hOldObj);
+
+       /* Test wrong hDC handle type */
+       SetLastError(ERROR_SUCCESS);
+       hNewObj = GetStockObject(GRAY_BRUSH);
+       hDC2 = (HDC)((UINT_PTR)hDC & ~GDI_HANDLE_TYPE_MASK);
+       hDC2 = (HDC)((UINT_PTR)hDC2 | GDI_OBJECT_TYPE_PEN);
+       hOldObj = SelectObject(hDC2, hNewObj);
+       TEST(GetLastError() == ERROR_INVALID_HANDLE);
+       TEST(hOldObj == NULL);
+       TEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH));
+
+       /* Test wrong hobj handle type */
+       SetLastError(ERROR_SUCCESS);
+       hNewObj = GetStockObject(GRAY_BRUSH);
+       hNewObj = (HGDIOBJ)((UINT_PTR)hNewObj & ~GDI_HANDLE_TYPE_MASK);
+       hNewObj = (HGDIOBJ)((UINT_PTR)hNewObj | GDI_OBJECT_TYPE_PEN);
+       hOldObj = SelectObject(hDC, hNewObj);
+       TEST(GetLastError() == ERROR_SUCCESS);
+       TEST(hOldObj == NULL);
+       TEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH));
+
+       SetLastError(ERROR_SUCCESS);
+       hNewObj = (HGDIOBJ)0x00761234;
+       hOldObj = SelectObject(hDC, hNewObj);
+       TEST(hOldObj == NULL);
+       TEST(GetLastError() == ERROR_SUCCESS);
+       SelectObject(hDC, hOldObj);
+
+       /* Test DC */
+       SetLastError(ERROR_SUCCESS);
+       hOldObj = SelectObject(hDC, hScreenDC);
+       TEST(hOldObj == NULL);
+       TEST(GetLastError() == ERROR_SUCCESS);
+
+       /* Test REGION */
+       SetLastError(ERROR_SUCCESS);
+       hNewObj = CreateRectRgn(0,0,0,0);
+       hOldObj = SelectObject(hDC, hNewObj);
+       TEST((UINT_PTR)hOldObj == NULLREGION);
+       DeleteObject(hNewObj);
+
+       hNewObj = CreateRectRgn(0,0,10,10);
+       TEST((UINT_PTR)SelectObject(hDC, hNewObj) == SIMPLEREGION);
+       hOldObj = CreateRectRgn(5,5,20,20);
+       TEST(CombineRgn(hNewObj, hNewObj, hOldObj, RGN_OR) == COMPLEXREGION);
+       DeleteObject(hOldObj);
+       TEST((UINT_PTR)SelectObject(hDC, hNewObj) == SIMPLEREGION); // ??? Why this?
+       DeleteObject(hNewObj);
+       TEST(GetLastError() == ERROR_SUCCESS);
+
+       /* Test BITMAP */
+       hNewObj = CreateBitmap(2, 2, 1, 1, &bmBits);
+       ASSERT(hNewObj != NULL);
+       hOldObj = SelectObject(hDC, hNewObj);
+       TEST(GDI_HANDLE_GET_TYPE(hOldObj) == GDI_OBJECT_TYPE_BITMAP);
+       hOldObj = SelectObject(hDC, hOldObj);
+       TEST(hOldObj == hNewObj);
+
+       /* Test CLIOBJ */
+
+       /* Test PATH */
+
+       /* Test PALETTE */
+       SetLastError(ERROR_SUCCESS);
+       hNewObj = GetStockObject(DEFAULT_PALETTE);
+       hOldObj = SelectObject(hDC, hNewObj);
+       TEST(hOldObj == NULL);
+       TEST(GetLastError() == ERROR_INVALID_FUNCTION);
+
+       /* Test COLORSPACE */
+
+       /* Test FONT */
+
+       /* Test PFE */
+
+       /* Test BRUSH */
+       hNewObj = GetStockObject(GRAY_BRUSH);
+       hOldObj = SelectObject(hDC, hNewObj);
+       TEST(hOldObj == GetStockObject(WHITE_BRUSH));
+       TEST(pDc_Attr->hbrush == hNewObj);
+       TEST(GDI_HANDLE_GET_TYPE(hOldObj) == GDI_OBJECT_TYPE_BRUSH);
+       SelectObject(hDC, hOldObj);
+
+       /* Test DC_BRUSH */
+       hNewObj = GetStockObject(DC_BRUSH);
+       hOldObj = SelectObject(hDC, hNewObj);
+       TEST(pDc_Attr->hbrush == hNewObj);
+       SelectObject(hDC, hOldObj);
+
+       /* Test BRUSH color xform */
+       hcmXform = (HANDLE)pDc_Attr->hcmXform;
+
+
+       /* Test EMF */
+
+       /* test METAFILE */
+
+       /* Test ENHMETAFILE */
+
+       /* Test PEN */
+       hNewObj = GetStockObject(GRAY_BRUSH);
+       hOldObj = SelectObject(hDC, hNewObj);
+       TEST(hOldObj == GetStockObject(WHITE_BRUSH));
+       TEST(pDc_Attr->hbrush == hNewObj);
+       TEST(GDI_HANDLE_GET_TYPE(hOldObj) == GDI_OBJECT_TYPE_BRUSH);
+       SelectObject(hDC, hOldObj);
+
+
+       /* Test EXTPEN */
+
+       /* Test METADC */
+
+
+       return APISTATUS_NORMAL;
+}
+
index 225379c..98a1ec4 100644 (file)
@@ -1,43 +1,43 @@
-INT\r
-Test_SetDCPenColor(PTESTINFO pti)\r
-{\r
-       HDC hScreenDC, hDC;\r
-\r
-       // Test an incorrect DC\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(SetDCPenColor(0, RGB(0,0,0)) == CLR_INVALID);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       // Get the Screen DC\r
-       hScreenDC = GetDC(NULL);\r
-       if (hScreenDC == NULL) return FALSE;\r
-\r
-       // Test the screen DC\r
-       SetDCPenColor(hScreenDC, RGB(1,2,3));\r
-       TEST(SetDCPenColor(hScreenDC, RGB(4,5,6)) == RGB(1,2,3));\r
-\r
-       // Create a new DC\r
-       hDC = CreateCompatibleDC(hScreenDC);\r
-       ReleaseDC(0, hScreenDC);\r
-       if (hDC == NULL)\r
-       {\r
-               return FALSE;\r
-       }\r
-\r
-       // Select the DC_PEN and check if the pen returned by a new call is DC_PEN\r
-       SelectObject(hDC, GetStockObject(DC_PEN));\r
-       TEST(SelectObject(hDC, GetStockObject(BLACK_PEN)) == GetStockObject(DC_PEN));\r
-\r
-       // Test an incorrect color, yes windows sets the color!\r
-       SetDCPenColor(hDC, 0x21123456);\r
-       TEST(SetDCPenColor(hDC, RGB(0,0,0)) == 0x21123456);\r
-\r
-       // Test CLR_INVALID, it sets CLR_INVALID!\r
-       SetDCPenColor(hDC, CLR_INVALID);\r
-       RTEST(SetDCPenColor(hDC, RGB(0,0,0)) == CLR_INVALID);\r
-\r
-       // Delete the DC\r
-       DeleteDC(hDC);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
+INT
+Test_SetDCPenColor(PTESTINFO pti)
+{
+       HDC hScreenDC, hDC;
+
+       // Test an incorrect DC
+       SetLastError(ERROR_SUCCESS);
+       RTEST(SetDCPenColor(0, RGB(0,0,0)) == CLR_INVALID);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       // Get the Screen DC
+       hScreenDC = GetDC(NULL);
+       if (hScreenDC == NULL) return FALSE;
+
+       // Test the screen DC
+       SetDCPenColor(hScreenDC, RGB(1,2,3));
+       TEST(SetDCPenColor(hScreenDC, RGB(4,5,6)) == RGB(1,2,3));
+
+       // Create a new DC
+       hDC = CreateCompatibleDC(hScreenDC);
+       ReleaseDC(0, hScreenDC);
+       if (hDC == NULL)
+       {
+               return FALSE;
+       }
+
+       // Select the DC_PEN and check if the pen returned by a new call is DC_PEN
+       SelectObject(hDC, GetStockObject(DC_PEN));
+       TEST(SelectObject(hDC, GetStockObject(BLACK_PEN)) == GetStockObject(DC_PEN));
+
+       // Test an incorrect color, yes windows sets the color!
+       SetDCPenColor(hDC, 0x21123456);
+       TEST(SetDCPenColor(hDC, RGB(0,0,0)) == 0x21123456);
+
+       // Test CLR_INVALID, it sets CLR_INVALID!
+       SetDCPenColor(hDC, CLR_INVALID);
+       RTEST(SetDCPenColor(hDC, RGB(0,0,0)) == CLR_INVALID);
+
+       // Delete the DC
+       DeleteDC(hDC);
+
+       return APISTATUS_NORMAL;
+}
index 224a37e..64e3e27 100644 (file)
@@ -1,29 +1,29 @@
-#define NUM_SYSCOLORS 31\r
-\r
-INT\r
-Test_SetSysColors(PTESTINFO pti)\r
-{\r
-       INT i;\r
-       INT nElements[NUM_SYSCOLORS];\r
-       COLORREF crOldColors[NUM_SYSCOLORS];\r
-       COLORREF crColors[3] = {RGB(212, 208, 200),2,3};\r
-\r
-       /* First save the Old colors */\r
-       for (i = 0; i < NUM_SYSCOLORS; i++)\r
-       {\r
-               nElements[i] = i;\r
-               crOldColors[i] = GetSysColor(i);\r
-       }\r
-\r
-       TEST((UINT)SetSysColors(0, nElements, crColors) == 1);\r
-       RTEST((UINT)SetSysColors(1, nElements, crColors) == 1);\r
-       RTEST((UINT)SetSysColors(2, nElements, crColors) == 1);\r
-\r
-       /* try more than NUM_SYSCOLORS */\r
-       RTEST((UINT)SetSysColors(55, nElements, crColors) == 1);\r
-\r
-       /* restore old SysColors */\r
-       SetSysColors(NUM_SYSCOLORS, nElements, crOldColors);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
+#define NUM_SYSCOLORS 31
+
+INT
+Test_SetSysColors(PTESTINFO pti)
+{
+       INT i;
+       INT nElements[NUM_SYSCOLORS];
+       COLORREF crOldColors[NUM_SYSCOLORS];
+       COLORREF crColors[3] = {RGB(212, 208, 200),2,3};
+
+       /* First save the Old colors */
+       for (i = 0; i < NUM_SYSCOLORS; i++)
+       {
+               nElements[i] = i;
+               crOldColors[i] = GetSysColor(i);
+       }
+
+       TEST((UINT)SetSysColors(0, nElements, crColors) == 1);
+       RTEST((UINT)SetSysColors(1, nElements, crColors) == 1);
+       RTEST((UINT)SetSysColors(2, nElements, crColors) == 1);
+
+       /* try more than NUM_SYSCOLORS */
+       RTEST((UINT)SetSysColors(55, nElements, crColors) == 1);
+
+       /* restore old SysColors */
+       SetSysColors(NUM_SYSCOLORS, nElements, crOldColors);
+
+       return APISTATUS_NORMAL;
+}
index a3e148d..a76a7d3 100644 (file)
@@ -1,31 +1,31 @@
-#ifndef _USER32TESTLIST_H\r
-#define _USER32TESTLIST_H\r
-\r
-#define ARRAY_SIZE(x)   (sizeof(x)/sizeof(x[0]))\r
-\r
-#include "user32api.h"\r
-\r
-/* include the tests */\r
-#include "tests/InitializeLpkHooks.c"\r
-#include "tests/ScrollDC.c"\r
-#include "tests/ScrollWindowEx.c"\r
-#include "tests/RealGetWindowClass.c"\r
-\r
-/* The List of tests */\r
-TESTENTRY TestList[] =\r
-{\r
-    { L"InitializeLpkHooks", Test_InitializeLpkHooks },\r
-    { L"ScrollDC", Test_ScrollDC },\r
-    { L"ScrollWindowEx", Test_ScrollWindowEx },\r
-    { L"RealGetWindowClass", Test_RealGetWindowClass },\r
-};\r
-\r
-/* The function that gives us the number of tests */\r
-INT NumTests(void)\r
-{\r
-    return ARRAY_SIZE(TestList);\r
-}\r
-\r
-#endif /* _USER32TESTLIST_H */\r
-\r
-/* EOF */\r
+#ifndef _USER32TESTLIST_H
+#define _USER32TESTLIST_H
+
+#define ARRAY_SIZE(x)   (sizeof(x)/sizeof(x[0]))
+
+#include "user32api.h"
+
+/* include the tests */
+#include "tests/InitializeLpkHooks.c"
+#include "tests/ScrollDC.c"
+#include "tests/ScrollWindowEx.c"
+#include "tests/RealGetWindowClass.c"
+
+/* The List of tests */
+TESTENTRY TestList[] =
+{
+    { L"InitializeLpkHooks", Test_InitializeLpkHooks },
+    { L"ScrollDC", Test_ScrollDC },
+    { L"ScrollWindowEx", Test_ScrollWindowEx },
+    { L"RealGetWindowClass", Test_RealGetWindowClass },
+};
+
+/* The function that gives us the number of tests */
+INT NumTests(void)
+{
+    return ARRAY_SIZE(TestList);
+}
+
+#endif /* _USER32TESTLIST_H */
+
+/* EOF */
index a62054f..88be153 100644 (file)
@@ -1,57 +1,57 @@
-#include "../user32api.h"\r
-\r
-INT\r
-Test_ScrollDC(PTESTINFO pti)\r
-{\r
-       HWND hWnd, hWnd2;\r
-       HDC hDC;\r
-       HRGN hrgn;\r
-       RECT rcClip;\r
-\r
-       /* Create a window */\r
-       hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE,\r
-                           100, 100, 100, 100,\r
-                           NULL, NULL, g_hInstance, 0);\r
-       UpdateWindow(hWnd);\r
-       hDC = GetDC(hWnd);\r
-\r
-       /* Assert that no update region is there */\r
-       hrgn = CreateRectRgn(0,0,0,0);\r
-       ASSERT(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);\r
-\r
-    /* Test normal scrolling */\r
-       TEST(ScrollDC(hDC, 0, 0, NULL, NULL, hrgn, NULL) == TRUE);\r
-\r
-    /* Scroll with invalid update region */\r
-       DeleteObject(hrgn);\r
-       TEST(ScrollDC(hDC, 50, 0, NULL, NULL, hrgn, NULL) == FALSE);\r
-       hrgn = CreateRectRgn(0,0,0,0);\r
-       TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);\r
-\r
-    /* Scroll with invalid update rect pointer */\r
-       TEST(ScrollDC(hDC, 50, 0, NULL, NULL, NULL, (PRECT)1) == 0);\r
-       TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);\r
-\r
-    /* Scroll with a clip rect */\r
-    rcClip.left = 50; rcClip.top = 0; rcClip.right = 100; rcClip.bottom = 100;\r
-       TEST(ScrollDC(hDC, 50, 0, NULL, &rcClip, hrgn, NULL) == TRUE);\r
-       TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);\r
-\r
-    /* Scroll with a clip rect */\r
-    rcClip.left = 50; rcClip.top = 0; rcClip.right = 100; rcClip.bottom = 100;\r
-       TEST(ScrollDC(hDC, 50, 50, NULL, &rcClip, hrgn, NULL) == TRUE);\r
-       TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);\r
-\r
-       /* Overlap with another window */\r
-       hWnd2 = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE,\r
-                           30, 160, 100, 100,\r
-                           NULL, NULL, g_hInstance, 0);\r
-       UpdateWindow(hWnd2);\r
-\r
-    /* Cleanup */\r
-       ReleaseDC(hWnd, hDC);\r
-    DestroyWindow(hWnd);\r
-    DestroyWindow(hWnd2);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
+#include "../user32api.h"
+
+INT
+Test_ScrollDC(PTESTINFO pti)
+{
+       HWND hWnd, hWnd2;
+       HDC hDC;
+       HRGN hrgn;
+       RECT rcClip;
+
+       /* Create a window */
+       hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
+                           100, 100, 100, 100,
+                           NULL, NULL, g_hInstance, 0);
+       UpdateWindow(hWnd);
+       hDC = GetDC(hWnd);
+
+       /* Assert that no update region is there */
+       hrgn = CreateRectRgn(0,0,0,0);
+       ASSERT(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);
+
+    /* Test normal scrolling */
+       TEST(ScrollDC(hDC, 0, 0, NULL, NULL, hrgn, NULL) == TRUE);
+
+    /* Scroll with invalid update region */
+       DeleteObject(hrgn);
+       TEST(ScrollDC(hDC, 50, 0, NULL, NULL, hrgn, NULL) == FALSE);
+       hrgn = CreateRectRgn(0,0,0,0);
+       TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);
+
+    /* Scroll with invalid update rect pointer */
+       TEST(ScrollDC(hDC, 50, 0, NULL, NULL, NULL, (PRECT)1) == 0);
+       TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);
+
+    /* Scroll with a clip rect */
+    rcClip.left = 50; rcClip.top = 0; rcClip.right = 100; rcClip.bottom = 100;
+       TEST(ScrollDC(hDC, 50, 0, NULL, &rcClip, hrgn, NULL) == TRUE);
+       TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);
+
+    /* Scroll with a clip rect */
+    rcClip.left = 50; rcClip.top = 0; rcClip.right = 100; rcClip.bottom = 100;
+       TEST(ScrollDC(hDC, 50, 50, NULL, &rcClip, hrgn, NULL) == TRUE);
+       TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);
+
+       /* Overlap with another window */
+       hWnd2 = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
+                           30, 160, 100, 100,
+                           NULL, NULL, g_hInstance, 0);
+       UpdateWindow(hWnd2);
+
+    /* Cleanup */
+       ReleaseDC(hWnd, hDC);
+    DestroyWindow(hWnd);
+    DestroyWindow(hWnd2);
+
+       return APISTATUS_NORMAL;
+}
index 5640061..2a6ed38 100644 (file)
@@ -1,47 +1,47 @@
-#include "../user32api.h"\r
-\r
-INT\r
-Test_ScrollWindowEx(PTESTINFO pti)\r
-{\r
-       HWND hWnd;\r
-       HRGN hrgn;\r
-       int Result;\r
-\r
-       /* Create a window */\r
-       hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE,\r
-                           CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,\r
-                           NULL, NULL, g_hInstance, 0);\r
-       UpdateWindow(hWnd);\r
-\r
-       /* Assert that no update region is there */\r
-       hrgn = CreateRectRgn(0,0,0,0);\r
-       ASSERT(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);\r
-\r
-       Result = ScrollWindowEx(hWnd, 20, 0, NULL, NULL, NULL, NULL, 0);\r
-       TEST(Result == SIMPLEREGION);\r
-       TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);\r
-\r
-       Result = ScrollWindowEx(hWnd, 20, 0, NULL, NULL, NULL, NULL, SW_INVALIDATE);\r
-       TEST(Result == SIMPLEREGION);\r
-       TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == SIMPLEREGION);\r
-       UpdateWindow(hWnd);\r
-\r
-       // test invalid update region\r
-       DeleteObject(hrgn);\r
-       Result = ScrollWindowEx(hWnd, 20, 0, NULL, NULL, hrgn, NULL, SW_INVALIDATE);\r
-       TEST(Result == ERROR);\r
-       hrgn = CreateRectRgn(0,0,0,0);\r
-       UpdateWindow(hWnd);\r
-\r
-       // Test invalid updaterect pointer\r
-       Result = ScrollWindowEx(hWnd, 20, 0, NULL, NULL, NULL, (LPRECT)1, SW_INVALIDATE);\r
-       TEST(Result == ERROR);\r
-       TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == SIMPLEREGION);\r
-\r
-// test for alignment of rects\r
-\r
-       DeleteObject(hrgn);\r
-    DestroyWindow(hWnd);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
+#include "../user32api.h"
+
+INT
+Test_ScrollWindowEx(PTESTINFO pti)
+{
+       HWND hWnd;
+       HRGN hrgn;
+       int Result;
+
+       /* Create a window */
+       hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
+                           CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,
+                           NULL, NULL, g_hInstance, 0);
+       UpdateWindow(hWnd);
+
+       /* Assert that no update region is there */
+       hrgn = CreateRectRgn(0,0,0,0);
+       ASSERT(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);
+
+       Result = ScrollWindowEx(hWnd, 20, 0, NULL, NULL, NULL, NULL, 0);
+       TEST(Result == SIMPLEREGION);
+       TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == NULLREGION);
+
+       Result = ScrollWindowEx(hWnd, 20, 0, NULL, NULL, NULL, NULL, SW_INVALIDATE);
+       TEST(Result == SIMPLEREGION);
+       TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == SIMPLEREGION);
+       UpdateWindow(hWnd);
+
+       // test invalid update region
+       DeleteObject(hrgn);
+       Result = ScrollWindowEx(hWnd, 20, 0, NULL, NULL, hrgn, NULL, SW_INVALIDATE);
+       TEST(Result == ERROR);
+       hrgn = CreateRectRgn(0,0,0,0);
+       UpdateWindow(hWnd);
+
+       // Test invalid updaterect pointer
+       Result = ScrollWindowEx(hWnd, 20, 0, NULL, NULL, NULL, (LPRECT)1, SW_INVALIDATE);
+       TEST(Result == ERROR);
+       TEST(GetUpdateRgn(hWnd, hrgn, FALSE) == SIMPLEREGION);
+
+// test for alignment of rects
+
+       DeleteObject(hrgn);
+    DestroyWindow(hWnd);
+
+       return APISTATUS_NORMAL;
+}
index 7b51b0f..b17e3aa 100644 (file)
@@ -1,18 +1,18 @@
-#include "user32api.h"\r
-\r
-HINSTANCE g_hInstance;\r
-\r
-BOOL\r
-IsFunctionPresent(LPWSTR lpszFunction)\r
-{\r
-       return TRUE;\r
-}\r
-\r
-int APIENTRY WinMain(HINSTANCE hInstance,\r
-                     HINSTANCE hPrevInstance,\r
-                     LPSTR     lpCmdLine,\r
-                     int       nCmdShow)\r
-{\r
-       g_hInstance = hInstance;\r
-       return TestMain(L"user32api", L"user32.dll");\r
-}\r
+#include "user32api.h"
+
+HINSTANCE g_hInstance;
+
+BOOL
+IsFunctionPresent(LPWSTR lpszFunction)
+{
+       return TRUE;
+}
+
+int APIENTRY WinMain(HINSTANCE hInstance,
+                     HINSTANCE hPrevInstance,
+                     LPSTR     lpCmdLine,
+                     int       nCmdShow)
+{
+       g_hInstance = hInstance;
+       return TestMain(L"user32api", L"user32.dll");
+}
index 1af1dbf..00115ac 100644 (file)
@@ -1,10 +1,10 @@
-#ifndef _USER32TEST_H\r
-#define _USER32TEST_H\r
-\r
-#include "../apitest.h"\r
-\r
-extern HINSTANCE g_hInstance;\r
-\r
-#endif /* _USER32TEST_H */\r
-\r
-/* EOF */\r
+#ifndef _USER32TEST_H
+#define _USER32TEST_H
+
+#include "../apitest.h"
+
+extern HINSTANCE g_hInstance;
+
+#endif /* _USER32TEST_H */
+
+/* EOF */
index dd97018..646eeda 100644 (file)
@@ -1,12 +1,12 @@
-<module name="user32api" type="win32cui">\r
-       <include base="user32api">.</include>\r
-       <define name="__USE_W32API" />\r
-       <define name="_WIN32_WINNT">0x0501</define>\r
-       <library>apitest</library>\r
-       <library>kernel32</library>\r
-       <library>user32</library>\r
-       <library>gdi32</library>\r
-       <library>shell32</library>\r
-       <file>user32api.c</file>\r
-       <file>testlist.c</file>\r
-</module>\r
+<module name="user32api" type="win32cui">
+       <include base="user32api">.</include>
+       <define name="__USE_W32API" />
+       <define name="_WIN32_WINNT">0x0501</define>
+       <library>apitest</library>
+       <library>kernel32</library>
+       <library>user32</library>
+       <library>gdi32</library>
+       <library>shell32</library>
+       <file>user32api.c</file>
+       <file>testlist.c</file>
+</module>
index 928a639..311dc06 100644 (file)
@@ -1,18 +1,18 @@
-\r
-INT\r
-Test_NtGdiDdCreateDirectDrawObject(PTESTINFO pti)\r
-{\r
-       HANDLE  hDirectDraw;\r
-       HDC hdc = CreateDCW(L"DISPLAY",NULL,NULL,NULL);\r
-       ASSERT(hdc != NULL);\r
-\r
-       /* Test ReactX */\r
-       RTEST(NtGdiDdCreateDirectDrawObject(NULL) == NULL);\r
-       RTEST((hDirectDraw=NtGdiDdCreateDirectDrawObject(hdc)) != NULL);\r
-\r
-       /* Cleanup ReactX setup */\r
-       DeleteDC(hdc);\r
-       NtGdiDdDeleteDirectDrawObject(hDirectDraw);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
+
+INT
+Test_NtGdiDdCreateDirectDrawObject(PTESTINFO pti)
+{
+       HANDLE  hDirectDraw;
+       HDC hdc = CreateDCW(L"DISPLAY",NULL,NULL,NULL);
+       ASSERT(hdc != NULL);
+
+       /* Test ReactX */
+       RTEST(NtGdiDdCreateDirectDrawObject(NULL) == NULL);
+       RTEST((hDirectDraw=NtGdiDdCreateDirectDrawObject(hdc)) != NULL);
+
+       /* Cleanup ReactX setup */
+       DeleteDC(hdc);
+       NtGdiDdDeleteDirectDrawObject(hDirectDraw);
+
+       return APISTATUS_NORMAL;
+}
index fb26f79..8db518d 100644 (file)
@@ -1,20 +1,20 @@
-\r
-INT\r
-Test_NtGdiDdDeleteDirectDrawObject(PTESTINFO pti)\r
-{\r
-       HANDLE  hDirectDraw;\r
-       HDC hdc = CreateDCW(L"DISPLAY",NULL,NULL,NULL);\r
-       ASSERT(hdc != NULL);\r
-\r
-       /* Test ReactX */\r
-       RTEST(NtGdiDdDeleteDirectDrawObject(NULL) == FALSE);\r
-       RTEST((hDirectDraw=NtGdiDdCreateDirectDrawObject(hdc)) != NULL);\r
-       ASSERT(hDirectDraw != NULL);\r
-       RTEST(NtGdiDdDeleteDirectDrawObject(hDirectDraw) == TRUE);\r
-\r
-       /* Cleanup ReactX setup */\r
-       DeleteDC(hdc);\r
-       Syscall(L"NtGdiDdDeleteDirectDrawObject", 1, &hDirectDraw);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
+
+INT
+Test_NtGdiDdDeleteDirectDrawObject(PTESTINFO pti)
+{
+       HANDLE  hDirectDraw;
+       HDC hdc = CreateDCW(L"DISPLAY",NULL,NULL,NULL);
+       ASSERT(hdc != NULL);
+
+       /* Test ReactX */
+       RTEST(NtGdiDdDeleteDirectDrawObject(NULL) == FALSE);
+       RTEST((hDirectDraw=NtGdiDdCreateDirectDrawObject(hdc)) != NULL);
+       ASSERT(hDirectDraw != NULL);
+       RTEST(NtGdiDdDeleteDirectDrawObject(hDirectDraw) == TRUE);
+
+       /* Cleanup ReactX setup */
+       DeleteDC(hdc);
+       Syscall(L"NtGdiDdDeleteDirectDrawObject", 1, &hDirectDraw);
+
+       return APISTATUS_NORMAL;
+}
index a73c0dc..77476a6 100644 (file)
-\r
-/* Note : OsThunkDdQueryDirectDrawObject is the usermode name of NtGdiDdQueryDirectDrawObject\r
- *        it lives in d3d8thk.dll and in windows 2000 it doing syscall direcly to win32k.sus\r
- *        in windows xp and higher it call to gdi32.dll to DdEntry41 and it doing the syscall\r
- */\r
-INT\r
-Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)\r
-{\r
-    HANDLE  hDirectDraw = NULL;\r
-    DD_HALINFO *pHalInfo = NULL;\r
-    DWORD *pCallBackFlags = NULL;\r
-    LPD3DNTHAL_CALLBACKS puD3dCallbacks = NULL;\r
-    LPD3DNTHAL_GLOBALDRIVERDATA puD3dDriverData = NULL;\r
-    PDD_D3DBUFCALLBACKS puD3dBufferCallbacks = NULL;\r
-    LPDDSURFACEDESC puD3dTextureFormats = NULL;\r
-    DWORD *puNumHeaps = NULL;\r
-    VIDEOMEMORY *puvmList = NULL;\r
-    DWORD *puNumFourCC = NULL;\r
-    DWORD *puFourCC = NULL;\r
-\r
-    DD_HALINFO HalInfo;\r
-    DD_HALINFO oldHalInfo;\r
-    DWORD CallBackFlags[4];\r
-\r
-    D3DNTHAL_CALLBACKS D3dCallbacks;\r
-    D3DNTHAL_CALLBACKS oldD3dCallbacks;\r
-\r
-    D3DNTHAL_GLOBALDRIVERDATA D3dDriverData;\r
-    D3DNTHAL_GLOBALDRIVERDATA oldD3dDriverData;\r
-\r
-    DD_D3DBUFCALLBACKS D3dBufferCallbacks;\r
-    DD_D3DBUFCALLBACKS oldD3dBufferCallbacks;\r
-\r
-    DDSURFACEDESC2 D3dTextureFormats[100];\r
-    DWORD NumHeaps = 0;\r
-    VIDEOMEMORY vmList;\r
-    //DWORD NumFourCC = 0;\r
-    //DWORD FourCC = 0;\r
-    DEVMODE devmode;\r
-    HDC hdc;\r
-\r
-    DWORD dwTextureCounter = 0;\r
-    DDSURFACEDESC *myDesc = NULL;\r
-\r
-    /* clear data */\r
-    memset(&vmList,0,sizeof(VIDEOMEMORY));\r
-    memset(&D3dTextureFormats,0,sizeof(DDSURFACEDESC));\r
-    memset(&D3dBufferCallbacks,0,sizeof(DD_D3DBUFCALLBACKS));\r
-    memset(&D3dDriverData,0,sizeof(D3DNTHAL_GLOBALDRIVERDATA));\r
-    memset(&D3dCallbacks,0,sizeof(D3DNTHAL_CALLBACKS));\r
-    memset(&HalInfo,0,sizeof(DD_HALINFO));\r
-    memset(CallBackFlags,0,sizeof(DWORD)*3);\r
-\r
-    /* Get currenet display mode */\r
-    EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode);\r
-\r
-    /* Create hdc that we can use */\r
-    hdc = CreateDCW(L"DISPLAY",NULL,NULL,NULL);\r
-    ASSERT(hdc != NULL);\r
-\r
-\r
-    /* Create ReactX handle */\r
-    hDirectDraw = (HANDLE) NtGdiDdCreateDirectDrawObject(hdc);\r
-    ASSERT(hDirectDraw != NULL);\r
-\r
-    /* Start Test ReactX NtGdiDdQueryDirectDrawObject function */\r
-\r
-    /* testing  OsThunkDdQueryDirectDrawObject( NULL, ....  */\r
-    RTEST(NtGdiDdQueryDirectDrawObject( NULL, pHalInfo,\r
-                                        pCallBackFlags, puD3dCallbacks,\r
-                                        puD3dDriverData, puD3dBufferCallbacks,\r
-                                        puD3dTextureFormats, puNumHeaps,\r
-                                        puvmList, puNumFourCC,\r
-                                        puFourCC) == FALSE);\r
-\r
-    RTEST(pHalInfo == NULL);\r
-    RTEST(pCallBackFlags == NULL);\r
-    RTEST(puD3dCallbacks == NULL);\r
-    RTEST(puD3dDriverData == NULL);\r
-    RTEST(puD3dBufferCallbacks == NULL);\r
-    RTEST(puD3dTextureFormats == NULL);\r
-    RTEST(puNumFourCC == NULL);\r
-    RTEST(puFourCC == NULL);\r
-    RTEST(puNumHeaps == NULL);\r
-    RTEST(puvmList == NULL);\r
-\r
-    /* testing  NtGdiDdQueryDirectDrawObject( hDirectDrawLocal, NULL, ....  */\r
-    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,\r
-                                        pCallBackFlags, puD3dCallbacks,\r
-                                        puD3dDriverData, puD3dBufferCallbacks,\r
-                                        puD3dTextureFormats, puNumHeaps,\r
-                                        puvmList, puNumFourCC,\r
-                                        puFourCC) == FALSE);\r
-\r
-    RTEST(pHalInfo == NULL);\r
-    RTEST(pCallBackFlags == NULL);\r
-    RTEST(puD3dCallbacks == NULL);\r
-    RTEST(puD3dDriverData == NULL);\r
-    RTEST(puD3dBufferCallbacks == NULL);\r
-    RTEST(puD3dTextureFormats == NULL);\r
-    RTEST(puNumFourCC == NULL);\r
-    RTEST(puFourCC == NULL);\r
-    RTEST(puNumHeaps == NULL);\r
-    RTEST(puvmList == NULL);\r
-\r
-    /* testing  NtGdiDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, NULL, ....  */\r
-    pHalInfo = &HalInfo;\r
-    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,\r
-                                        pCallBackFlags, puD3dCallbacks,\r
-                                        puD3dDriverData, puD3dBufferCallbacks,\r
-                                        puD3dTextureFormats, puNumHeaps,\r
-                                        puvmList, puNumFourCC,\r
-                                        puFourCC)== FALSE);\r
-\r
-    RTEST(pHalInfo != NULL);\r
-    ASSERT(pHalInfo != NULL);\r
-\r
-    RTEST(pCallBackFlags == NULL);\r
-    RTEST(puD3dCallbacks == NULL);\r
-    RTEST(puD3dDriverData == NULL);\r
-    RTEST(puD3dBufferCallbacks == NULL);\r
-    RTEST(puD3dTextureFormats == NULL);\r
-    RTEST(puNumFourCC == NULL);\r
-    RTEST(puFourCC == NULL);   \r
-    RTEST(puNumHeaps == NULL);\r
-    RTEST(puvmList == NULL);\r
-\r
-    if ((pHalInfo->dwSize != sizeof(DD_HALINFO)) &&\r
-        (pHalInfo->dwSize != sizeof(DD_HALINFO_V4)))\r
-    {\r
-        RTEST(pHalInfo->dwSize != sizeof(DD_HALINFO));\r
-        ASSERT(pHalInfo->dwSize != sizeof(DD_HALINFO));\r
-    }\r
-\r
-    if (pHalInfo->dwSize == sizeof(DD_HALINFO))\r
-    {\r
-        /*the offset, in bytes, to primary surface in the display memory  */\r
-        /* some graphic card like  sis 760 GX, Nvida GF7900GS does not set any offset at all */\r
-        // RTEST(pHalInfo->vmiData.fpPrimary != 0 );\r
-\r
-        /* unsuse always 0 */\r
-        RTEST(pHalInfo->vmiData.dwFlags == 0 );\r
-\r
-        /* Check the res */\r
-        RTEST(pHalInfo->vmiData.dwDisplayWidth == devmode.dmPelsWidth );\r
-        RTEST(pHalInfo->vmiData.dwDisplayHeight == devmode.dmPelsHeight );\r
-\r
-        /*  This can never be test for it is who big the line is after it been align displayPitch */\r
-        RTEST(pHalInfo->vmiData.lDisplayPitch != 0);\r
-\r
-        RTEST(pHalInfo->vmiData.ddpfDisplay.dwSize == sizeof(DDPIXELFORMAT) );\r
-        ASSERT(pHalInfo->vmiData.ddpfDisplay.dwSize == sizeof(DDPIXELFORMAT));\r
-\r
-        /* We can not check if it DDPF_RGB flags been set for primary surface \r
-         * for it can be DDPF_PALETTEINDEXED1,DDPF_PALETTEINDEXED2,DDPF_PALETTEINDEXED4,DDPF_PALETTEINDEXED8, DDPF_PALETTEINDEXEDTO8, DDPF_RGB, DDPF_YUV\r
-         */\r
-        RTEST( (pHalInfo->vmiData.ddpfDisplay.dwFlags & (DDPF_PALETTEINDEXED1 | DDPF_PALETTEINDEXED2 | DDPF_PALETTEINDEXED4 | \r
-                                                         DDPF_PALETTEINDEXED8 | DDPF_PALETTEINDEXEDTO8 | DDPF_RGB | DDPF_YUV)) != 0);\r
-\r
-\r
-        /* No fourcc are use on primary screen */\r
-        RTEST(pHalInfo->vmiData.ddpfDisplay.dwFourCC == 0 );\r
-\r
-        /* Count RGB Bits 8/16/24/32 */\r
-        RTEST(pHalInfo->vmiData.ddpfDisplay.dwRGBBitCount == devmode.dmBitsPerPel );\r
-\r
-        /* The rgb mask can not be detected in user mode, for it can be 15Bpp convert to 16Bpp mode, so we have no way detect correct mask  \r
-         * But the mask can never be Zero \r
-         */\r
-        RTEST(pHalInfo->vmiData.ddpfDisplay.dwRBitMask  !=  0 );\r
-        RTEST(pHalInfo->vmiData.ddpfDisplay.dwGBitMask !=  0 );\r
-        RTEST(pHalInfo->vmiData.ddpfDisplay.dwBBitMask != 0 );\r
-\r
-        /* primary never set the alpha blend mask */\r
-        RTEST(pHalInfo->vmiData.ddpfDisplay.dwRGBAlphaBitMask ==  0 );\r
-\r
-        /* This can not be test at usermode it is each hardware drv that fill in it, \r
-         * only way to found them is to use this call  */\r
-        // pHalInfo->vmiData->dwOffscreenAlign\r
-        // pHalInfo->vmiData->dwOverlayAlign\r
-        // pHalInfo->vmiData->dwTextureAlign\r
-        // pHalInfo->vmiData->dwZBufferAlign\r
-        // pHalInfo->vmiData->dwAlphaAlign \r
-\r
-        /* the primary display address */\r
-        RTEST( ( (DWORD)pHalInfo->vmiData.pvPrimary & (~0x80000000)) != 0 );\r
-\r
-        /* test see if we got back the pvmList here \r
-         * acording msdn vmiData.dwNumHeaps and vmiData.pvmList\r
-         * exists for _VIDEOMEMORYINFO but they do not, it reviews \r
-         * in ddk and wdk and own testcase \r
-         */         \r
-         // RTEST(pHalInfo->vmiData.dwNumHeaps  != 0 );\r
-         // RTEST(pHalInfo->vmiData.pvmList  != 0 );\r
-\r
-        /* Test see if we got any hardware acclartions for 2d or 3d, this always fill in \r
-         * that mean we found a bugi drv and dx does not work on this drv \r
-         */\r
-\r
-        /* the SIS 760 GX will never fill it in, it is a bugi drv */\r
-        RTEST(pHalInfo->ddCaps.dwSize == sizeof(DDCORECAPS));\r
-\r
-        /* Testing see if we got any hw support for\r
-         * This test can fail on video card that does not support 2d/overlay/3d\r
-         */\r
-        RTEST( pHalInfo->ddCaps.dwCaps != 0);\r
-        RTEST( pHalInfo->ddCaps.ddsCaps.dwCaps != 0);\r
-\r
-        /* This flags is obsolete and should not be used by the driver */ \r
-        RTEST( pHalInfo->ddCaps.dwFXAlphaCaps == 0);\r
-        \r
-\r
-        /* basic dx 2 is found if this flags not set\r
-         * if this fail we do not have a dx driver install acodring ms, some version of windows it\r
-         * is okay this fail and drv does then only support basic dx\r
-         * \r
-         */\r
-        if (pHalInfo->dwFlags != 0)\r
-        {\r
-            RTEST( (pHalInfo->dwFlags & (DDHALINFO_GETDRIVERINFOSET | DDHALINFO_GETDRIVERINFO2)) != 0 );\r
-            RTEST( ( (DWORD)pHalInfo->GetDriverInfo & 0x80000000) != 0 );\r
-            ASSERT( ((DWORD)pHalInfo->GetDriverInfo & 0x80000000) != 0 );\r
-        }\r
-\r
-        /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/\r
-        \r
-\r
-       /* the pHalInfo->ddCaps.ddsCaps.dwCaps & DDSCAPS_3DDEVICE will be ignore, only way detect it proper follow code,\r
-        * this will be fill in of all drv, it is not only for 3d stuff, this always fill by win32k.sys or dxg.sys depns \r
-        * if it windows 2000 or windows xp/2003\r
-        *\r
-        * point to kmode direcly to the win32k.sys, win32k.sys is kmode and it is kmode address we getting back\r
-        */\r
-        RTEST( ( (DWORD)pHalInfo->lpD3DGlobalDriverData & (~0x80000000)) != 0 );\r
-        RTEST( ( (DWORD)pHalInfo->lpD3DHALCallbacks & (~0x80000000)) != 0 );\r
-        RTEST( ( (DWORD)pHalInfo->lpD3DHALCallbacks & (~0x80000000)) != 0 );\r
-    }\r
-\r
-    /* Backup DD_HALINFO so we do not need resting it */\r
-    RtlCopyMemory(&oldHalInfo, &HalInfo, sizeof(DD_HALINFO));\r
-\r
-    /* testing  NtGdiDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, ....  */\r
-    pHalInfo = &HalInfo;\r
-    pCallBackFlags = CallBackFlags;\r
-    RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO));\r
-\r
-    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,\r
-                                        pCallBackFlags, puD3dCallbacks,\r
-                                        puD3dDriverData, puD3dBufferCallbacks,\r
-                                        puD3dTextureFormats, puNumHeaps,\r
-                                        puvmList, puNumFourCC,\r
-                                        puFourCC)== FALSE);\r
-    RTEST(pHalInfo != NULL);\r
-    ASSERT(pHalInfo != NULL);\r
-\r
-    RTEST(pCallBackFlags != NULL);\r
-    ASSERT(pCallBackFlags != NULL);\r
-\r
-    RTEST(puD3dCallbacks == NULL);\r
-    RTEST(puD3dDriverData == NULL);\r
-    RTEST(puD3dBufferCallbacks == NULL);\r
-    RTEST(puD3dTextureFormats == NULL);\r
-    RTEST(puNumFourCC == NULL);\r
-    RTEST(puFourCC == NULL);\r
-    RTEST(puNumHeaps == NULL);\r
-    RTEST(puvmList == NULL);\r
-\r
-    /* We do not retesting DD_HALINFO, instead we compare it */\r
-    RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);\r
-\r
-    /* Rember on some nivida drv the pCallBackFlags will not be set even they api exists in the drv\r
-     * known workaround is to check if the drv really return a kmode pointer for the drv functions \r
-     * we want to use.\r
-     */\r
-    RTEST(pCallBackFlags[0] != 0);\r
-    RTEST(pCallBackFlags[1] != 0);\r
-    RTEST(pCallBackFlags[2] == 0);\r
-\r
-    /* testing  NtGdiDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, pCallBackFlags, D3dCallbacks, NULL, ....  */\r
-    pHalInfo = &HalInfo;\r
-    pCallBackFlags = CallBackFlags;\r
-    puD3dCallbacks = &D3dCallbacks;\r
-\r
-    RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO));\r
-    RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3);\r
-\r
-    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,\r
-                                        pCallBackFlags, puD3dCallbacks,\r
-                                        puD3dDriverData, puD3dBufferCallbacks,\r
-                                        puD3dTextureFormats, puNumHeaps,\r
-                                        puvmList, puNumFourCC,\r
-                                        puFourCC)== FALSE);\r
-    RTEST(pHalInfo != NULL);\r
-    ASSERT(pHalInfo != NULL);\r
-\r
-    RTEST(pCallBackFlags != NULL);\r
-    ASSERT(pCallBackFlags != NULL);\r
-\r
-    /* rember puD3dCallbacks shall never return NULL */\r
-    RTEST(puD3dCallbacks != NULL);\r
-    ASSERT(puD3dCallbacks != NULL);\r
-\r
-    /* the pHalInfo->ddCaps.ddsCaps.dwCaps & DDSCAPS_3DDEVICE will be ignore, only way detect it proper follow code,\r
-     * this will be fill in of all drv, it is not only for 3d stuff, this always fill by win32k.sys or dxg.sys depns \r
-     * if it windows 2000 or windows xp/2003\r
-     */\r
-    RTEST(puD3dCallbacks->dwSize == sizeof(D3DNTHAL_CALLBACKS));\r
-\r
-    /* Nivda like GF7900GS will not follow ms design rule here, \r
-     * ContextDestroyAll must alwyas be NULL for it is not longer inuse in windows 2000 and higher\r
-     */\r
-    RTEST(puD3dCallbacks->ContextDestroyAll == NULL);\r
-\r
-    /* Nivda like GF7900GS will not follow ms design rule here, \r
-     * SceneCapture must alwyas be NULL for it is not longer inuse in windows 2000 and higher\r
-     */\r
-    RTEST(puD3dCallbacks->SceneCapture  == NULL);\r
-    RTEST(puD3dCallbacks->dwReserved10 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved11 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved22 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved23 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved == 0);\r
-    RTEST(puD3dCallbacks->TextureCreate  == NULL);\r
-    RTEST(puD3dCallbacks->TextureDestroy  == NULL);\r
-    RTEST(puD3dCallbacks->TextureSwap  == NULL);\r
-    RTEST(puD3dCallbacks->TextureGetSurf  == NULL);\r
-    RTEST(puD3dCallbacks->dwReserved12 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved13 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved14 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved15 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved16 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved17 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved18 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved19 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved20 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved21 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved24 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved0 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved1 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved2 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved3 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved4 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved5 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved6 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved7 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved8 == 0);\r
-    RTEST(puD3dCallbacks->dwReserved9 == 0);\r
-\r
-    /* how detect puD3dCallbacks->ContextCreate and puD3dCallbacks->ContextDestroy shall be set for bugi drv like nivda ? */\r
-    /* pointer direcly to the graphic drv, it is kmode pointer */\r
-    // RTEST( ( (DWORD)puD3dCallbacks->ContextCreate & (~0x80000000)) != 0 );\r
-    // RTEST( ( (DWORD)puD3dCallbacks->ContextDestroy & (~0x80000000)) != 0 );\r
-\r
-    RTEST(puD3dDriverData == NULL);\r
-    RTEST(puD3dBufferCallbacks == NULL);\r
-    RTEST(puD3dTextureFormats == NULL);\r
-    RTEST(puNumFourCC == NULL);\r
-    RTEST(puFourCC == NULL);\r
-    RTEST(puNumHeaps == NULL);\r
-    RTEST(puvmList == NULL);\r
-\r
-    /* We do not retesting DD_HALINFO, instead we compare it */\r
-    RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);\r
-    RTEST(pCallBackFlags[0] != 0);\r
-    RTEST(pCallBackFlags[1] != 0);\r
-    RTEST(pCallBackFlags[2] == 0);\r
-\r
-    /* Backup D3DNTHAL_CALLBACKS so we do not need resting it */\r
-    RtlCopyMemory(&oldD3dCallbacks, &D3dCallbacks, sizeof(D3DNTHAL_CALLBACKS));\r
-\r
-\r
-/* testing  NtGdiDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, */\r
-    pHalInfo = &HalInfo;\r
-    pCallBackFlags = CallBackFlags;\r
-    puD3dCallbacks = &D3dCallbacks;\r
-    puD3dDriverData = &D3dDriverData;\r
-\r
-    RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO));\r
-    RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3);\r
-    RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS));\r
-\r
-    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,\r
-                                        pCallBackFlags, puD3dCallbacks,\r
-                                        puD3dDriverData, puD3dBufferCallbacks,\r
-                                        puD3dTextureFormats, puNumHeaps,\r
-                                        puvmList, puNumFourCC,\r
-                                        puFourCC)== FALSE);\r
-    RTEST(pHalInfo != NULL);\r
-    ASSERT(pHalInfo != NULL);\r
-\r
-    RTEST(pCallBackFlags != NULL);\r
-    ASSERT(pCallBackFlags != NULL);\r
-\r
-    RTEST(puD3dCallbacks != NULL);\r
-    ASSERT(puD3dCallbacks != NULL);\r
-\r
-    RTEST(puD3dDriverData != NULL);\r
-    ASSERT(puD3dDriverData != NULL);\r
-\r
-    RTEST(puD3dBufferCallbacks == NULL);\r
-    RTEST(puD3dTextureFormats == NULL);\r
-    RTEST(puNumFourCC == NULL);\r
-    RTEST(puFourCC == NULL);\r
-    RTEST(puNumHeaps == NULL);\r
-    RTEST(puvmList == NULL);\r
-\r
-    /* We retesting pCallBackFlags  */    \r
-    RTEST(pCallBackFlags[0] != 0);\r
-    RTEST(pCallBackFlags[1] != 0);\r
-    RTEST(pCallBackFlags[2] == 0);\r
-\r
-    /* We do not retesting instead we compare it */\r
-    RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);\r
-    RTEST(memcmp(&oldD3dCallbacks, puD3dCallbacks, sizeof(D3DNTHAL_CALLBACKS)) == 0);\r
-\r
-    /* start test of puD3dDriverData */\r
-   \r
-    RTEST(puD3dDriverData->dwSize == sizeof(D3DNTHAL_GLOBALDRIVERDATA));\r
-    RTEST(puD3dDriverData->hwCaps.dwSize == sizeof(D3DNTHALDEVICEDESC_V1));\r
-    RTEST(puD3dDriverData->hwCaps.dtcTransformCaps.dwSize == sizeof(D3DTRANSFORMCAPS));\r
-    RTEST(puD3dDriverData->hwCaps.dlcLightingCaps.dwSize == sizeof(D3DLIGHTINGCAPS)); \r
-    RTEST(puD3dDriverData->hwCaps.dpcLineCaps.dwSize == sizeof(D3DPRIMCAPS));\r
-    RTEST(puD3dDriverData->hwCaps.dpcTriCaps.dwSize  == sizeof(D3DPRIMCAPS));\r
-    RTEST(puD3dDriverData->hwCaps.dwMaxBufferSize == 0);\r
-    RTEST(puD3dDriverData->hwCaps.dwMaxVertexCount == 0); \r
-\r
-    /* Backup D3DHAL_GLOBALDRIVERDATA so we do not need resting it */\r
-    RtlCopyMemory(&oldD3dDriverData, &D3dDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA));\r
-\r
-/* testing  NtGdiDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL, */\r
-    pHalInfo = &HalInfo;\r
-    pCallBackFlags = CallBackFlags;\r
-    puD3dCallbacks = &D3dCallbacks;\r
-    puD3dDriverData = &D3dDriverData;\r
-    puD3dBufferCallbacks = &D3dBufferCallbacks;\r
-\r
-    RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO));\r
-    RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3);\r
-    RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS));\r
-    RtlZeroMemory(puD3dDriverData,sizeof(D3DNTHAL_CALLBACKS));\r
-\r
-    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,\r
-                                        pCallBackFlags, puD3dCallbacks,\r
-                                        puD3dDriverData, puD3dBufferCallbacks,\r
-                                        puD3dTextureFormats, puNumHeaps,\r
-                                        puvmList, puNumFourCC,\r
-                                        puFourCC)== FALSE);\r
-    RTEST(pHalInfo != NULL);\r
-    RTEST(pCallBackFlags != NULL);\r
-\r
-    if (pHalInfo->ddCaps.ddsCaps.dwCaps  & DDSCAPS_3DDEVICE )\r
-    {\r
-        RTEST(puD3dCallbacks != NULL);\r
-        RTEST(puD3dDriverData != NULL);\r
-        RTEST(puD3dBufferCallbacks != NULL);\r
-    }\r
-\r
-    RTEST(pHalInfo != NULL);\r
-    ASSERT(pHalInfo != NULL);\r
-\r
-    RTEST(pCallBackFlags != NULL);\r
-    ASSERT(pCallBackFlags != NULL);\r
-\r
-    RTEST(puD3dCallbacks != NULL);\r
-    ASSERT(puD3dCallbacks != NULL);\r
-\r
-    RTEST(puD3dDriverData != NULL);\r
-    ASSERT(puD3dDriverData != NULL);\r
-\r
-    RTEST(puD3dBufferCallbacks != NULL);\r
-    ASSERT(puD3dDriverData != NULL);\r
-\r
-    RTEST(puD3dTextureFormats == NULL);\r
-    RTEST(puNumFourCC == NULL);\r
-    RTEST(puFourCC == NULL);\r
-    RTEST(puNumHeaps == NULL);\r
-    RTEST(puvmList == NULL);\r
-\r
-    /* We retesting the flags */    \r
-    RTEST(pCallBackFlags[0] != 0);\r
-    RTEST(pCallBackFlags[1] != 0);\r
-    RTEST(pCallBackFlags[2] == 0);\r
-\r
-    /* We do not retesting instead we compare it */\r
-    RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);\r
-    RTEST(memcmp(&oldD3dCallbacks, puD3dCallbacks, sizeof(D3DNTHAL_CALLBACKS)) == 0);\r
-    RTEST(memcmp(&oldD3dDriverData, puD3dDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA)) == 0);\r
-\r
-    /* start test of puD3dBufferCallbacks */\r
-    RTEST(puD3dBufferCallbacks->dwSize == sizeof(DD_D3DBUFCALLBACKS));\r
-    if (puD3dBufferCallbacks->dwFlags & DDHAL_D3DBUFCB32_CANCREATED3DBUF)\r
-    {\r
-        /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/\r
-        RTEST( ( (DWORD)puD3dBufferCallbacks->CanCreateD3DBuffer & (~0x80000000)) != 0 );\r
-    }\r
-    else\r
-    {\r
-        RTEST( puD3dBufferCallbacks->CanCreateD3DBuffer == NULL);\r
-    }\r
-\r
-    if (puD3dBufferCallbacks->dwFlags & DDHAL_D3DBUFCB32_CREATED3DBUF)\r
-    {\r
-        /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/\r
-        RTEST( ( (DWORD)puD3dBufferCallbacks->CreateD3DBuffer & (~0x80000000)) != 0 );\r
-    }\r
-    else\r
-    {\r
-        RTEST( puD3dBufferCallbacks->CreateD3DBuffer == NULL);\r
-    }\r
-\r
-    if (puD3dBufferCallbacks->dwFlags & DDHAL_D3DBUFCB32_DESTROYD3DBUF)\r
-    {\r
-        /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/\r
-        RTEST( ( (DWORD)puD3dBufferCallbacks->DestroyD3DBuffer & (~0x80000000)) != 0 );\r
-    }\r
-    else\r
-    {\r
-        RTEST( puD3dBufferCallbacks->DestroyD3DBuffer == NULL);\r
-    }\r
-\r
-    if (puD3dBufferCallbacks->dwFlags & DDHAL_D3DBUFCB32_LOCKD3DBUF)\r
-    {\r
-        /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/\r
-        RTEST( ( (DWORD)puD3dBufferCallbacks->LockD3DBuffer & (~0x80000000)) != 0 );\r
-    }\r
-    else\r
-    {\r
-        RTEST( puD3dBufferCallbacks->LockD3DBuffer == NULL);\r
-    }\r
-\r
-    if (puD3dBufferCallbacks->dwFlags & DDHAL_D3DBUFCB32_UNLOCKD3DBUF)\r
-    {\r
-        /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/\r
-        RTEST( ( (DWORD)puD3dBufferCallbacks->UnlockD3DBuffer & (~0x80000000)) != 0 );\r
-    }\r
-    else\r
-    {\r
-        RTEST( puD3dBufferCallbacks->UnlockD3DBuffer == NULL);\r
-    }\r
-\r
-    /* Backup DD_D3DBUFCALLBACKS so we do not need resting it */\r
-    RtlCopyMemory(&oldD3dBufferCallbacks, &D3dBufferCallbacks, sizeof(DD_D3DBUFCALLBACKS));\r
-\r
-\r
-/* testing  NtGdiDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL, */ \r
-    pHalInfo = &HalInfo;\r
-    pCallBackFlags = CallBackFlags;\r
-    puD3dCallbacks = &D3dCallbacks;\r
-    puD3dDriverData = &D3dDriverData;\r
-    puD3dBufferCallbacks = &D3dBufferCallbacks;\r
-\r
-    /* It is forbein to return a  DDSURFACEDESC2 it should always be DDSURFACEDESC\r
-        This is only for detected bad drivers that does not follow the rules, if they\r
-        does not follow tthe rules, not everthing being copy then in gdi32.dll\r
-        gdi32.dll always assume it is DDSURFACEDESC size\r
-    */\r
-    if (puD3dDriverData->dwNumTextureFormats != 0)\r
-    {\r
-        puD3dTextureFormats = malloc (puD3dDriverData->dwNumTextureFormats * sizeof(DDSURFACEDESC2));\r
-    }\r
-\r
-    RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO));\r
-    RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3);\r
-    RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS));\r
-    RtlZeroMemory(puD3dDriverData,sizeof(D3DNTHAL_GLOBALDRIVERDATA));\r
-    RtlZeroMemory(&D3dBufferCallbacks,sizeof(DD_D3DBUFCALLBACKS));\r
-\r
-    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,\r
-                                        pCallBackFlags, puD3dCallbacks,\r
-                                        puD3dDriverData, puD3dBufferCallbacks,\r
-                                        puD3dTextureFormats, puNumHeaps,\r
-                                        puvmList, puNumFourCC,\r
-                                        puFourCC)== FALSE);\r
-\r
-    RTEST(pHalInfo != NULL);\r
-    ASSERT(pHalInfo != NULL);\r
-\r
-    RTEST(pCallBackFlags != NULL);\r
-    ASSERT(pCallBackFlags != NULL);\r
-\r
-    RTEST(puD3dCallbacks != NULL);\r
-    ASSERT(puD3dCallbacks != NULL);\r
-\r
-    RTEST(puD3dDriverData != NULL);\r
-    ASSERT(puD3dDriverData != NULL);\r
-\r
-    RTEST(puD3dBufferCallbacks != NULL);\r
-    ASSERT(puD3dDriverData != NULL);\r
-\r
-    RTEST(puD3dTextureFormats != NULL);\r
-    ASSERT(puD3dTextureFormats != NULL);\r
-    \r
-    RTEST(puNumFourCC == NULL);\r
-    RTEST(puFourCC == NULL);\r
-    RTEST(puNumHeaps == NULL);\r
-    RTEST(puvmList == NULL);\r
-\r
-    /* We retesting the flags */    \r
-    RTEST(pCallBackFlags[0] != 0);\r
-    RTEST(pCallBackFlags[1] != 0);\r
-    RTEST(pCallBackFlags[2] == 0);\r
-\r
-    /* We do not retesting instead we compare it */\r
-    RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);\r
-    RTEST(memcmp(&oldD3dCallbacks, puD3dCallbacks, sizeof(D3DNTHAL_CALLBACKS)) == 0);\r
-    RTEST(memcmp(&oldD3dDriverData, puD3dDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA)) == 0);\r
-    RTEST(memcmp(&oldD3dBufferCallbacks, puD3dBufferCallbacks, sizeof(DD_D3DBUFCALLBACKS)) == 0);\r
-\r
-    /* start test of dwNumTextureFormats */        \r
-    if (puD3dDriverData->dwNumTextureFormats != 0)\r
-    {\r
-        myDesc = puD3dTextureFormats;\r
-        for (dwTextureCounter=0;dwTextureCounter<puD3dDriverData->dwNumTextureFormats;dwTextureCounter++)\r
-        {\r
-            RTEST(myDesc->dwSize == sizeof(DDSURFACEDESC))\r
-            ASSERT(myDesc->dwSize == sizeof(DDSURFACEDESC));\r
-\r
-            RTEST( (myDesc->dwFlags & (~(DDSD_CAPS|DDSD_PIXELFORMAT))) == 0);\r
-            RTEST(myDesc->dwHeight == 0);\r
-            RTEST(myDesc->dwWidth == 0);\r
-            RTEST(myDesc->dwLinearSize == 0);\r
-            RTEST(myDesc->dwBackBufferCount == 0);\r
-            RTEST(myDesc->dwZBufferBitDepth == 0);\r
-            RTEST(myDesc->dwAlphaBitDepth == 0);\r
-            RTEST(myDesc->dwReserved == 0);\r
-            RTEST(myDesc->lpSurface == 0);\r
-            RTEST(myDesc->ddckCKDestOverlay.dwColorSpaceLowValue == 0);\r
-            RTEST(myDesc->ddckCKDestOverlay.dwColorSpaceHighValue == 0);\r
-            RTEST(myDesc->ddckCKDestBlt.dwColorSpaceLowValue == 0);\r
-            RTEST(myDesc->ddckCKDestBlt.dwColorSpaceHighValue == 0);\r
-            RTEST(myDesc->ddckCKSrcOverlay.dwColorSpaceLowValue == 0);\r
-            RTEST(myDesc->ddckCKSrcOverlay.dwColorSpaceHighValue == 0);\r
-            RTEST(myDesc->ddckCKSrcBlt.dwColorSpaceLowValue == 0);\r
-            RTEST(myDesc->ddckCKSrcBlt.dwColorSpaceHighValue == 0);            \r
-            RTEST(myDesc->ddpfPixelFormat.dwSize == sizeof(DDPIXELFORMAT));\r
-            RTEST(myDesc->ddpfPixelFormat.dwFlags != 0);\r
-            if (myDesc->ddpfPixelFormat.dwFlags & DDPF_FOURCC)\r
-            {\r
-                RTEST(myDesc->ddpfPixelFormat.dwFourCC != 0);\r
-            }\r
-            RTEST(myDesc->ddsCaps.dwCaps == DDSCAPS_TEXTURE);\r
-\r
-            myDesc = (DDSURFACEDESC *) (((DWORD) myDesc) + sizeof(DDSURFACEDESC));\r
-        }\r
-    }\r
-     \r
-\r
-    /* testing  NtGdiDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, puNumHeaps, NULL, */ \r
-    pHalInfo = &HalInfo;\r
-    pCallBackFlags = CallBackFlags;\r
-    puD3dCallbacks = &D3dCallbacks;\r
-    puD3dDriverData = &D3dDriverData;\r
-    puD3dBufferCallbacks = &D3dBufferCallbacks;\r
-    puNumHeaps = &NumHeaps;\r
-    \r
-    if (puD3dDriverData->dwNumTextureFormats != 0)\r
-    {\r
-        RtlZeroMemory(puD3dTextureFormats, puD3dDriverData->dwNumTextureFormats * sizeof(DDSURFACEDESC2));\r
-    }    \r
-    RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO));\r
-    RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3);\r
-    RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS));\r
-    RtlZeroMemory(puD3dDriverData,sizeof(D3DNTHAL_GLOBALDRIVERDATA));\r
-    RtlZeroMemory(&D3dBufferCallbacks,sizeof(DD_D3DBUFCALLBACKS));\r
-\r
-    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,\r
-                                        pCallBackFlags, puD3dCallbacks,\r
-                                        puD3dDriverData, puD3dBufferCallbacks,\r
-                                        puD3dTextureFormats, puNumHeaps,\r
-                                        puvmList, puNumFourCC,\r
-                                        puFourCC)== FALSE);\r
-\r
-    RTEST(pHalInfo != NULL);\r
-    ASSERT(pHalInfo != NULL);\r
-\r
-    RTEST(pCallBackFlags != NULL);\r
-    ASSERT(pCallBackFlags != NULL);\r
-\r
-    RTEST(puD3dCallbacks != NULL);\r
-    ASSERT(puD3dCallbacks != NULL);\r
-\r
-    RTEST(puD3dDriverData != NULL);\r
-    ASSERT(puD3dDriverData != NULL);\r
-\r
-    RTEST(puD3dBufferCallbacks != NULL);\r
-    ASSERT(puD3dDriverData != NULL);\r
-\r
-    RTEST(puD3dTextureFormats != NULL);\r
-    ASSERT(puD3dTextureFormats != NULL);\r
-    \r
-    RTEST(puNumHeaps != NULL);\r
-    ASSERT(puNumHeaps != NULL);\r
-    RTEST(NumHeaps == 0);\r
-\r
-    RTEST(puNumFourCC == NULL);\r
-    RTEST(puFourCC == NULL);\r
-    \r
-    RTEST(puvmList == NULL);\r
-\r
-    /* We retesting the flags */    \r
-    RTEST(pCallBackFlags[0] != 0);\r
-    RTEST(pCallBackFlags[1] != 0);\r
-    RTEST(pCallBackFlags[2] == 0);\r
-\r
-    /* We do not retesting instead we compare it */\r
-    RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);\r
-    RTEST(memcmp(&oldD3dCallbacks, puD3dCallbacks, sizeof(D3DNTHAL_CALLBACKS)) == 0);\r
-    RTEST(memcmp(&oldD3dDriverData, puD3dDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA)) == 0);\r
-    RTEST(memcmp(&oldD3dBufferCallbacks, puD3dBufferCallbacks, sizeof(DD_D3DBUFCALLBACKS)) == 0);\r
-    /* we skip resting texture */\r
-\r
-\r
-    /* testing  NtGdiDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, puNumHeaps, puvmList, NULL, */ \r
-    pHalInfo = &HalInfo;\r
-    pCallBackFlags = CallBackFlags;\r
-    puD3dCallbacks = &D3dCallbacks;\r
-    puD3dDriverData = &D3dDriverData;\r
-    puD3dBufferCallbacks = &D3dBufferCallbacks;\r
-    puNumHeaps = &NumHeaps;\r
-    puvmList = &vmList;\r
-    \r
-    if (puD3dDriverData->dwNumTextureFormats != 0)\r
-    {\r
-        RtlZeroMemory(puD3dTextureFormats, puD3dDriverData->dwNumTextureFormats * sizeof(DDSURFACEDESC2));\r
-    }    \r
-    RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO));\r
-    RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3);\r
-    RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS));\r
-    RtlZeroMemory(puD3dDriverData,sizeof(D3DNTHAL_GLOBALDRIVERDATA));\r
-    RtlZeroMemory(&D3dBufferCallbacks,sizeof(DD_D3DBUFCALLBACKS));\r
-\r
-    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,\r
-                                        pCallBackFlags, puD3dCallbacks,\r
-                                        puD3dDriverData, puD3dBufferCallbacks,\r
-                                        puD3dTextureFormats, puNumHeaps,\r
-                                        puvmList, puNumFourCC,\r
-                                        puFourCC)== FALSE);\r
-\r
-    RTEST(pHalInfo != NULL);\r
-    ASSERT(pHalInfo != NULL);\r
-\r
-    RTEST(pCallBackFlags != NULL);\r
-    ASSERT(pCallBackFlags != NULL);\r
-\r
-    RTEST(puD3dCallbacks != NULL);\r
-    ASSERT(puD3dCallbacks != NULL);\r
-\r
-    RTEST(puD3dDriverData != NULL);\r
-    ASSERT(puD3dDriverData != NULL);\r
-\r
-    RTEST(puD3dBufferCallbacks != NULL);\r
-    ASSERT(puD3dDriverData != NULL);\r
-\r
-    RTEST(puD3dTextureFormats != NULL);\r
-    ASSERT(puD3dTextureFormats != NULL);\r
-    \r
-    RTEST(puNumHeaps != NULL);\r
-    ASSERT(puNumHeaps != NULL);\r
-    RTEST(NumHeaps == 0);\r
-\r
-    RTEST(puvmList != NULL);    \r
-\r
-    RTEST(puNumFourCC == NULL);\r
-    RTEST(puFourCC == NULL);\r
-    \r
-    \r
-\r
-    /* We retesting the flags */    \r
-    RTEST(pCallBackFlags[0] != 0);\r
-    RTEST(pCallBackFlags[1] != 0);\r
-    RTEST(pCallBackFlags[2] == 0);\r
-\r
-    /* We do not retesting instead we compare it */\r
-    RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);\r
-    RTEST(memcmp(&oldD3dCallbacks, puD3dCallbacks, sizeof(D3DNTHAL_CALLBACKS)) == 0);\r
-    RTEST(memcmp(&oldD3dDriverData, puD3dDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA)) == 0);\r
-    RTEST(memcmp(&oldD3dBufferCallbacks, puD3dBufferCallbacks, sizeof(DD_D3DBUFCALLBACKS)) == 0);\r
-    /* we skip resting texture */\r
-\r
-    /* Todo\r
-    * adding test for   \r
-    * puNumFourCC\r
-    * puFourCC\r
-    */\r
-\r
-    /* Cleanup ReactX setup */\r
-    DeleteDC(hdc);\r
-    Syscall(L"NtGdiDdDeleteDirectDrawObject", 1, &hDirectDraw);\r
-\r
-    return APISTATUS_NORMAL;\r
-}\r
+
+/* Note : OsThunkDdQueryDirectDrawObject is the usermode name of NtGdiDdQueryDirectDrawObject
+ *        it lives in d3d8thk.dll and in windows 2000 it doing syscall direcly to win32k.sus
+ *        in windows xp and higher it call to gdi32.dll to DdEntry41 and it doing the syscall
+ */
+INT
+Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
+{
+    HANDLE  hDirectDraw = NULL;
+    DD_HALINFO *pHalInfo = NULL;
+    DWORD *pCallBackFlags = NULL;
+    LPD3DNTHAL_CALLBACKS puD3dCallbacks = NULL;
+    LPD3DNTHAL_GLOBALDRIVERDATA puD3dDriverData = NULL;
+    PDD_D3DBUFCALLBACKS puD3dBufferCallbacks = NULL;
+    LPDDSURFACEDESC puD3dTextureFormats = NULL;
+    DWORD *puNumHeaps = NULL;
+    VIDEOMEMORY *puvmList = NULL;
+    DWORD *puNumFourCC = NULL;
+    DWORD *puFourCC = NULL;
+
+    DD_HALINFO HalInfo;
+    DD_HALINFO oldHalInfo;
+    DWORD CallBackFlags[4];
+
+    D3DNTHAL_CALLBACKS D3dCallbacks;
+    D3DNTHAL_CALLBACKS oldD3dCallbacks;
+
+    D3DNTHAL_GLOBALDRIVERDATA D3dDriverData;
+    D3DNTHAL_GLOBALDRIVERDATA oldD3dDriverData;
+
+    DD_D3DBUFCALLBACKS D3dBufferCallbacks;
+    DD_D3DBUFCALLBACKS oldD3dBufferCallbacks;
+
+    DDSURFACEDESC2 D3dTextureFormats[100];
+    DWORD NumHeaps = 0;
+    VIDEOMEMORY vmList;
+    //DWORD NumFourCC = 0;
+    //DWORD FourCC = 0;
+    DEVMODE devmode;
+    HDC hdc;
+
+    DWORD dwTextureCounter = 0;
+    DDSURFACEDESC *myDesc = NULL;
+
+    /* clear data */
+    memset(&vmList,0,sizeof(VIDEOMEMORY));
+    memset(&D3dTextureFormats,0,sizeof(DDSURFACEDESC));
+    memset(&D3dBufferCallbacks,0,sizeof(DD_D3DBUFCALLBACKS));
+    memset(&D3dDriverData,0,sizeof(D3DNTHAL_GLOBALDRIVERDATA));
+    memset(&D3dCallbacks,0,sizeof(D3DNTHAL_CALLBACKS));
+    memset(&HalInfo,0,sizeof(DD_HALINFO));
+    memset(CallBackFlags,0,sizeof(DWORD)*3);
+
+    /* Get currenet display mode */
+    EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode);
+
+    /* Create hdc that we can use */
+    hdc = CreateDCW(L"DISPLAY",NULL,NULL,NULL);
+    ASSERT(hdc != NULL);
+
+
+    /* Create ReactX handle */
+    hDirectDraw = (HANDLE) NtGdiDdCreateDirectDrawObject(hdc);
+    ASSERT(hDirectDraw != NULL);
+
+    /* Start Test ReactX NtGdiDdQueryDirectDrawObject function */
+
+    /* testing  OsThunkDdQueryDirectDrawObject( NULL, ....  */
+    RTEST(NtGdiDdQueryDirectDrawObject( NULL, pHalInfo,
+                                        pCallBackFlags, puD3dCallbacks,
+                                        puD3dDriverData, puD3dBufferCallbacks,
+                                        puD3dTextureFormats, puNumHeaps,
+                                        puvmList, puNumFourCC,
+                                        puFourCC) == FALSE);
+
+    RTEST(pHalInfo == NULL);
+    RTEST(pCallBackFlags == NULL);
+    RTEST(puD3dCallbacks == NULL);
+    RTEST(puD3dDriverData == NULL);
+    RTEST(puD3dBufferCallbacks == NULL);
+    RTEST(puD3dTextureFormats == NULL);
+    RTEST(puNumFourCC == NULL);
+    RTEST(puFourCC == NULL);
+    RTEST(puNumHeaps == NULL);
+    RTEST(puvmList == NULL);
+
+    /* testing  NtGdiDdQueryDirectDrawObject( hDirectDrawLocal, NULL, ....  */
+    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,
+                                        pCallBackFlags, puD3dCallbacks,
+                                        puD3dDriverData, puD3dBufferCallbacks,
+                                        puD3dTextureFormats, puNumHeaps,
+                                        puvmList, puNumFourCC,
+                                        puFourCC) == FALSE);
+
+    RTEST(pHalInfo == NULL);
+    RTEST(pCallBackFlags == NULL);
+    RTEST(puD3dCallbacks == NULL);
+    RTEST(puD3dDriverData == NULL);
+    RTEST(puD3dBufferCallbacks == NULL);
+    RTEST(puD3dTextureFormats == NULL);
+    RTEST(puNumFourCC == NULL);
+    RTEST(puFourCC == NULL);
+    RTEST(puNumHeaps == NULL);
+    RTEST(puvmList == NULL);
+
+    /* testing  NtGdiDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, NULL, ....  */
+    pHalInfo = &HalInfo;
+    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,
+                                        pCallBackFlags, puD3dCallbacks,
+                                        puD3dDriverData, puD3dBufferCallbacks,
+                                        puD3dTextureFormats, puNumHeaps,
+                                        puvmList, puNumFourCC,
+                                        puFourCC)== FALSE);
+
+    RTEST(pHalInfo != NULL);
+    ASSERT(pHalInfo != NULL);
+
+    RTEST(pCallBackFlags == NULL);
+    RTEST(puD3dCallbacks == NULL);
+    RTEST(puD3dDriverData == NULL);
+    RTEST(puD3dBufferCallbacks == NULL);
+    RTEST(puD3dTextureFormats == NULL);
+    RTEST(puNumFourCC == NULL);
+    RTEST(puFourCC == NULL);   
+    RTEST(puNumHeaps == NULL);
+    RTEST(puvmList == NULL);
+
+    if ((pHalInfo->dwSize != sizeof(DD_HALINFO)) &&
+        (pHalInfo->dwSize != sizeof(DD_HALINFO_V4)))
+    {
+        RTEST(pHalInfo->dwSize != sizeof(DD_HALINFO));
+        ASSERT(pHalInfo->dwSize != sizeof(DD_HALINFO));
+    }
+
+    if (pHalInfo->dwSize == sizeof(DD_HALINFO))
+    {
+        /*the offset, in bytes, to primary surface in the display memory  */
+        /* some graphic card like  sis 760 GX, Nvida GF7900GS does not set any offset at all */
+        // RTEST(pHalInfo->vmiData.fpPrimary != 0 );
+
+        /* unsuse always 0 */
+        RTEST(pHalInfo->vmiData.dwFlags == 0 );
+
+        /* Check the res */
+        RTEST(pHalInfo->vmiData.dwDisplayWidth == devmode.dmPelsWidth );
+        RTEST(pHalInfo->vmiData.dwDisplayHeight == devmode.dmPelsHeight );
+
+        /*  This can never be test for it is who big the line is after it been align displayPitch */
+        RTEST(pHalInfo->vmiData.lDisplayPitch != 0);
+
+        RTEST(pHalInfo->vmiData.ddpfDisplay.dwSize == sizeof(DDPIXELFORMAT) );
+        ASSERT(pHalInfo->vmiData.ddpfDisplay.dwSize == sizeof(DDPIXELFORMAT));
+
+        /* We can not check if it DDPF_RGB flags been set for primary surface 
+         * for it can be DDPF_PALETTEINDEXED1,DDPF_PALETTEINDEXED2,DDPF_PALETTEINDEXED4,DDPF_PALETTEINDEXED8, DDPF_PALETTEINDEXEDTO8, DDPF_RGB, DDPF_YUV
+         */
+        RTEST( (pHalInfo->vmiData.ddpfDisplay.dwFlags & (DDPF_PALETTEINDEXED1 | DDPF_PALETTEINDEXED2 | DDPF_PALETTEINDEXED4 | 
+                                                         DDPF_PALETTEINDEXED8 | DDPF_PALETTEINDEXEDTO8 | DDPF_RGB | DDPF_YUV)) != 0);
+
+
+        /* No fourcc are use on primary screen */
+        RTEST(pHalInfo->vmiData.ddpfDisplay.dwFourCC == 0 );
+
+        /* Count RGB Bits 8/16/24/32 */
+        RTEST(pHalInfo->vmiData.ddpfDisplay.dwRGBBitCount == devmode.dmBitsPerPel );
+
+        /* The rgb mask can not be detected in user mode, for it can be 15Bpp convert to 16Bpp mode, so we have no way detect correct mask  
+         * But the mask can never be Zero 
+         */
+        RTEST(pHalInfo->vmiData.ddpfDisplay.dwRBitMask  !=  0 );
+        RTEST(pHalInfo->vmiData.ddpfDisplay.dwGBitMask !=  0 );
+        RTEST(pHalInfo->vmiData.ddpfDisplay.dwBBitMask != 0 );
+
+        /* primary never set the alpha blend mask */
+        RTEST(pHalInfo->vmiData.ddpfDisplay.dwRGBAlphaBitMask ==  0 );
+
+        /* This can not be test at usermode it is each hardware drv that fill in it, 
+         * only way to found them is to use this call  */
+        // pHalInfo->vmiData->dwOffscreenAlign
+        // pHalInfo->vmiData->dwOverlayAlign
+        // pHalInfo->vmiData->dwTextureAlign
+        // pHalInfo->vmiData->dwZBufferAlign
+        // pHalInfo->vmiData->dwAlphaAlign 
+
+        /* the primary display address */
+        RTEST( ( (DWORD)pHalInfo->vmiData.pvPrimary & (~0x80000000)) != 0 );
+
+        /* test see if we got back the pvmList here 
+         * acording msdn vmiData.dwNumHeaps and vmiData.pvmList
+         * exists for _VIDEOMEMORYINFO but they do not, it reviews 
+         * in ddk and wdk and own testcase 
+         */         
+         // RTEST(pHalInfo->vmiData.dwNumHeaps  != 0 );
+         // RTEST(pHalInfo->vmiData.pvmList  != 0 );
+
+        /* Test see if we got any hardware acclartions for 2d or 3d, this always fill in 
+         * that mean we found a bugi drv and dx does not work on this drv 
+         */
+
+        /* the SIS 760 GX will never fill it in, it is a bugi drv */
+        RTEST(pHalInfo->ddCaps.dwSize == sizeof(DDCORECAPS));
+
+        /* Testing see if we got any hw support for
+         * This test can fail on video card that does not support 2d/overlay/3d
+         */
+        RTEST( pHalInfo->ddCaps.dwCaps != 0);
+        RTEST( pHalInfo->ddCaps.ddsCaps.dwCaps != 0);
+
+        /* This flags is obsolete and should not be used by the driver */ 
+        RTEST( pHalInfo->ddCaps.dwFXAlphaCaps == 0);
+        
+
+        /* basic dx 2 is found if this flags not set
+         * if this fail we do not have a dx driver install acodring ms, some version of windows it
+         * is okay this fail and drv does then only support basic dx
+         * 
+         */
+        if (pHalInfo->dwFlags != 0)
+        {
+            RTEST( (pHalInfo->dwFlags & (DDHALINFO_GETDRIVERINFOSET | DDHALINFO_GETDRIVERINFO2)) != 0 );
+            RTEST( ( (DWORD)pHalInfo->GetDriverInfo & 0x80000000) != 0 );
+            ASSERT( ((DWORD)pHalInfo->GetDriverInfo & 0x80000000) != 0 );
+        }
+
+        /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/
+        
+
+       /* the pHalInfo->ddCaps.ddsCaps.dwCaps & DDSCAPS_3DDEVICE will be ignore, only way detect it proper follow code,
+        * this will be fill in of all drv, it is not only for 3d stuff, this always fill by win32k.sys or dxg.sys depns 
+        * if it windows 2000 or windows xp/2003
+        *
+        * point to kmode direcly to the win32k.sys, win32k.sys is kmode and it is kmode address we getting back
+        */
+        RTEST( ( (DWORD)pHalInfo->lpD3DGlobalDriverData & (~0x80000000)) != 0 );
+        RTEST( ( (DWORD)pHalInfo->lpD3DHALCallbacks & (~0x80000000)) != 0 );
+        RTEST( ( (DWORD)pHalInfo->lpD3DHALCallbacks & (~0x80000000)) != 0 );
+    }
+
+    /* Backup DD_HALINFO so we do not need resting it */
+    RtlCopyMemory(&oldHalInfo, &HalInfo, sizeof(DD_HALINFO));
+
+    /* testing  NtGdiDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, ....  */
+    pHalInfo = &HalInfo;
+    pCallBackFlags = CallBackFlags;
+    RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO));
+
+    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,
+                                        pCallBackFlags, puD3dCallbacks,
+                                        puD3dDriverData, puD3dBufferCallbacks,
+                                        puD3dTextureFormats, puNumHeaps,
+                                        puvmList, puNumFourCC,
+                                        puFourCC)== FALSE);
+    RTEST(pHalInfo != NULL);
+    ASSERT(pHalInfo != NULL);
+
+    RTEST(pCallBackFlags != NULL);
+    ASSERT(pCallBackFlags != NULL);
+
+    RTEST(puD3dCallbacks == NULL);
+    RTEST(puD3dDriverData == NULL);
+    RTEST(puD3dBufferCallbacks == NULL);
+    RTEST(puD3dTextureFormats == NULL);
+    RTEST(puNumFourCC == NULL);
+    RTEST(puFourCC == NULL);
+    RTEST(puNumHeaps == NULL);
+    RTEST(puvmList == NULL);
+
+    /* We do not retesting DD_HALINFO, instead we compare it */
+    RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);
+
+    /* Rember on some nivida drv the pCallBackFlags will not be set even they api exists in the drv
+     * known workaround is to check if the drv really return a kmode pointer for the drv functions 
+     * we want to use.
+     */
+    RTEST(pCallBackFlags[0] != 0);
+    RTEST(pCallBackFlags[1] != 0);
+    RTEST(pCallBackFlags[2] == 0);
+
+    /* testing  NtGdiDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, pCallBackFlags, D3dCallbacks, NULL, ....  */
+    pHalInfo = &HalInfo;
+    pCallBackFlags = CallBackFlags;
+    puD3dCallbacks = &D3dCallbacks;
+
+    RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO));
+    RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3);
+
+    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,
+                                        pCallBackFlags, puD3dCallbacks,
+                                        puD3dDriverData, puD3dBufferCallbacks,
+                                        puD3dTextureFormats, puNumHeaps,
+                                        puvmList, puNumFourCC,
+                                        puFourCC)== FALSE);
+    RTEST(pHalInfo != NULL);
+    ASSERT(pHalInfo != NULL);
+
+    RTEST(pCallBackFlags != NULL);
+    ASSERT(pCallBackFlags != NULL);
+
+    /* rember puD3dCallbacks shall never return NULL */
+    RTEST(puD3dCallbacks != NULL);
+    ASSERT(puD3dCallbacks != NULL);
+
+    /* the pHalInfo->ddCaps.ddsCaps.dwCaps & DDSCAPS_3DDEVICE will be ignore, only way detect it proper follow code,
+     * this will be fill in of all drv, it is not only for 3d stuff, this always fill by win32k.sys or dxg.sys depns 
+     * if it windows 2000 or windows xp/2003
+     */
+    RTEST(puD3dCallbacks->dwSize == sizeof(D3DNTHAL_CALLBACKS));
+
+    /* Nivda like GF7900GS will not follow ms design rule here, 
+     * ContextDestroyAll must alwyas be NULL for it is not longer inuse in windows 2000 and higher
+     */
+    RTEST(puD3dCallbacks->ContextDestroyAll == NULL);
+
+    /* Nivda like GF7900GS will not follow ms design rule here, 
+     * SceneCapture must alwyas be NULL for it is not longer inuse in windows 2000 and higher
+     */
+    RTEST(puD3dCallbacks->SceneCapture  == NULL);
+    RTEST(puD3dCallbacks->dwReserved10 == 0);
+    RTEST(puD3dCallbacks->dwReserved11 == 0);
+    RTEST(puD3dCallbacks->dwReserved22 == 0);
+    RTEST(puD3dCallbacks->dwReserved23 == 0);
+    RTEST(puD3dCallbacks->dwReserved == 0);
+    RTEST(puD3dCallbacks->TextureCreate  == NULL);
+    RTEST(puD3dCallbacks->TextureDestroy  == NULL);
+    RTEST(puD3dCallbacks->TextureSwap  == NULL);
+    RTEST(puD3dCallbacks->TextureGetSurf  == NULL);
+    RTEST(puD3dCallbacks->dwReserved12 == 0);
+    RTEST(puD3dCallbacks->dwReserved13 == 0);
+    RTEST(puD3dCallbacks->dwReserved14 == 0);
+    RTEST(puD3dCallbacks->dwReserved15 == 0);
+    RTEST(puD3dCallbacks->dwReserved16 == 0);
+    RTEST(puD3dCallbacks->dwReserved17 == 0);
+    RTEST(puD3dCallbacks->dwReserved18 == 0);
+    RTEST(puD3dCallbacks->dwReserved19 == 0);
+    RTEST(puD3dCallbacks->dwReserved20 == 0);
+    RTEST(puD3dCallbacks->dwReserved21 == 0);
+    RTEST(puD3dCallbacks->dwReserved24 == 0);
+    RTEST(puD3dCallbacks->dwReserved0 == 0);
+    RTEST(puD3dCallbacks->dwReserved1 == 0);
+    RTEST(puD3dCallbacks->dwReserved2 == 0);
+    RTEST(puD3dCallbacks->dwReserved3 == 0);
+    RTEST(puD3dCallbacks->dwReserved4 == 0);
+    RTEST(puD3dCallbacks->dwReserved5 == 0);
+    RTEST(puD3dCallbacks->dwReserved6 == 0);
+    RTEST(puD3dCallbacks->dwReserved7 == 0);
+    RTEST(puD3dCallbacks->dwReserved8 == 0);
+    RTEST(puD3dCallbacks->dwReserved9 == 0);
+
+    /* how detect puD3dCallbacks->ContextCreate and puD3dCallbacks->ContextDestroy shall be set for bugi drv like nivda ? */
+    /* pointer direcly to the graphic drv, it is kmode pointer */
+    // RTEST( ( (DWORD)puD3dCallbacks->ContextCreate & (~0x80000000)) != 0 );
+    // RTEST( ( (DWORD)puD3dCallbacks->ContextDestroy & (~0x80000000)) != 0 );
+
+    RTEST(puD3dDriverData == NULL);
+    RTEST(puD3dBufferCallbacks == NULL);
+    RTEST(puD3dTextureFormats == NULL);
+    RTEST(puNumFourCC == NULL);
+    RTEST(puFourCC == NULL);
+    RTEST(puNumHeaps == NULL);
+    RTEST(puvmList == NULL);
+
+    /* We do not retesting DD_HALINFO, instead we compare it */
+    RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);
+    RTEST(pCallBackFlags[0] != 0);
+    RTEST(pCallBackFlags[1] != 0);
+    RTEST(pCallBackFlags[2] == 0);
+
+    /* Backup D3DNTHAL_CALLBACKS so we do not need resting it */
+    RtlCopyMemory(&oldD3dCallbacks, &D3dCallbacks, sizeof(D3DNTHAL_CALLBACKS));
+
+
+/* testing  NtGdiDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, NULL, */
+    pHalInfo = &HalInfo;
+    pCallBackFlags = CallBackFlags;
+    puD3dCallbacks = &D3dCallbacks;
+    puD3dDriverData = &D3dDriverData;
+
+    RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO));
+    RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3);
+    RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS));
+
+    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,
+                                        pCallBackFlags, puD3dCallbacks,
+                                        puD3dDriverData, puD3dBufferCallbacks,
+                                        puD3dTextureFormats, puNumHeaps,
+                                        puvmList, puNumFourCC,
+                                        puFourCC)== FALSE);
+    RTEST(pHalInfo != NULL);
+    ASSERT(pHalInfo != NULL);
+
+    RTEST(pCallBackFlags != NULL);
+    ASSERT(pCallBackFlags != NULL);
+
+    RTEST(puD3dCallbacks != NULL);
+    ASSERT(puD3dCallbacks != NULL);
+
+    RTEST(puD3dDriverData != NULL);
+    ASSERT(puD3dDriverData != NULL);
+
+    RTEST(puD3dBufferCallbacks == NULL);
+    RTEST(puD3dTextureFormats == NULL);
+    RTEST(puNumFourCC == NULL);
+    RTEST(puFourCC == NULL);
+    RTEST(puNumHeaps == NULL);
+    RTEST(puvmList == NULL);
+
+    /* We retesting pCallBackFlags  */    
+    RTEST(pCallBackFlags[0] != 0);
+    RTEST(pCallBackFlags[1] != 0);
+    RTEST(pCallBackFlags[2] == 0);
+
+    /* We do not retesting instead we compare it */
+    RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);
+    RTEST(memcmp(&oldD3dCallbacks, puD3dCallbacks, sizeof(D3DNTHAL_CALLBACKS)) == 0);
+
+    /* start test of puD3dDriverData */
+   
+    RTEST(puD3dDriverData->dwSize == sizeof(D3DNTHAL_GLOBALDRIVERDATA));
+    RTEST(puD3dDriverData->hwCaps.dwSize == sizeof(D3DNTHALDEVICEDESC_V1));
+    RTEST(puD3dDriverData->hwCaps.dtcTransformCaps.dwSize == sizeof(D3DTRANSFORMCAPS));
+    RTEST(puD3dDriverData->hwCaps.dlcLightingCaps.dwSize == sizeof(D3DLIGHTINGCAPS)); 
+    RTEST(puD3dDriverData->hwCaps.dpcLineCaps.dwSize == sizeof(D3DPRIMCAPS));
+    RTEST(puD3dDriverData->hwCaps.dpcTriCaps.dwSize  == sizeof(D3DPRIMCAPS));
+    RTEST(puD3dDriverData->hwCaps.dwMaxBufferSize == 0);
+    RTEST(puD3dDriverData->hwCaps.dwMaxVertexCount == 0); 
+
+    /* Backup D3DHAL_GLOBALDRIVERDATA so we do not need resting it */
+    RtlCopyMemory(&oldD3dDriverData, &D3dDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA));
+
+/* testing  NtGdiDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, NULL, */
+    pHalInfo = &HalInfo;
+    pCallBackFlags = CallBackFlags;
+    puD3dCallbacks = &D3dCallbacks;
+    puD3dDriverData = &D3dDriverData;
+    puD3dBufferCallbacks = &D3dBufferCallbacks;
+
+    RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO));
+    RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3);
+    RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS));
+    RtlZeroMemory(puD3dDriverData,sizeof(D3DNTHAL_CALLBACKS));
+
+    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,
+                                        pCallBackFlags, puD3dCallbacks,
+                                        puD3dDriverData, puD3dBufferCallbacks,
+                                        puD3dTextureFormats, puNumHeaps,
+                                        puvmList, puNumFourCC,
+                                        puFourCC)== FALSE);
+    RTEST(pHalInfo != NULL);
+    RTEST(pCallBackFlags != NULL);
+
+    if (pHalInfo->ddCaps.ddsCaps.dwCaps  & DDSCAPS_3DDEVICE )
+    {
+        RTEST(puD3dCallbacks != NULL);
+        RTEST(puD3dDriverData != NULL);
+        RTEST(puD3dBufferCallbacks != NULL);
+    }
+
+    RTEST(pHalInfo != NULL);
+    ASSERT(pHalInfo != NULL);
+
+    RTEST(pCallBackFlags != NULL);
+    ASSERT(pCallBackFlags != NULL);
+
+    RTEST(puD3dCallbacks != NULL);
+    ASSERT(puD3dCallbacks != NULL);
+
+    RTEST(puD3dDriverData != NULL);
+    ASSERT(puD3dDriverData != NULL);
+
+    RTEST(puD3dBufferCallbacks != NULL);
+    ASSERT(puD3dDriverData != NULL);
+
+    RTEST(puD3dTextureFormats == NULL);
+    RTEST(puNumFourCC == NULL);
+    RTEST(puFourCC == NULL);
+    RTEST(puNumHeaps == NULL);
+    RTEST(puvmList == NULL);
+
+    /* We retesting the flags */    
+    RTEST(pCallBackFlags[0] != 0);
+    RTEST(pCallBackFlags[1] != 0);
+    RTEST(pCallBackFlags[2] == 0);
+
+    /* We do not retesting instead we compare it */
+    RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);
+    RTEST(memcmp(&oldD3dCallbacks, puD3dCallbacks, sizeof(D3DNTHAL_CALLBACKS)) == 0);
+    RTEST(memcmp(&oldD3dDriverData, puD3dDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA)) == 0);
+
+    /* start test of puD3dBufferCallbacks */
+    RTEST(puD3dBufferCallbacks->dwSize == sizeof(DD_D3DBUFCALLBACKS));
+    if (puD3dBufferCallbacks->dwFlags & DDHAL_D3DBUFCB32_CANCREATED3DBUF)
+    {
+        /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/
+        RTEST( ( (DWORD)puD3dBufferCallbacks->CanCreateD3DBuffer & (~0x80000000)) != 0 );
+    }
+    else
+    {
+        RTEST( puD3dBufferCallbacks->CanCreateD3DBuffer == NULL);
+    }
+
+    if (puD3dBufferCallbacks->dwFlags & DDHAL_D3DBUFCB32_CREATED3DBUF)
+    {
+        /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/
+        RTEST( ( (DWORD)puD3dBufferCallbacks->CreateD3DBuffer & (~0x80000000)) != 0 );
+    }
+    else
+    {
+        RTEST( puD3dBufferCallbacks->CreateD3DBuffer == NULL);
+    }
+
+    if (puD3dBufferCallbacks->dwFlags & DDHAL_D3DBUFCB32_DESTROYD3DBUF)
+    {
+        /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/
+        RTEST( ( (DWORD)puD3dBufferCallbacks->DestroyD3DBuffer & (~0x80000000)) != 0 );
+    }
+    else
+    {
+        RTEST( puD3dBufferCallbacks->DestroyD3DBuffer == NULL);
+    }
+
+    if (puD3dBufferCallbacks->dwFlags & DDHAL_D3DBUFCB32_LOCKD3DBUF)
+    {
+        /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/
+        RTEST( ( (DWORD)puD3dBufferCallbacks->LockD3DBuffer & (~0x80000000)) != 0 );
+    }
+    else
+    {
+        RTEST( puD3dBufferCallbacks->LockD3DBuffer == NULL);
+    }
+
+    if (puD3dBufferCallbacks->dwFlags & DDHAL_D3DBUFCB32_UNLOCKD3DBUF)
+    {
+        /* point to kmode direcly to the graphic drv, the drv is kmode and it is kmode address we getting back*/
+        RTEST( ( (DWORD)puD3dBufferCallbacks->UnlockD3DBuffer & (~0x80000000)) != 0 );
+    }
+    else
+    {
+        RTEST( puD3dBufferCallbacks->UnlockD3DBuffer == NULL);
+    }
+
+    /* Backup DD_D3DBUFCALLBACKS so we do not need resting it */
+    RtlCopyMemory(&oldD3dBufferCallbacks, &D3dBufferCallbacks, sizeof(DD_D3DBUFCALLBACKS));
+
+
+/* testing  NtGdiDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, NULL, */ 
+    pHalInfo = &HalInfo;
+    pCallBackFlags = CallBackFlags;
+    puD3dCallbacks = &D3dCallbacks;
+    puD3dDriverData = &D3dDriverData;
+    puD3dBufferCallbacks = &D3dBufferCallbacks;
+
+    /* It is forbein to return a  DDSURFACEDESC2 it should always be DDSURFACEDESC
+        This is only for detected bad drivers that does not follow the rules, if they
+        does not follow tthe rules, not everthing being copy then in gdi32.dll
+        gdi32.dll always assume it is DDSURFACEDESC size
+    */
+    if (puD3dDriverData->dwNumTextureFormats != 0)
+    {
+        puD3dTextureFormats = malloc (puD3dDriverData->dwNumTextureFormats * sizeof(DDSURFACEDESC2));
+    }
+
+    RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO));
+    RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3);
+    RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS));
+    RtlZeroMemory(puD3dDriverData,sizeof(D3DNTHAL_GLOBALDRIVERDATA));
+    RtlZeroMemory(&D3dBufferCallbacks,sizeof(DD_D3DBUFCALLBACKS));
+
+    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,
+                                        pCallBackFlags, puD3dCallbacks,
+                                        puD3dDriverData, puD3dBufferCallbacks,
+                                        puD3dTextureFormats, puNumHeaps,
+                                        puvmList, puNumFourCC,
+                                        puFourCC)== FALSE);
+
+    RTEST(pHalInfo != NULL);
+    ASSERT(pHalInfo != NULL);
+
+    RTEST(pCallBackFlags != NULL);
+    ASSERT(pCallBackFlags != NULL);
+
+    RTEST(puD3dCallbacks != NULL);
+    ASSERT(puD3dCallbacks != NULL);
+
+    RTEST(puD3dDriverData != NULL);
+    ASSERT(puD3dDriverData != NULL);
+
+    RTEST(puD3dBufferCallbacks != NULL);
+    ASSERT(puD3dDriverData != NULL);
+
+    RTEST(puD3dTextureFormats != NULL);
+    ASSERT(puD3dTextureFormats != NULL);
+    
+    RTEST(puNumFourCC == NULL);
+    RTEST(puFourCC == NULL);
+    RTEST(puNumHeaps == NULL);
+    RTEST(puvmList == NULL);
+
+    /* We retesting the flags */    
+    RTEST(pCallBackFlags[0] != 0);
+    RTEST(pCallBackFlags[1] != 0);
+    RTEST(pCallBackFlags[2] == 0);
+
+    /* We do not retesting instead we compare it */
+    RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);
+    RTEST(memcmp(&oldD3dCallbacks, puD3dCallbacks, sizeof(D3DNTHAL_CALLBACKS)) == 0);
+    RTEST(memcmp(&oldD3dDriverData, puD3dDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA)) == 0);
+    RTEST(memcmp(&oldD3dBufferCallbacks, puD3dBufferCallbacks, sizeof(DD_D3DBUFCALLBACKS)) == 0);
+
+    /* start test of dwNumTextureFormats */        
+    if (puD3dDriverData->dwNumTextureFormats != 0)
+    {
+        myDesc = puD3dTextureFormats;
+        for (dwTextureCounter=0;dwTextureCounter<puD3dDriverData->dwNumTextureFormats;dwTextureCounter++)
+        {
+            RTEST(myDesc->dwSize == sizeof(DDSURFACEDESC))
+            ASSERT(myDesc->dwSize == sizeof(DDSURFACEDESC));
+
+            RTEST( (myDesc->dwFlags & (~(DDSD_CAPS|DDSD_PIXELFORMAT))) == 0);
+            RTEST(myDesc->dwHeight == 0);
+            RTEST(myDesc->dwWidth == 0);
+            RTEST(myDesc->dwLinearSize == 0);
+            RTEST(myDesc->dwBackBufferCount == 0);
+            RTEST(myDesc->dwZBufferBitDepth == 0);
+            RTEST(myDesc->dwAlphaBitDepth == 0);
+            RTEST(myDesc->dwReserved == 0);
+            RTEST(myDesc->lpSurface == 0);
+            RTEST(myDesc->ddckCKDestOverlay.dwColorSpaceLowValue == 0);
+            RTEST(myDesc->ddckCKDestOverlay.dwColorSpaceHighValue == 0);
+            RTEST(myDesc->ddckCKDestBlt.dwColorSpaceLowValue == 0);
+            RTEST(myDesc->ddckCKDestBlt.dwColorSpaceHighValue == 0);
+            RTEST(myDesc->ddckCKSrcOverlay.dwColorSpaceLowValue == 0);
+            RTEST(myDesc->ddckCKSrcOverlay.dwColorSpaceHighValue == 0);
+            RTEST(myDesc->ddckCKSrcBlt.dwColorSpaceLowValue == 0);
+            RTEST(myDesc->ddckCKSrcBlt.dwColorSpaceHighValue == 0);            
+            RTEST(myDesc->ddpfPixelFormat.dwSize == sizeof(DDPIXELFORMAT));
+            RTEST(myDesc->ddpfPixelFormat.dwFlags != 0);
+            if (myDesc->ddpfPixelFormat.dwFlags & DDPF_FOURCC)
+            {
+                RTEST(myDesc->ddpfPixelFormat.dwFourCC != 0);
+            }
+            RTEST(myDesc->ddsCaps.dwCaps == DDSCAPS_TEXTURE);
+
+            myDesc = (DDSURFACEDESC *) (((DWORD) myDesc) + sizeof(DDSURFACEDESC));
+        }
+    }
+     
+
+    /* testing  NtGdiDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, puNumHeaps, NULL, */ 
+    pHalInfo = &HalInfo;
+    pCallBackFlags = CallBackFlags;
+    puD3dCallbacks = &D3dCallbacks;
+    puD3dDriverData = &D3dDriverData;
+    puD3dBufferCallbacks = &D3dBufferCallbacks;
+    puNumHeaps = &NumHeaps;
+    
+    if (puD3dDriverData->dwNumTextureFormats != 0)
+    {
+        RtlZeroMemory(puD3dTextureFormats, puD3dDriverData->dwNumTextureFormats * sizeof(DDSURFACEDESC2));
+    }    
+    RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO));
+    RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3);
+    RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS));
+    RtlZeroMemory(puD3dDriverData,sizeof(D3DNTHAL_GLOBALDRIVERDATA));
+    RtlZeroMemory(&D3dBufferCallbacks,sizeof(DD_D3DBUFCALLBACKS));
+
+    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,
+                                        pCallBackFlags, puD3dCallbacks,
+                                        puD3dDriverData, puD3dBufferCallbacks,
+                                        puD3dTextureFormats, puNumHeaps,
+                                        puvmList, puNumFourCC,
+                                        puFourCC)== FALSE);
+
+    RTEST(pHalInfo != NULL);
+    ASSERT(pHalInfo != NULL);
+
+    RTEST(pCallBackFlags != NULL);
+    ASSERT(pCallBackFlags != NULL);
+
+    RTEST(puD3dCallbacks != NULL);
+    ASSERT(puD3dCallbacks != NULL);
+
+    RTEST(puD3dDriverData != NULL);
+    ASSERT(puD3dDriverData != NULL);
+
+    RTEST(puD3dBufferCallbacks != NULL);
+    ASSERT(puD3dDriverData != NULL);
+
+    RTEST(puD3dTextureFormats != NULL);
+    ASSERT(puD3dTextureFormats != NULL);
+    
+    RTEST(puNumHeaps != NULL);
+    ASSERT(puNumHeaps != NULL);
+    RTEST(NumHeaps == 0);
+
+    RTEST(puNumFourCC == NULL);
+    RTEST(puFourCC == NULL);
+    
+    RTEST(puvmList == NULL);
+
+    /* We retesting the flags */    
+    RTEST(pCallBackFlags[0] != 0);
+    RTEST(pCallBackFlags[1] != 0);
+    RTEST(pCallBackFlags[2] == 0);
+
+    /* We do not retesting instead we compare it */
+    RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);
+    RTEST(memcmp(&oldD3dCallbacks, puD3dCallbacks, sizeof(D3DNTHAL_CALLBACKS)) == 0);
+    RTEST(memcmp(&oldD3dDriverData, puD3dDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA)) == 0);
+    RTEST(memcmp(&oldD3dBufferCallbacks, puD3dBufferCallbacks, sizeof(DD_D3DBUFCALLBACKS)) == 0);
+    /* we skip resting texture */
+
+
+    /* testing  NtGdiDdQueryDirectDrawObject( hDD, pHalInfo, pCallBackFlags, puD3dCallbacks, puD3dDriverData, puD3dBufferCallbacks, puD3dTextureFormats, puNumHeaps, puvmList, NULL, */ 
+    pHalInfo = &HalInfo;
+    pCallBackFlags = CallBackFlags;
+    puD3dCallbacks = &D3dCallbacks;
+    puD3dDriverData = &D3dDriverData;
+    puD3dBufferCallbacks = &D3dBufferCallbacks;
+    puNumHeaps = &NumHeaps;
+    puvmList = &vmList;
+    
+    if (puD3dDriverData->dwNumTextureFormats != 0)
+    {
+        RtlZeroMemory(puD3dTextureFormats, puD3dDriverData->dwNumTextureFormats * sizeof(DDSURFACEDESC2));
+    }    
+    RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO));
+    RtlZeroMemory(pCallBackFlags,sizeof(DWORD)*3);
+    RtlZeroMemory(puD3dCallbacks,sizeof(D3DNTHAL_CALLBACKS));
+    RtlZeroMemory(puD3dDriverData,sizeof(D3DNTHAL_GLOBALDRIVERDATA));
+    RtlZeroMemory(&D3dBufferCallbacks,sizeof(DD_D3DBUFCALLBACKS));
+
+    RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,
+                                        pCallBackFlags, puD3dCallbacks,
+                                        puD3dDriverData, puD3dBufferCallbacks,
+                                        puD3dTextureFormats, puNumHeaps,
+                                        puvmList, puNumFourCC,
+                                        puFourCC)== FALSE);
+
+    RTEST(pHalInfo != NULL);
+    ASSERT(pHalInfo != NULL);
+
+    RTEST(pCallBackFlags != NULL);
+    ASSERT(pCallBackFlags != NULL);
+
+    RTEST(puD3dCallbacks != NULL);
+    ASSERT(puD3dCallbacks != NULL);
+
+    RTEST(puD3dDriverData != NULL);
+    ASSERT(puD3dDriverData != NULL);
+
+    RTEST(puD3dBufferCallbacks != NULL);
+    ASSERT(puD3dDriverData != NULL);
+
+    RTEST(puD3dTextureFormats != NULL);
+    ASSERT(puD3dTextureFormats != NULL);
+    
+    RTEST(puNumHeaps != NULL);
+    ASSERT(puNumHeaps != NULL);
+    RTEST(NumHeaps == 0);
+
+    RTEST(puvmList != NULL);    
+
+    RTEST(puNumFourCC == NULL);
+    RTEST(puFourCC == NULL);
+    
+    
+
+    /* We retesting the flags */    
+    RTEST(pCallBackFlags[0] != 0);
+    RTEST(pCallBackFlags[1] != 0);
+    RTEST(pCallBackFlags[2] == 0);
+
+    /* We do not retesting instead we compare it */
+    RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);
+    RTEST(memcmp(&oldD3dCallbacks, puD3dCallbacks, sizeof(D3DNTHAL_CALLBACKS)) == 0);
+    RTEST(memcmp(&oldD3dDriverData, puD3dDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA)) == 0);
+    RTEST(memcmp(&oldD3dBufferCallbacks, puD3dBufferCallbacks, sizeof(DD_D3DBUFCALLBACKS)) == 0);
+    /* we skip resting texture */
+
+    /* Todo
+    * adding test for   
+    * puNumFourCC
+    * puFourCC
+    */
+
+    /* Cleanup ReactX setup */
+    DeleteDC(hdc);
+    Syscall(L"NtGdiDdDeleteDirectDrawObject", 1, &hDirectDraw);
+
+    return APISTATUS_NORMAL;
+}
index ce7ba5b..81c0bde 100644 (file)
@@ -1,36 +1,36 @@
-INT\r
-Test_NtGdiArcInternal(PTESTINFO pti)\r
-{\r
-       HDC hDC = CreateDCW(L"Display",NULL,NULL,NULL);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(NtGdiArcInternal(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) == FALSE);\r
-       TEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(NtGdiArcInternal(0, hDC, 0, 0, 0, 0, 0, 0, 0, 0) == TRUE);\r
-       TEST(NtGdiArcInternal(1, hDC, 0, 0, 0, 0, 0, 0, 0, 0) == TRUE);\r
-       TEST(NtGdiArcInternal(2, hDC, 0, 0, 0, 0, 0, 0, 0, 0) == TRUE);\r
-       TEST(NtGdiArcInternal(3, hDC, 0, 0, 0, 0, 0, 0, 0, 0) == TRUE);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(NtGdiArcInternal(4, hDC, 0, 0, 0, 0, 0, 0, 0, 0) == FALSE);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(NtGdiArcInternal(4, (HDC)10, 0, 0, 0, 0, 0, 0, 0, 0) == FALSE);\r
-       TEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(NtGdiArcInternal(0, hDC, 10, 10, 0, 0, 0, 0, 0, 0) == TRUE);\r
-       TEST(NtGdiArcInternal(0, hDC, 10, 10, -10, -10, 0, 0, 0, 0) == TRUE);\r
-       TEST(NtGdiArcInternal(0, hDC, 0, 0, 0, 0, 10, 0, -10, 0) == TRUE);\r
-\r
-// was passiert, wenn left > right ? einfach tauschen?\r
-\r
-\r
-       DeleteDC(hDC);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
+INT
+Test_NtGdiArcInternal(PTESTINFO pti)
+{
+       HDC hDC = CreateDCW(L"Display",NULL,NULL,NULL);
+
+       SetLastError(ERROR_SUCCESS);
+       TEST(NtGdiArcInternal(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) == FALSE);
+       TEST(GetLastError() == ERROR_INVALID_HANDLE);
+
+       SetLastError(ERROR_SUCCESS);
+       TEST(NtGdiArcInternal(0, hDC, 0, 0, 0, 0, 0, 0, 0, 0) == TRUE);
+       TEST(NtGdiArcInternal(1, hDC, 0, 0, 0, 0, 0, 0, 0, 0) == TRUE);
+       TEST(NtGdiArcInternal(2, hDC, 0, 0, 0, 0, 0, 0, 0, 0) == TRUE);
+       TEST(NtGdiArcInternal(3, hDC, 0, 0, 0, 0, 0, 0, 0, 0) == TRUE);
+       TEST(GetLastError() == ERROR_SUCCESS);
+
+       SetLastError(ERROR_SUCCESS);
+       TEST(NtGdiArcInternal(4, hDC, 0, 0, 0, 0, 0, 0, 0, 0) == FALSE);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       SetLastError(ERROR_SUCCESS);
+       TEST(NtGdiArcInternal(4, (HDC)10, 0, 0, 0, 0, 0, 0, 0, 0) == FALSE);
+       TEST(GetLastError() == ERROR_INVALID_HANDLE);
+
+       SetLastError(ERROR_SUCCESS);
+       TEST(NtGdiArcInternal(0, hDC, 10, 10, 0, 0, 0, 0, 0, 0) == TRUE);
+       TEST(NtGdiArcInternal(0, hDC, 10, 10, -10, -10, 0, 0, 0, 0) == TRUE);
+       TEST(NtGdiArcInternal(0, hDC, 0, 0, 0, 0, 10, 0, -10, 0) == TRUE);
+
+// was passiert, wenn left > right ? einfach tauschen?
+
+
+       DeleteDC(hDC);
+
+       return APISTATUS_NORMAL;
+}
index 5f8d923..6018855 100644 (file)
-INT\r
-Test_NtGdiCreateBitmap_Params(PTESTINFO pti)\r
-{\r
-       HBITMAP hBmp;\r
-       BITMAP bitmap;\r
-       BYTE BitmapData[10] = {0x11, 0x22, 0x33};\r
-\r
-       /* Test simple params */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 1, NULL)) != NULL);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-       DeleteObject(hBmp);\r
-\r
-       /* Test all zero */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(NtGdiCreateBitmap(0, 0, 0, 0, NULL) == NULL);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       /* Test cx == 0 */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(NtGdiCreateBitmap(0, 1, 1, 1, NULL) == NULL);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       /* Test negative cx */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(NtGdiCreateBitmap(-10, 1, 1, 1, NULL) == NULL);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       /* Test cy == 0 */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(NtGdiCreateBitmap(1, 0, 1, 1, NULL) == NULL);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       /* Test negative cy */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(NtGdiCreateBitmap(1, -2, 1, 1, NULL) == NULL);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       /* Test negative cy */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(NtGdiCreateBitmap(1, -2, 1, 1, BitmapData) == NULL);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       /* Test huge size */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(NtGdiCreateBitmap(100000, 100000, 1, 1, NULL) == NULL);\r
-       TEST(GetLastError() == ERROR_NOT_ENOUGH_MEMORY);\r
-\r
-       /* Test cPlanes == 0 */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST((hBmp = NtGdiCreateBitmap(1, 1, 0, 1, NULL)) != NULL);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));\r
-       TEST(bitmap.bmType == 0);\r
-       TEST(bitmap.bmWidth == 1);\r
-       TEST(bitmap.bmHeight == 1);\r
-       TEST(bitmap.bmWidthBytes == 2);\r
-       TEST(bitmap.bmPlanes == 1);\r
-       TEST(bitmap.bmBitsPixel == 1);\r
-       DeleteObject(hBmp);\r
-\r
-       /* Test big cPlanes */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST((hBmp = NtGdiCreateBitmap(1, 1, 32, 1, NULL)) != NULL);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-       DeleteObject(hBmp);\r
-\r
-       TEST(NtGdiCreateBitmap(1, 1, 33, 1, NULL) == NULL);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       /* Test cBPP == 0 */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 0, NULL)) != NULL);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));\r
-       TEST(bitmap.bmType == 0);\r
-       TEST(bitmap.bmWidth == 1);\r
-       TEST(bitmap.bmHeight == 1);\r
-       TEST(bitmap.bmWidthBytes == 2);\r
-       TEST(bitmap.bmPlanes == 1);\r
-       TEST(bitmap.bmBitsPixel == 1);\r
-       DeleteObject(hBmp);\r
-\r
-       /* Test negative cBPP */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(NtGdiCreateBitmap(1, 1, 1, -1, NULL) == NULL);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       /* Test bad cBPP */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 3, NULL)) != NULL);\r
-       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));\r
-       TEST(bitmap.bmBitsPixel == 4);\r
-       DeleteObject(hBmp);\r
-\r
-       TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 6, NULL)) != NULL);\r
-       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));\r
-       TEST(bitmap.bmBitsPixel == 8);\r
-       DeleteObject(hBmp);\r
-\r
-       TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 15, NULL)) != NULL);\r
-       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));\r
-       TEST(bitmap.bmBitsPixel == 16);\r
-       DeleteObject(hBmp);\r
-\r
-       TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 17, NULL)) != NULL);\r
-       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));\r
-       TEST(bitmap.bmBitsPixel == 24);\r
-       DeleteObject(hBmp);\r
-\r
-       TEST((hBmp = NtGdiCreateBitmap(1, 1, 3, 7, NULL)) != NULL);\r
-       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));\r
-       TEST(bitmap.bmBitsPixel == 24);\r
-       DeleteObject(hBmp);\r
-\r
-       TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 25, NULL)) != NULL);\r
-       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));\r
-       TEST(bitmap.bmBitsPixel == 32);\r
-       DeleteObject(hBmp);\r
-\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       TEST(NtGdiCreateBitmap(1, 1, 1, 33, NULL) == NULL);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       /* Test bad pointer */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(NtGdiCreateBitmap(1, 1, 1, 1, (BYTE*)0x80001234) == NULL);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       /* Test pointer alignment */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 1, &BitmapData[1])) != NULL);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-       DeleteObject(hBmp);\r
-\r
-       /* Test normal params */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST((hBmp = NtGdiCreateBitmap(5, 7, 2, 4, NULL)) != NULL);\r
-       TEST(GetLastError() == ERROR_SUCCESS);\r
-       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));\r
-       TEST(bitmap.bmType == 0);\r
-       TEST(bitmap.bmWidth == 5);\r
-       TEST(bitmap.bmHeight == 7);\r
-       TEST(bitmap.bmWidthBytes == 6);\r
-       TEST(bitmap.bmPlanes == 1);\r
-       TEST(bitmap.bmBitsPixel == 8);\r
-       DeleteObject(hBmp);\r
-\r
-\r
-       /* Test height 0 params */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST((hBmp = NtGdiCreateBitmap(1, 0, 1, 1, NULL)) == NULL);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       /* Test height -1 params */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST((hBmp = NtGdiCreateBitmap(1, -1, 1, 1, NULL)) == NULL);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       /* Test witdth 0 params */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST((hBmp = NtGdiCreateBitmap(0, 1, 1, 1, NULL)) == NULL);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-       /* Test witdth -1 params */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST((hBmp = NtGdiCreateBitmap(-1, 0, 1, 1, NULL)) == NULL);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-\r
-    /* Test witdth -1 params */\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST((hBmp = NtGdiCreateBitmap(0, 0, 1, 1, NULL)) == NULL);\r
-       TEST(GetLastError() == ERROR_INVALID_PARAMETER);\r
-\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
-\r
-INT\r
-Test_NtGdiCreateBitmap(PTESTINFO pti)\r
-{\r
-       INT ret;\r
-\r
-       ret = Test_NtGdiCreateBitmap_Params(pti);\r
-       if (ret != APISTATUS_NORMAL)\r
-               return ret;\r
-\r
-//     ret = Test_NtGdiCreateBitmap_Pixel(pti);\r
-//     if (ret != APISTATUS_NORMAL)\r
-//             return ret;\r
-\r
-       return APISTATUS_NORMAL;\r
-\r
-}\r
+INT
+Test_NtGdiCreateBitmap_Params(PTESTINFO pti)
+{
+       HBITMAP hBmp;
+       BITMAP bitmap;
+       BYTE BitmapData[10] = {0x11, 0x22, 0x33};
+
+       /* Test simple params */
+       SetLastError(ERROR_SUCCESS);
+       TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 1, NULL)) != NULL);
+       TEST(GetLastError() == ERROR_SUCCESS);
+       DeleteObject(hBmp);
+
+       /* Test all zero */
+       SetLastError(ERROR_SUCCESS);
+       TEST(NtGdiCreateBitmap(0, 0, 0, 0, NULL) == NULL);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       /* Test cx == 0 */
+       SetLastError(ERROR_SUCCESS);
+       TEST(NtGdiCreateBitmap(0, 1, 1, 1, NULL) == NULL);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       /* Test negative cx */
+       SetLastError(ERROR_SUCCESS);
+       TEST(NtGdiCreateBitmap(-10, 1, 1, 1, NULL) == NULL);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       /* Test cy == 0 */
+       SetLastError(ERROR_SUCCESS);
+       TEST(NtGdiCreateBitmap(1, 0, 1, 1, NULL) == NULL);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       /* Test negative cy */
+       SetLastError(ERROR_SUCCESS);
+       TEST(NtGdiCreateBitmap(1, -2, 1, 1, NULL) == NULL);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       /* Test negative cy */
+       SetLastError(ERROR_SUCCESS);
+       TEST(NtGdiCreateBitmap(1, -2, 1, 1, BitmapData) == NULL);
+       TEST(GetLastError() == ERROR_SUCCESS);
+
+       /* Test huge size */
+       SetLastError(ERROR_SUCCESS);
+       TEST(NtGdiCreateBitmap(100000, 100000, 1, 1, NULL) == NULL);
+       TEST(GetLastError() == ERROR_NOT_ENOUGH_MEMORY);
+
+       /* Test cPlanes == 0 */
+       SetLastError(ERROR_SUCCESS);
+       TEST((hBmp = NtGdiCreateBitmap(1, 1, 0, 1, NULL)) != NULL);
+       TEST(GetLastError() == ERROR_SUCCESS);
+       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
+       TEST(bitmap.bmType == 0);
+       TEST(bitmap.bmWidth == 1);
+       TEST(bitmap.bmHeight == 1);
+       TEST(bitmap.bmWidthBytes == 2);
+       TEST(bitmap.bmPlanes == 1);
+       TEST(bitmap.bmBitsPixel == 1);
+       DeleteObject(hBmp);
+
+       /* Test big cPlanes */
+       SetLastError(ERROR_SUCCESS);
+       TEST((hBmp = NtGdiCreateBitmap(1, 1, 32, 1, NULL)) != NULL);
+       TEST(GetLastError() == ERROR_SUCCESS);
+       DeleteObject(hBmp);
+
+       TEST(NtGdiCreateBitmap(1, 1, 33, 1, NULL) == NULL);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       /* Test cBPP == 0 */
+       SetLastError(ERROR_SUCCESS);
+       TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 0, NULL)) != NULL);
+       TEST(GetLastError() == ERROR_SUCCESS);
+       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
+       TEST(bitmap.bmType == 0);
+       TEST(bitmap.bmWidth == 1);
+       TEST(bitmap.bmHeight == 1);
+       TEST(bitmap.bmWidthBytes == 2);
+       TEST(bitmap.bmPlanes == 1);
+       TEST(bitmap.bmBitsPixel == 1);
+       DeleteObject(hBmp);
+
+       /* Test negative cBPP */
+       SetLastError(ERROR_SUCCESS);
+       TEST(NtGdiCreateBitmap(1, 1, 1, -1, NULL) == NULL);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       /* Test bad cBPP */
+       SetLastError(ERROR_SUCCESS);
+       TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 3, NULL)) != NULL);
+       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
+       TEST(bitmap.bmBitsPixel == 4);
+       DeleteObject(hBmp);
+
+       TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 6, NULL)) != NULL);
+       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
+       TEST(bitmap.bmBitsPixel == 8);
+       DeleteObject(hBmp);
+
+       TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 15, NULL)) != NULL);
+       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
+       TEST(bitmap.bmBitsPixel == 16);
+       DeleteObject(hBmp);
+
+       TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 17, NULL)) != NULL);
+       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
+       TEST(bitmap.bmBitsPixel == 24);
+       DeleteObject(hBmp);
+
+       TEST((hBmp = NtGdiCreateBitmap(1, 1, 3, 7, NULL)) != NULL);
+       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
+       TEST(bitmap.bmBitsPixel == 24);
+       DeleteObject(hBmp);
+
+       TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 25, NULL)) != NULL);
+       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
+       TEST(bitmap.bmBitsPixel == 32);
+       DeleteObject(hBmp);
+
+       TEST(GetLastError() == ERROR_SUCCESS);
+
+       TEST(NtGdiCreateBitmap(1, 1, 1, 33, NULL) == NULL);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       /* Test bad pointer */
+       SetLastError(ERROR_SUCCESS);
+       TEST(NtGdiCreateBitmap(1, 1, 1, 1, (BYTE*)0x80001234) == NULL);
+       TEST(GetLastError() == ERROR_SUCCESS);
+
+       /* Test pointer alignment */
+       SetLastError(ERROR_SUCCESS);
+       TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 1, &BitmapData[1])) != NULL);
+       TEST(GetLastError() == ERROR_SUCCESS);
+       DeleteObject(hBmp);
+
+       /* Test normal params */
+       SetLastError(ERROR_SUCCESS);
+       TEST((hBmp = NtGdiCreateBitmap(5, 7, 2, 4, NULL)) != NULL);
+       TEST(GetLastError() == ERROR_SUCCESS);
+       ASSERT(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
+       TEST(bitmap.bmType == 0);
+       TEST(bitmap.bmWidth == 5);
+       TEST(bitmap.bmHeight == 7);
+       TEST(bitmap.bmWidthBytes == 6);
+       TEST(bitmap.bmPlanes == 1);
+       TEST(bitmap.bmBitsPixel == 8);
+       DeleteObject(hBmp);
+
+
+       /* Test height 0 params */
+       SetLastError(ERROR_SUCCESS);
+       TEST((hBmp = NtGdiCreateBitmap(1, 0, 1, 1, NULL)) == NULL);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       /* Test height -1 params */
+       SetLastError(ERROR_SUCCESS);
+       TEST((hBmp = NtGdiCreateBitmap(1, -1, 1, 1, NULL)) == NULL);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       /* Test witdth 0 params */
+       SetLastError(ERROR_SUCCESS);
+       TEST((hBmp = NtGdiCreateBitmap(0, 1, 1, 1, NULL)) == NULL);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+       /* Test witdth -1 params */
+       SetLastError(ERROR_SUCCESS);
+       TEST((hBmp = NtGdiCreateBitmap(-1, 0, 1, 1, NULL)) == NULL);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+
+    /* Test witdth -1 params */
+       SetLastError(ERROR_SUCCESS);
+       TEST((hBmp = NtGdiCreateBitmap(0, 0, 1, 1, NULL)) == NULL);
+       TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+
+       return APISTATUS_NORMAL;
+}
+
+INT
+Test_NtGdiCreateBitmap(PTESTINFO pti)
+{
+       INT ret;
+
+       ret = Test_NtGdiCreateBitmap_Params(pti);
+       if (ret != APISTATUS_NORMAL)
+               return ret;
+
+//     ret = Test_NtGdiCreateBitmap_Pixel(pti);
+//     if (ret != APISTATUS_NORMAL)
+//             return ret;
+
+       return APISTATUS_NORMAL;
+
+}
index 045c12f..a7315c9 100644 (file)
@@ -1,6 +1,6 @@
-\r
-INT\r
-Test_NtGdiCreateCompatibleBitmap(PTESTINFO pti)\r
-{\r
-       return APISTATUS_NORMAL;\r
-}\r
+
+INT
+Test_NtGdiCreateCompatibleBitmap(PTESTINFO pti)
+{
+       return APISTATUS_NORMAL;
+}
index 6331d71..a172554 100644 (file)
-HPALETTE\r
-CreateTestPalette()\r
-{\r
-       struct\r
-       {\r
-               LOGPALETTE logpal;\r
-               PALETTEENTRY entry[5];\r
-       } palstruct =\r
-       { {0x300,5,\r
-         { {1,2,3,0} }},\r
-         { {22,33,44,PC_RESERVED},\r
-           {11,55,77,PC_EXPLICIT},\r
-           {00,77,66,PC_RESERVED | PC_NOCOLLAPSE},\r
-           {12,34,56,78}} };\r
-\r
-       return CreatePalette((LOGPALETTE*)&palstruct);\r
-}\r
-\r
-INT\r
-Test_NtGdiDoPalette_GdiPalAnimate(PTESTINFO pti)\r
-{\r
-       HPALETTE hPal;\r
-       PALETTEENTRY palEntries[5] = {\r
-               {0,0,0,0},\r
-               {0xff,0xff,0xff,0},\r
-               {0x33,0x66,0x99,0},\r
-               {0x25,0x84,0x14,0},\r
-               {0x12,0x34,0x56,0x11}};\r
-       PALETTEENTRY palEntries2[5];\r
-\r
-       /* Test stock palette */\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiDoPalette(GetStockObject(DEFAULT_PALETTE), 0, 1, palEntries, GdiPalAnimate, FALSE) == 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-\r
-       /* Test pEntries = NULL */\r
-       hPal = CreateTestPalette();\r
-       RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalAnimate, TRUE) == 0);\r
-       RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalAnimate, FALSE) == 0);\r
-       DeleteObject(hPal);\r
-\r
-       /* Test PC_RESERVED */\r
-       hPal = CreateTestPalette();\r
-       RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalAnimate, TRUE) == 2);\r
-       DeleteObject(hPal);\r
-\r
-       hPal = CreateTestPalette();\r
-       RTEST(NtGdiDoPalette(hPal, 1, 5, palEntries, GdiPalAnimate, TRUE) == 2);\r
-       DeleteObject(hPal);\r
-\r
-       hPal = CreateTestPalette();\r
-       RTEST(NtGdiDoPalette(hPal, 2, 5, palEntries, GdiPalAnimate, TRUE) == 1);\r
-       DeleteObject(hPal);\r
-\r
-       hPal = CreateTestPalette();\r
-       RTEST(NtGdiDoPalette(hPal, 3, 5, palEntries, GdiPalAnimate, TRUE) == 1);\r
-       DeleteObject(hPal);\r
-\r
-       hPal = CreateTestPalette();\r
-       RTEST(NtGdiDoPalette(hPal, 4, 5, palEntries, GdiPalAnimate, TRUE) == 0);\r
-       DeleteObject(hPal);\r
-\r
-       hPal = CreateTestPalette();\r
-       RTEST(NtGdiDoPalette(hPal, 5, 5, palEntries, GdiPalAnimate, TRUE) == 0);\r
-       DeleteObject(hPal);\r
-\r
-       hPal = CreateTestPalette();\r
-       RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalAnimate, FALSE) == 2);\r
-       DeleteObject(hPal);\r
-\r
-       hPal = CreateTestPalette();\r
-       RTEST(NtGdiDoPalette(hPal, 3, 5, palEntries, GdiPalAnimate, FALSE) == 1);\r
-       DeleteObject(hPal);\r
-\r
-       /* Test if entries are set correctly */\r
-       hPal = CreateTestPalette();\r
-       NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalAnimate, TRUE);\r
-       NtGdiDoPalette(hPal, 0, 5, palEntries2, GdiPalGetEntries, FALSE);\r
-       RTEST(palEntries2[0].peRed == 1);\r
-       RTEST(palEntries2[0].peGreen == 2);\r
-       RTEST(palEntries2[0].peBlue == 3);\r
-       RTEST(palEntries2[0].peFlags == 0);\r
-       RTEST(palEntries2[1].peRed == palEntries[1].peRed);\r
-       RTEST(palEntries2[1].peGreen == palEntries[1].peGreen);\r
-       RTEST(palEntries2[1].peBlue == palEntries[1].peBlue);\r
-       RTEST(palEntries2[1].peFlags == palEntries[1].peFlags);\r
-       RTEST(palEntries2[2].peRed == 11);\r
-       RTEST(palEntries2[2].peGreen == 55);\r
-       RTEST(palEntries2[2].peBlue == 77);\r
-       TEST(palEntries2[2].peFlags == PC_EXPLICIT);\r
-       RTEST(palEntries2[3].peRed == palEntries[3].peRed);\r
-       RTEST(palEntries2[3].peGreen == palEntries[3].peGreen);\r
-       RTEST(palEntries2[3].peBlue == palEntries[3].peBlue);\r
-       RTEST(palEntries2[3].peFlags == palEntries[3].peFlags);\r
-       DeleteObject(hPal);\r
-\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
-\r
-INT\r
-Test_NtGdiDoPalette_GdiPalSetEntries(PTESTINFO pti)\r
-{\r
-       HPALETTE hPal;\r
-       PALETTEENTRY palEntries[5] = {\r
-               {0,0,0,0},\r
-               {0xff,0xff,0xff,0},\r
-               {0x33,0x66,0x99,0},\r
-               {0x25,0x84,0x14,0},\r
-               {0x12,0x34,0x56,0x11}};\r
-       PALETTEENTRY palEntries2[5];\r
-\r
-       hPal = CreateTestPalette();\r
-\r
-       /* Test invalid handle */\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiDoPalette((HPALETTE)23, 0, 1, palEntries, GdiPalSetEntries, TRUE) == 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       /* Test system palette */\r
-       RTEST(NtGdiDoPalette(GetStockObject(DEFAULT_PALETTE), 0, 1, palEntries, GdiPalSetEntries, TRUE) == 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       RTEST(NtGdiDoPalette(hPal, 0, 1, palEntries, GdiPalSetEntries, TRUE) == 1);\r
-       RTEST(NtGdiDoPalette(hPal, 0, 2, palEntries, GdiPalSetEntries, TRUE) == 2);\r
-       RTEST(NtGdiDoPalette(hPal, 0, 3, palEntries, GdiPalSetEntries, TRUE) == 3);\r
-       RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalSetEntries, TRUE) == 5);\r
-       RTEST(NtGdiDoPalette(hPal, 0, 6, palEntries, GdiPalSetEntries, TRUE) == 5);\r
-       RTEST(NtGdiDoPalette(hPal, 3, 6, palEntries, GdiPalSetEntries, TRUE) == 2);\r
-//     TEST(NtGdiDoPalette(hPal, 4, 23247, palEntries, GdiPalSetEntries, TRUE) == 0);\r
-\r
-       /* Test bInbound == FALSE */\r
-       NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalSetEntries, TRUE);\r
-       ZeroMemory(palEntries2, sizeof(palEntries2));\r
-       RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries2, GdiPalSetEntries, FALSE) == 5);\r
-       /* we should get the old values returned in our buffer! */\r
-       TEST(memcmp(palEntries2, palEntries, sizeof(palEntries)) == 0);\r
-\r
-       /* check what we have in our palette now */\r
-       ZeroMemory(palEntries2, sizeof(palEntries2));\r
-       RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries2, GdiPalGetEntries, FALSE) == 5);\r
-       TEST(memcmp(palEntries2, palEntries, sizeof(palEntries)) == 0);\r
-\r
-       RTEST(NtGdiDoPalette(hPal, 0, 4, palEntries2, GdiPalSetEntries, TRUE) == 4);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       /* Test if entries are set correctly */\r
-       hPal = CreateTestPalette();\r
-       NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalSetEntries, TRUE);\r
-       NtGdiDoPalette(hPal, 0, 5, palEntries2, GdiPalGetEntries, FALSE);\r
-       RTEST(palEntries2[0].peRed == 0);\r
-       RTEST(palEntries2[0].peGreen == 0);\r
-       RTEST(palEntries2[0].peBlue == 0);\r
-       RTEST(palEntries2[0].peFlags == 0);\r
-\r
-       /* Test that the buffer was not changed */\r
-\r
-       /* Test pEntries = NULL */\r
-       RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalGetEntries, TRUE) == 0);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
-\r
-INT\r
-Test_NtGdiDoPalette_GdiPalGetEntries(PTESTINFO pti)\r
-{\r
-       HPALETTE hPal;\r
-\r
-       hPal = CreateTestPalette();\r
-\r
-       /* Test pEntries = NULL */\r
-       RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalGetEntries, TRUE) == 0);\r
-       RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalGetEntries, FALSE) == 5);\r
-       RTEST(NtGdiDoPalette(hPal, 2, 1, NULL, GdiPalGetEntries, FALSE) == 5);\r
-       RTEST(NtGdiDoPalette(hPal, 20, 1, NULL, GdiPalGetEntries, FALSE) == 5);\r
-       RTEST(NtGdiDoPalette(hPal, -20, 1, NULL, GdiPalGetEntries, FALSE) == 5);\r
-       RTEST(NtGdiDoPalette(hPal, 2, 0, NULL, GdiPalGetEntries, FALSE) == 5);\r
-\r
-\r
-// Test flags 0xf0\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
-\r
-INT\r
-Test_NtGdiDoPalette_GetSystemPalette(PTESTINFO pti)\r
-{\r
-       return APISTATUS_NORMAL;\r
-}\r
-\r
-INT\r
-Test_NtGdiDoPalette_GetBIBColorTable(PTESTINFO pti)\r
-{\r
-       return APISTATUS_NORMAL;\r
-}\r
-\r
-INT\r
-Test_NtGdiDoPalette_SetDIBColorTable(PTESTINFO pti)\r
-{\r
-       return APISTATUS_NORMAL;\r
-}\r
-\r
-\r
-INT\r
-Test_NtGdiDoPalette(PTESTINFO pti)\r
-{\r
-       INT ret;\r
-\r
-       ret = Test_NtGdiDoPalette_GdiPalAnimate(pti);\r
-       if (ret != APISTATUS_NORMAL)\r
-       {\r
-               return ret;\r
-       }\r
-\r
-       ret = Test_NtGdiDoPalette_GdiPalSetEntries(pti);\r
-       if (ret != APISTATUS_NORMAL)\r
-       {\r
-               return ret;\r
-       }\r
-\r
-       ret = Test_NtGdiDoPalette_GdiPalGetEntries(pti);\r
-       if (ret != APISTATUS_NORMAL)\r
-       {\r
-               return ret;\r
-       }\r
-\r
-       ret = Test_NtGdiDoPalette_GetSystemPalette(pti);\r
-       if (ret != APISTATUS_NORMAL)\r
-       {\r
-               return ret;\r
-       }\r
-\r
-       ret = Test_NtGdiDoPalette_GetBIBColorTable(pti);\r
-       if (ret != APISTATUS_NORMAL)\r
-       {\r
-               return ret;\r
-       }\r
-\r
-       ret = Test_NtGdiDoPalette_SetDIBColorTable(pti);\r
-       if (ret != APISTATUS_NORMAL)\r
-       {\r
-               return ret;\r
-       }\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
+HPALETTE
+CreateTestPalette()
+{
+       struct
+       {
+               LOGPALETTE logpal;
+               PALETTEENTRY entry[5];
+       } palstruct =
+       { {0x300,5,
+         { {1,2,3,0} }},
+         { {22,33,44,PC_RESERVED},
+           {11,55,77,PC_EXPLICIT},
+           {00,77,66,PC_RESERVED | PC_NOCOLLAPSE},
+           {12,34,56,78}} };
+
+       return CreatePalette((LOGPALETTE*)&palstruct);
+}
+
+INT
+Test_NtGdiDoPalette_GdiPalAnimate(PTESTINFO pti)
+{
+       HPALETTE hPal;
+       PALETTEENTRY palEntries[5] = {
+               {0,0,0,0},
+               {0xff,0xff,0xff,0},
+               {0x33,0x66,0x99,0},
+               {0x25,0x84,0x14,0},
+               {0x12,0x34,0x56,0x11}};
+       PALETTEENTRY palEntries2[5];
+
+       /* Test stock palette */
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiDoPalette(GetStockObject(DEFAULT_PALETTE), 0, 1, palEntries, GdiPalAnimate, FALSE) == 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+
+       /* Test pEntries = NULL */
+       hPal = CreateTestPalette();
+       RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalAnimate, TRUE) == 0);
+       RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalAnimate, FALSE) == 0);
+       DeleteObject(hPal);
+
+       /* Test PC_RESERVED */
+       hPal = CreateTestPalette();
+       RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalAnimate, TRUE) == 2);
+       DeleteObject(hPal);
+
+       hPal = CreateTestPalette();
+       RTEST(NtGdiDoPalette(hPal, 1, 5, palEntries, GdiPalAnimate, TRUE) == 2);
+       DeleteObject(hPal);
+
+       hPal = CreateTestPalette();
+       RTEST(NtGdiDoPalette(hPal, 2, 5, palEntries, GdiPalAnimate, TRUE) == 1);
+       DeleteObject(hPal);
+
+       hPal = CreateTestPalette();
+       RTEST(NtGdiDoPalette(hPal, 3, 5, palEntries, GdiPalAnimate, TRUE) == 1);
+       DeleteObject(hPal);
+
+       hPal = CreateTestPalette();
+       RTEST(NtGdiDoPalette(hPal, 4, 5, palEntries, GdiPalAnimate, TRUE) == 0);
+       DeleteObject(hPal);
+
+       hPal = CreateTestPalette();
+       RTEST(NtGdiDoPalette(hPal, 5, 5, palEntries, GdiPalAnimate, TRUE) == 0);
+       DeleteObject(hPal);
+
+       hPal = CreateTestPalette();
+       RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalAnimate, FALSE) == 2);
+       DeleteObject(hPal);
+
+       hPal = CreateTestPalette();
+       RTEST(NtGdiDoPalette(hPal, 3, 5, palEntries, GdiPalAnimate, FALSE) == 1);
+       DeleteObject(hPal);
+
+       /* Test if entries are set correctly */
+       hPal = CreateTestPalette();
+       NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalAnimate, TRUE);
+       NtGdiDoPalette(hPal, 0, 5, palEntries2, GdiPalGetEntries, FALSE);
+       RTEST(palEntries2[0].peRed == 1);
+       RTEST(palEntries2[0].peGreen == 2);
+       RTEST(palEntries2[0].peBlue == 3);
+       RTEST(palEntries2[0].peFlags == 0);
+       RTEST(palEntries2[1].peRed == palEntries[1].peRed);
+       RTEST(palEntries2[1].peGreen == palEntries[1].peGreen);
+       RTEST(palEntries2[1].peBlue == palEntries[1].peBlue);
+       RTEST(palEntries2[1].peFlags == palEntries[1].peFlags);
+       RTEST(palEntries2[2].peRed == 11);
+       RTEST(palEntries2[2].peGreen == 55);
+       RTEST(palEntries2[2].peBlue == 77);
+       TEST(palEntries2[2].peFlags == PC_EXPLICIT);
+       RTEST(palEntries2[3].peRed == palEntries[3].peRed);
+       RTEST(palEntries2[3].peGreen == palEntries[3].peGreen);
+       RTEST(palEntries2[3].peBlue == palEntries[3].peBlue);
+       RTEST(palEntries2[3].peFlags == palEntries[3].peFlags);
+       DeleteObject(hPal);
+
+
+       return APISTATUS_NORMAL;
+}
+
+INT
+Test_NtGdiDoPalette_GdiPalSetEntries(PTESTINFO pti)
+{
+       HPALETTE hPal;
+       PALETTEENTRY palEntries[5] = {
+               {0,0,0,0},
+               {0xff,0xff,0xff,0},
+               {0x33,0x66,0x99,0},
+               {0x25,0x84,0x14,0},
+               {0x12,0x34,0x56,0x11}};
+       PALETTEENTRY palEntries2[5];
+
+       hPal = CreateTestPalette();
+
+       /* Test invalid handle */
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiDoPalette((HPALETTE)23, 0, 1, palEntries, GdiPalSetEntries, TRUE) == 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       /* Test system palette */
+       RTEST(NtGdiDoPalette(GetStockObject(DEFAULT_PALETTE), 0, 1, palEntries, GdiPalSetEntries, TRUE) == 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       RTEST(NtGdiDoPalette(hPal, 0, 1, palEntries, GdiPalSetEntries, TRUE) == 1);
+       RTEST(NtGdiDoPalette(hPal, 0, 2, palEntries, GdiPalSetEntries, TRUE) == 2);
+       RTEST(NtGdiDoPalette(hPal, 0, 3, palEntries, GdiPalSetEntries, TRUE) == 3);
+       RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalSetEntries, TRUE) == 5);
+       RTEST(NtGdiDoPalette(hPal, 0, 6, palEntries, GdiPalSetEntries, TRUE) == 5);
+       RTEST(NtGdiDoPalette(hPal, 3, 6, palEntries, GdiPalSetEntries, TRUE) == 2);
+//     TEST(NtGdiDoPalette(hPal, 4, 23247, palEntries, GdiPalSetEntries, TRUE) == 0);
+
+       /* Test bInbound == FALSE */
+       NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalSetEntries, TRUE);
+       ZeroMemory(palEntries2, sizeof(palEntries2));
+       RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries2, GdiPalSetEntries, FALSE) == 5);
+       /* we should get the old values returned in our buffer! */
+       TEST(memcmp(palEntries2, palEntries, sizeof(palEntries)) == 0);
+
+       /* check what we have in our palette now */
+       ZeroMemory(palEntries2, sizeof(palEntries2));
+       RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries2, GdiPalGetEntries, FALSE) == 5);
+       TEST(memcmp(palEntries2, palEntries, sizeof(palEntries)) == 0);
+
+       RTEST(NtGdiDoPalette(hPal, 0, 4, palEntries2, GdiPalSetEntries, TRUE) == 4);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       /* Test if entries are set correctly */
+       hPal = CreateTestPalette();
+       NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalSetEntries, TRUE);
+       NtGdiDoPalette(hPal, 0, 5, palEntries2, GdiPalGetEntries, FALSE);
+       RTEST(palEntries2[0].peRed == 0);
+       RTEST(palEntries2[0].peGreen == 0);
+       RTEST(palEntries2[0].peBlue == 0);
+       RTEST(palEntries2[0].peFlags == 0);
+
+       /* Test that the buffer was not changed */
+
+       /* Test pEntries = NULL */
+       RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalGetEntries, TRUE) == 0);
+
+       return APISTATUS_NORMAL;
+}
+
+INT
+Test_NtGdiDoPalette_GdiPalGetEntries(PTESTINFO pti)
+{
+       HPALETTE hPal;
+
+       hPal = CreateTestPalette();
+
+       /* Test pEntries = NULL */
+       RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalGetEntries, TRUE) == 0);
+       RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalGetEntries, FALSE) == 5);
+       RTEST(NtGdiDoPalette(hPal, 2, 1, NULL, GdiPalGetEntries, FALSE) == 5);
+       RTEST(NtGdiDoPalette(hPal, 20, 1, NULL, GdiPalGetEntries, FALSE) == 5);
+       RTEST(NtGdiDoPalette(hPal, -20, 1, NULL, GdiPalGetEntries, FALSE) == 5);
+       RTEST(NtGdiDoPalette(hPal, 2, 0, NULL, GdiPalGetEntries, FALSE) == 5);
+
+
+// Test flags 0xf0
+
+       return APISTATUS_NORMAL;
+}
+
+INT
+Test_NtGdiDoPalette_GetSystemPalette(PTESTINFO pti)
+{
+       return APISTATUS_NORMAL;
+}
+
+INT
+Test_NtGdiDoPalette_GetBIBColorTable(PTESTINFO pti)
+{
+       return APISTATUS_NORMAL;
+}
+
+INT
+Test_NtGdiDoPalette_SetDIBColorTable(PTESTINFO pti)
+{
+       return APISTATUS_NORMAL;
+}
+
+
+INT
+Test_NtGdiDoPalette(PTESTINFO pti)
+{
+       INT ret;
+
+       ret = Test_NtGdiDoPalette_GdiPalAnimate(pti);
+       if (ret != APISTATUS_NORMAL)
+       {
+               return ret;
+       }
+
+       ret = Test_NtGdiDoPalette_GdiPalSetEntries(pti);
+       if (ret != APISTATUS_NORMAL)
+       {
+               return ret;
+       }
+
+       ret = Test_NtGdiDoPalette_GdiPalGetEntries(pti);
+       if (ret != APISTATUS_NORMAL)
+       {
+               return ret;
+       }
+
+       ret = Test_NtGdiDoPalette_GetSystemPalette(pti);
+       if (ret != APISTATUS_NORMAL)
+       {
+               return ret;
+       }
+
+       ret = Test_NtGdiDoPalette_GetBIBColorTable(pti);
+       if (ret != APISTATUS_NORMAL)
+       {
+               return ret;
+       }
+
+       ret = Test_NtGdiDoPalette_SetDIBColorTable(pti);
+       if (ret != APISTATUS_NORMAL)
+       {
+               return ret;
+       }
+
+       return APISTATUS_NORMAL;
+}
index 52ebe97..5e2183c 100644 (file)
@@ -1,20 +1,20 @@
-\r
-INT\r
-Test_NtGdiEngCreatePalette(PTESTINFO pti)\r
-{\r
-       HPALETTE hPal;\r
-       ULONG Colors[3] = {1,2,3};\r
-       PGDI_TABLE_ENTRY pEntry;\r
-\r
-       hPal = NtGdiEngCreatePalette(PAL_RGB, 3, Colors, 0xff000000, 0x00ff0000, 0x0000ff00);\r
-\r
-       TEST(hPal != 0);\r
-       TEST(GDI_HANDLE_GET_TYPE(hPal) == GDI_OBJECT_TYPE_PALETTE);\r
-       pEntry = &GdiHandleTable[GDI_HANDLE_GET_INDEX(hPal)];\r
-       TEST(pEntry->KernelData != NULL);\r
-       TEST(pEntry->ProcessId == GetCurrentProcessId());\r
-       TEST(pEntry->UserData == 0);\r
-       TEST(pEntry->Type == (((UINT)hPal >> 16) | GDI_OBJECT_TYPE_PALETTE));\r
-\r
-    return APISTATUS_NORMAL;\r
-}\r
+
+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 == GetCurrentProcessId());
+       TEST(pEntry->UserData == 0);
+       TEST(pEntry->Type == (((UINT)hPal >> 16) | GDI_OBJECT_TYPE_PALETTE));
+
+    return APISTATUS_NORMAL;
+}
index 3ef0d01..c957493 100644 (file)
@@ -1,36 +1,36 @@
-\r
-INT\r
-Test_NtGdiEnumFontOpen(PTESTINFO pti)\r
-{\r
-       HDC hDC;\r
-       ULONG_PTR idEnum;\r
-       ULONG ulCount;\r
-       PGDI_TABLE_ENTRY pEntry;\r
-\r
-       hDC = CreateDCW(L"DISPLAY",NULL,NULL,NULL);\r
-\r
-       // FIXME: We should load the font first\r
-\r
-       idEnum = NtGdiEnumFontOpen(hDC, 2, 0, 32, L"Courier", ANSI_CHARSET, &ulCount);\r
-       ASSERT(idEnum != 0);\r
-\r
-       /* we should have a gdi handle here */\r
-       TEST(GDI_HANDLE_GET_TYPE(idEnum) == GDI_OBJECT_TYPE_ENUMFONT);\r
-       pEntry = &GdiHandleTable[GDI_HANDLE_GET_INDEX(idEnum)];\r
-       TEST(pEntry->KernelData != NULL);\r
-       TEST(pEntry->ProcessId == GetCurrentProcessId());\r
-       TEST(pEntry->UserData == 0);\r
-       TEST(pEntry->Type == ((idEnum >> 16) | GDI_OBJECT_TYPE_ENUMFONT));\r
-\r
-       /* We should not be able to use DeleteObject() on the handle */\r
-       TEST(DeleteObject((HGDIOBJ)idEnum) == FALSE);\r
-\r
-       NtGdiEnumFontClose(idEnum);\r
-\r
-       // Test no logfont (NULL): should word\r
-       // Test empty lfFaceName string: should not work\r
-\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
-\r
+
+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 == 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);
+
+       NtGdiEnumFontClose(idEnum);
+
+       // Test no logfont (NULL): should word
+       // Test empty lfFaceName string: should not work
+
+
+       return APISTATUS_NORMAL;
+}
+
index 09cb3dc..06c2b08 100644 (file)
@@ -1,62 +1,62 @@
-INT\r
-Test_NtGdiGetBitmapBits(PTESTINFO pti)\r
-{\r
-       BYTE Bits[50] = {0,1,2,3,4,5,6,7,8,9};\r
-       HBITMAP hBitmap;\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetBitmapBits(0, 0, 0) == 0);\r
-       RTEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-\r
-       /* Test NULL bitmap handle */\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetBitmapBits(0, 5, Bits) == 0);\r
-       RTEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-\r
-       /* Test invalid bitmap handle */\r
-       hBitmap = (HBITMAP)CreatePen(PS_SOLID, 1, RGB(1,2,3));\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetBitmapBits(hBitmap, 5, Bits) == 0);\r
-       RTEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-       DeleteObject(hBitmap);\r
-\r
-       hBitmap = CreateBitmap(3, 3, 1, 8, NULL);\r
-       SetLastError(ERROR_SUCCESS);\r
-\r
-       /* test NULL pointer and count buffer size != 0 */\r
-       RTEST(NtGdiGetBitmapBits(hBitmap, 5, NULL) == 12);\r
-\r
-       /* test NULL pointer and buffer size == 0*/\r
-       RTEST(NtGdiGetBitmapBits(hBitmap, 0, NULL) == 12);\r
-\r
-       /* test bad pointer */\r
-       RTEST(NtGdiGetBitmapBits(hBitmap, 5, (PBYTE)0x500) == 0);\r
-\r
-       /* Test if we can set a number of bytes between lines */\r
-       RTEST(NtGdiGetBitmapBits(hBitmap, 5, Bits) == 5);\r
-\r
-       /* Test alignment */\r
-       RTEST(NtGdiGetBitmapBits(hBitmap, 4, Bits+1) == 4);\r
-\r
-       /* Test 1 byte too much */\r
-       RTEST(NtGdiGetBitmapBits(hBitmap, 10, Bits) == 10);\r
-\r
-       /* Test one row too much */\r
-       RTEST(NtGdiGetBitmapBits(hBitmap, 12, Bits) == 12);\r
-\r
-       RTEST(NtGdiGetBitmapBits(hBitmap, 13, Bits) == 12);\r
-\r
-       RTEST(NtGdiGetBitmapBits(hBitmap, 100, Bits) == 12);\r
-\r
-       /* Test huge bytes count */\r
-       RTEST(NtGdiGetBitmapBits(hBitmap, 12345678, Bits) == 12);\r
-\r
-       /* Test negative bytes count */\r
-       RTEST(NtGdiGetBitmapBits(hBitmap, -5, Bits) == 12);\r
-\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       DeleteObject(hBitmap);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
+INT
+Test_NtGdiGetBitmapBits(PTESTINFO pti)
+{
+       BYTE Bits[50] = {0,1,2,3,4,5,6,7,8,9};
+       HBITMAP hBitmap;
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetBitmapBits(0, 0, 0) == 0);
+       RTEST(GetLastError() == ERROR_INVALID_HANDLE);
+
+       /* Test NULL bitmap handle */
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetBitmapBits(0, 5, Bits) == 0);
+       RTEST(GetLastError() == ERROR_INVALID_HANDLE);
+
+       /* Test invalid bitmap handle */
+       hBitmap = (HBITMAP)CreatePen(PS_SOLID, 1, RGB(1,2,3));
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetBitmapBits(hBitmap, 5, Bits) == 0);
+       RTEST(GetLastError() == ERROR_INVALID_HANDLE);
+       DeleteObject(hBitmap);
+
+       hBitmap = CreateBitmap(3, 3, 1, 8, NULL);
+       SetLastError(ERROR_SUCCESS);
+
+       /* test NULL pointer and count buffer size != 0 */
+       RTEST(NtGdiGetBitmapBits(hBitmap, 5, NULL) == 12);
+
+       /* test NULL pointer and buffer size == 0*/
+       RTEST(NtGdiGetBitmapBits(hBitmap, 0, NULL) == 12);
+
+       /* test bad pointer */
+       RTEST(NtGdiGetBitmapBits(hBitmap, 5, (PBYTE)0x500) == 0);
+
+       /* Test if we can set a number of bytes between lines */
+       RTEST(NtGdiGetBitmapBits(hBitmap, 5, Bits) == 5);
+
+       /* Test alignment */
+       RTEST(NtGdiGetBitmapBits(hBitmap, 4, Bits+1) == 4);
+
+       /* Test 1 byte too much */
+       RTEST(NtGdiGetBitmapBits(hBitmap, 10, Bits) == 10);
+
+       /* Test one row too much */
+       RTEST(NtGdiGetBitmapBits(hBitmap, 12, Bits) == 12);
+
+       RTEST(NtGdiGetBitmapBits(hBitmap, 13, Bits) == 12);
+
+       RTEST(NtGdiGetBitmapBits(hBitmap, 100, Bits) == 12);
+
+       /* Test huge bytes count */
+       RTEST(NtGdiGetBitmapBits(hBitmap, 12345678, Bits) == 12);
+
+       /* Test negative bytes count */
+       RTEST(NtGdiGetBitmapBits(hBitmap, -5, Bits) == 12);
+
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       DeleteObject(hBitmap);
+
+       return APISTATUS_NORMAL;
+}
index 3c93677..960b0d4 100644 (file)
-/* taken from gdi32, bitmap.c */\r
-UINT\r
-FASTCALL\r
-DIB_BitmapMaxBitsSize( PBITMAPINFO Info, UINT ScanLines )\r
-{\r
-    UINT MaxBits = 0;\r
-\r
-    if (Info->bmiHeader.biSize == sizeof(BITMAPCOREHEADER))\r
-    {\r
-       PBITMAPCOREHEADER Core = (PBITMAPCOREHEADER)Info;\r
-       MaxBits = Core->bcBitCount * Core->bcPlanes * Core->bcWidth;\r
-    }\r
-    else  /* assume BITMAPINFOHEADER */\r
-    {\r
-       if ((Info->bmiHeader.biCompression) && (Info->bmiHeader.biCompression != BI_BITFIELDS))\r
-           return Info->bmiHeader.biSizeImage;\r
-    // Planes are over looked by Yuan. I guess assumed always 1.\r
-       MaxBits = Info->bmiHeader.biBitCount * Info->bmiHeader.biPlanes * Info->bmiHeader.biWidth;\r
-    }\r
-    MaxBits = ((MaxBits + 31) & ~31 ) / 8; // From Yuan, ScanLineSize = (Width * bitcount + 31)/32\r
-    return (MaxBits * ScanLines);  // ret the full Size.\r
-}\r
-\r
-\r
-INT\r
-Test_NtGdiGetDIBitsInternal(PTESTINFO pti)\r
-{\r
-       HBITMAP hBitmap;\r
-       struct\r
-       {\r
-               BITMAPINFO bi;\r
-               RGBQUAD Colors[20];\r
-       } bmp;\r
-//     BITMAPINFO bi;\r
-       INT ScreenBpp;\r
-       BITMAPCOREINFO bic;\r
-       DWORD data[20*16];\r
-\r
-       HDC hDCScreen = GetDC(NULL);\r
-       ASSERT(hDCScreen != NULL);\r
-\r
-       hBitmap = CreateCompatibleBitmap(hDCScreen, 16, 16);\r
-       ASSERT(hBitmap != NULL);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetDIBitsInternal(0, 0, 0, 0, NULL, NULL, 0, 0, 0) == 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetDIBitsInternal((HDC)2345, 0, 0, 0, NULL, NULL, 0, 0, 0) == 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetDIBitsInternal((HDC)2345, hBitmap, 0, 0, NULL, NULL, 0, 0, 0) == 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 0, NULL, NULL, 0, 0, 0) == 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, NULL, NULL, 0, 0, 0) == 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       ZeroMemory(&bmp, sizeof(bmp));\r
-       bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\r
-       FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x44);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetDIBitsInternal((HDC)0, hBitmap, 0, 15, NULL, &bmp.bi, 0, 0, 0) > 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-       TEST(bmp.Colors[0].rgbRed == 0x44);\r
-\r
-       ZeroMemory(&bmp, sizeof(bmp));\r
-       bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\r
-       FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x44);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetDIBitsInternal((HDC)2345, hBitmap, 0, 15, NULL, &bmp.bi, 0, 0, 0) > 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-       TEST(bmp.Colors[0].rgbRed == 0x44);\r
-\r
-       ZeroMemory(&bmp, sizeof(bmp));\r
-       bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\r
-       FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x44);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, NULL, &bmp.bi, DIB_RGB_COLORS,\r
-                                                                DIB_BitmapMaxBitsSize(&bmp.bi, 15), 0) > 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       ScreenBpp = GetDeviceCaps(hDCScreen, BITSPIXEL);\r
-\r
-       RTEST(bmp.bi.bmiHeader.biWidth == 16);\r
-       RTEST(bmp.bi.bmiHeader.biHeight == 16);\r
-       RTEST(bmp.bi.bmiHeader.biBitCount == ScreenBpp);\r
-       RTEST(bmp.bi.bmiHeader.biSizeImage == (16 * 16) * (ScreenBpp / 8));\r
-\r
-       TEST(bmp.Colors[0].rgbRed == 0x44);\r
-\r
-       /* Test with pointer */\r
-//     ZeroMemory(&bmp.bi, sizeof(BITMAPINFO));\r
-       bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\r
-//     FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x11223344);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       TEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, (void*)data, &bmp.bi, DIB_RGB_COLORS,\r
-                                                                DIB_BitmapMaxBitsSize(&bmp.bi, 15), 0) > 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       RTEST(bmp.bi.bmiHeader.biWidth == 16);\r
-       RTEST(bmp.bi.bmiHeader.biHeight == 16);\r
-       RTEST(bmp.bi.bmiHeader.biBitCount == ScreenBpp);\r
-       RTEST(bmp.bi.bmiHeader.biSizeImage == (16 * 16) * (ScreenBpp / 8));\r
-\r
-       TEST(bmp.Colors[0].rgbRed != 0x44);\r
-\r
-       /* Test a BITMAPCOREINFO structure */\r
-       SetLastError(ERROR_SUCCESS);\r
-       ZeroMemory(&bic, sizeof(BITMAPCOREINFO));\r
-       bic.bmciHeader.bcSize = sizeof(BITMAPCOREHEADER);\r
-       TEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, NULL, (PBITMAPINFO)&bic, DIB_RGB_COLORS,\r
-                                                                DIB_BitmapMaxBitsSize((PBITMAPINFO)&bic, 15), 0) > 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-\r
-       ReleaseDC(NULL, hDCScreen);\r
-       DeleteObject(hBitmap);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
+/* taken from gdi32, bitmap.c */
+UINT
+FASTCALL
+DIB_BitmapMaxBitsSize( PBITMAPINFO Info, UINT ScanLines )
+{
+    UINT MaxBits = 0;
+
+    if (Info->bmiHeader.biSize == sizeof(BITMAPCOREHEADER))
+    {
+       PBITMAPCOREHEADER Core = (PBITMAPCOREHEADER)Info;
+       MaxBits = Core->bcBitCount * Core->bcPlanes * Core->bcWidth;
+    }
+    else  /* assume BITMAPINFOHEADER */
+    {
+       if ((Info->bmiHeader.biCompression) && (Info->bmiHeader.biCompression != BI_BITFIELDS))
+           return Info->bmiHeader.biSizeImage;
+    // Planes are over looked by Yuan. I guess assumed always 1.
+       MaxBits = Info->bmiHeader.biBitCount * Info->bmiHeader.biPlanes * Info->bmiHeader.biWidth;
+    }
+    MaxBits = ((MaxBits + 31) & ~31 ) / 8; // From Yuan, ScanLineSize = (Width * bitcount + 31)/32
+    return (MaxBits * ScanLines);  // ret the full Size.
+}
+
+
+INT
+Test_NtGdiGetDIBitsInternal(PTESTINFO pti)
+{
+       HBITMAP hBitmap;
+       struct
+       {
+               BITMAPINFO bi;
+               RGBQUAD Colors[20];
+       } bmp;
+//     BITMAPINFO bi;
+       INT ScreenBpp;
+       BITMAPCOREINFO bic;
+       DWORD data[20*16];
+
+       HDC hDCScreen = GetDC(NULL);
+       ASSERT(hDCScreen != NULL);
+
+       hBitmap = CreateCompatibleBitmap(hDCScreen, 16, 16);
+       ASSERT(hBitmap != NULL);
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetDIBitsInternal(0, 0, 0, 0, NULL, NULL, 0, 0, 0) == 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetDIBitsInternal((HDC)2345, 0, 0, 0, NULL, NULL, 0, 0, 0) == 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetDIBitsInternal((HDC)2345, hBitmap, 0, 0, NULL, NULL, 0, 0, 0) == 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 0, NULL, NULL, 0, 0, 0) == 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, NULL, NULL, 0, 0, 0) == 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       ZeroMemory(&bmp, sizeof(bmp));
+       bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+       FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x44);
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetDIBitsInternal((HDC)0, hBitmap, 0, 15, NULL, &bmp.bi, 0, 0, 0) > 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+       TEST(bmp.Colors[0].rgbRed == 0x44);
+
+       ZeroMemory(&bmp, sizeof(bmp));
+       bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+       FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x44);
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetDIBitsInternal((HDC)2345, hBitmap, 0, 15, NULL, &bmp.bi, 0, 0, 0) > 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+       TEST(bmp.Colors[0].rgbRed == 0x44);
+
+       ZeroMemory(&bmp, sizeof(bmp));
+       bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+       FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x44);
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, NULL, &bmp.bi, DIB_RGB_COLORS,
+                                                                DIB_BitmapMaxBitsSize(&bmp.bi, 15), 0) > 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       ScreenBpp = GetDeviceCaps(hDCScreen, BITSPIXEL);
+
+       RTEST(bmp.bi.bmiHeader.biWidth == 16);
+       RTEST(bmp.bi.bmiHeader.biHeight == 16);
+       RTEST(bmp.bi.bmiHeader.biBitCount == ScreenBpp);
+       RTEST(bmp.bi.bmiHeader.biSizeImage == (16 * 16) * (ScreenBpp / 8));
+
+       TEST(bmp.Colors[0].rgbRed == 0x44);
+
+       /* Test with pointer */
+//     ZeroMemory(&bmp.bi, sizeof(BITMAPINFO));
+       bmp.bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+//     FillMemory(&bmp.Colors, sizeof(bmp.Colors), 0x11223344);
+
+       SetLastError(ERROR_SUCCESS);
+       TEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, (void*)data, &bmp.bi, DIB_RGB_COLORS,
+                                                                DIB_BitmapMaxBitsSize(&bmp.bi, 15), 0) > 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       RTEST(bmp.bi.bmiHeader.biWidth == 16);
+       RTEST(bmp.bi.bmiHeader.biHeight == 16);
+       RTEST(bmp.bi.bmiHeader.biBitCount == ScreenBpp);
+       RTEST(bmp.bi.bmiHeader.biSizeImage == (16 * 16) * (ScreenBpp / 8));
+
+       TEST(bmp.Colors[0].rgbRed != 0x44);
+
+       /* Test a BITMAPCOREINFO structure */
+       SetLastError(ERROR_SUCCESS);
+       ZeroMemory(&bic, sizeof(BITMAPCOREINFO));
+       bic.bmciHeader.bcSize = sizeof(BITMAPCOREHEADER);
+       TEST(NtGdiGetDIBitsInternal(hDCScreen, hBitmap, 0, 15, NULL, (PBITMAPINFO)&bic, DIB_RGB_COLORS,
+                                                                DIB_BitmapMaxBitsSize((PBITMAPINFO)&bic, 15), 0) > 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+
+       ReleaseDC(NULL, hDCScreen);
+       DeleteObject(hBitmap);
+
+       return APISTATUS_NORMAL;
+}
index e52fb81..a666a19 100644 (file)
@@ -1,80 +1,80 @@
-INT\r
-Test_NtGdiGetRandomRgn(PTESTINFO pti)\r
-{\r
-       HWND hWnd;\r
-       HDC hDC;\r
-       HRGN hrgn, hrgn2;\r
-\r
-       /* Create a window */\r
-       hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE,\r
-                           CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,\r
-                           NULL, NULL, g_hInstance, 0);\r
-//     UpdateWindow(hWnd);\r
-       hDC = GetDC(hWnd);\r
-\r
-       ASSERT(hDC != NULL);\r
-\r
-       hrgn = CreateRectRgn(0,0,0,0);\r
-       hrgn2 = CreateRectRgn(3,3,10,10);\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetRandomRgn(0, hrgn, 0) == -1);\r
-       RTEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetRandomRgn((HDC)2345, hrgn, 1) == -1);\r
-       RTEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetRandomRgn((HDC)2345, hrgn, 10) == -1);\r
-       RTEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetRandomRgn((HDC)2345, (HRGN)10, 10) == -1);\r
-       RTEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetRandomRgn((HDC)2345, 0, 1) == -1);\r
-       RTEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiGetRandomRgn(hDC, 0, 0) == 0);\r
-       RTEST(NtGdiGetRandomRgn(hDC, 0, 1) == 0);\r
-       RTEST(NtGdiGetRandomRgn(hDC, (HRGN)-5, 0) == 0);\r
-       RTEST(NtGdiGetRandomRgn(hDC, (HRGN)-5, 1) == 0);\r
-       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 0) == 0);\r
-       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 0);\r
-       TEST(NtGdiGetRandomRgn(hDC, hrgn, 2) == 0);\r
-       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 3) == 0);\r
-       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 4) == 1);\r
-       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 5) == 0);\r
-       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 10) == 0);\r
-       RTEST(NtGdiGetRandomRgn(hDC, hrgn, -10) == 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       SelectClipRgn(hDC, hrgn2);\r
-       RTEST(NtGdiGetRandomRgn(hDC, 0, 1) == -1);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 1);\r
-       RTEST(CombineRgn(hrgn, hrgn, hrgn, RGN_OR) == SIMPLEREGION);\r
-       RTEST(CombineRgn(hrgn, hrgn, hrgn2, RGN_XOR) == NULLREGION);\r
-\r
-       SetRectRgn(hrgn2,0,0,0,0);\r
-       SelectClipRgn(hDC, hrgn2);\r
-       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 1);\r
-\r
-       RTEST(CombineRgn(hrgn2, hrgn, hrgn2, RGN_XOR) == NULLREGION);\r
-       RTEST(CombineRgn(hrgn2, hrgn, hrgn, RGN_OR) == NULLREGION);\r
-\r
-       SelectClipRgn(hDC, NULL);\r
-       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 0);\r
-\r
-\r
-       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 4) == 1);\r
-\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       ReleaseDC(hWnd, hDC);\r
-       DestroyWindow(hWnd);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
+INT
+Test_NtGdiGetRandomRgn(PTESTINFO pti)
+{
+       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);
+//     UpdateWindow(hWnd);
+       hDC = GetDC(hWnd);
+
+       ASSERT(hDC != NULL);
+
+       hrgn = CreateRectRgn(0,0,0,0);
+       hrgn2 = CreateRectRgn(3,3,10,10);
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetRandomRgn(0, hrgn, 0) == -1);
+       RTEST(GetLastError() == ERROR_INVALID_HANDLE);
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetRandomRgn((HDC)2345, hrgn, 1) == -1);
+       RTEST(GetLastError() == ERROR_INVALID_HANDLE);
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetRandomRgn((HDC)2345, hrgn, 10) == -1);
+       RTEST(GetLastError() == ERROR_INVALID_HANDLE);
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetRandomRgn((HDC)2345, (HRGN)10, 10) == -1);
+       RTEST(GetLastError() == ERROR_INVALID_HANDLE);
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetRandomRgn((HDC)2345, 0, 1) == -1);
+       RTEST(GetLastError() == ERROR_INVALID_HANDLE);
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiGetRandomRgn(hDC, 0, 0) == 0);
+       RTEST(NtGdiGetRandomRgn(hDC, 0, 1) == 0);
+       RTEST(NtGdiGetRandomRgn(hDC, (HRGN)-5, 0) == 0);
+       RTEST(NtGdiGetRandomRgn(hDC, (HRGN)-5, 1) == 0);
+       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 0) == 0);
+       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 0);
+       TEST(NtGdiGetRandomRgn(hDC, hrgn, 2) == 0);
+       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 3) == 0);
+       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 4) == 1);
+       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 5) == 0);
+       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 10) == 0);
+       RTEST(NtGdiGetRandomRgn(hDC, hrgn, -10) == 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       SelectClipRgn(hDC, hrgn2);
+       RTEST(NtGdiGetRandomRgn(hDC, 0, 1) == -1);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 1);
+       RTEST(CombineRgn(hrgn, hrgn, hrgn, RGN_OR) == SIMPLEREGION);
+       RTEST(CombineRgn(hrgn, hrgn, hrgn2, RGN_XOR) == NULLREGION);
+
+       SetRectRgn(hrgn2,0,0,0,0);
+       SelectClipRgn(hDC, hrgn2);
+       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 1);
+
+       RTEST(CombineRgn(hrgn2, hrgn, hrgn2, RGN_XOR) == NULLREGION);
+       RTEST(CombineRgn(hrgn2, hrgn, hrgn, RGN_OR) == NULLREGION);
+
+       SelectClipRgn(hDC, NULL);
+       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 0);
+
+
+       RTEST(NtGdiGetRandomRgn(hDC, hrgn, 4) == 1);
+
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       ReleaseDC(hWnd, hDC);
+       DestroyWindow(hWnd);
+
+       return APISTATUS_NORMAL;
+}
index 153e21b..466cfcb 100644 (file)
@@ -1,62 +1,62 @@
-INT\r
-Test_NtGdiSetBitmapBits(PTESTINFO pti)\r
-{\r
-       BYTE Bits[50] = {0,1,2,3,4,5,6,7,8,9};\r
-       HBITMAP hBitmap;\r
-\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiSetBitmapBits(0, 0, 0) == 0);\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       /* Test NULL bitnap handle */\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiSetBitmapBits(0, 5, Bits) == 0);\r
-       RTEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-\r
-       /* Test invalid bitmap handle */\r
-       hBitmap = (HBITMAP)CreatePen(PS_SOLID, 1, RGB(1,2,3));\r
-       SetLastError(ERROR_SUCCESS);\r
-       RTEST(NtGdiSetBitmapBits(hBitmap, 5, Bits) == 0);\r
-       RTEST(GetLastError() == ERROR_INVALID_HANDLE);\r
-       DeleteObject(hBitmap);\r
-\r
-       hBitmap = CreateBitmap(3, 3, 1, 8, NULL);\r
-       SetLastError(ERROR_SUCCESS);\r
-\r
-       /* test NULL pointer and count buffer size != 0 */\r
-       RTEST(NtGdiSetBitmapBits(hBitmap, 5, NULL) == 0);\r
-\r
-       /* test NULL pointer and buffer size == 0*/\r
-       RTEST(NtGdiSetBitmapBits(hBitmap, 0, NULL) == 0);\r
-\r
-       /* test bad pointer */\r
-       RTEST(NtGdiSetBitmapBits(hBitmap, 5, (PBYTE)0x500) == 0);\r
-\r
-       /* Test if we can set a number of bytes between lines */\r
-       RTEST(NtGdiSetBitmapBits(hBitmap, 5, Bits) == 5);\r
-\r
-       /* Test alignment */\r
-       RTEST(NtGdiSetBitmapBits(hBitmap, 4, Bits+1) == 4);\r
-\r
-       /* Test 1 byte too much */\r
-       RTEST(NtGdiSetBitmapBits(hBitmap, 10, Bits) == 10);\r
-\r
-       /* Test one row too much */\r
-       RTEST(NtGdiSetBitmapBits(hBitmap, 12, Bits) == 12);\r
-\r
-       RTEST(NtGdiSetBitmapBits(hBitmap, 13, Bits) == 12);\r
-\r
-       RTEST(NtGdiSetBitmapBits(hBitmap, 100, Bits) == 12);\r
-\r
-       /* Test huge bytes count */\r
-       TEST(NtGdiSetBitmapBits(hBitmap, 12345678, Bits) == 0);\r
-\r
-       /* Test negative bytes count */\r
-       RTEST(NtGdiSetBitmapBits(hBitmap, -5, Bits) == 0);\r
-\r
-       RTEST(GetLastError() == ERROR_SUCCESS);\r
-\r
-       DeleteObject(hBitmap);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
+INT
+Test_NtGdiSetBitmapBits(PTESTINFO pti)
+{
+       BYTE Bits[50] = {0,1,2,3,4,5,6,7,8,9};
+       HBITMAP hBitmap;
+
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiSetBitmapBits(0, 0, 0) == 0);
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       /* Test NULL bitnap handle */
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiSetBitmapBits(0, 5, Bits) == 0);
+       RTEST(GetLastError() == ERROR_INVALID_HANDLE);
+
+       /* Test invalid bitmap handle */
+       hBitmap = (HBITMAP)CreatePen(PS_SOLID, 1, RGB(1,2,3));
+       SetLastError(ERROR_SUCCESS);
+       RTEST(NtGdiSetBitmapBits(hBitmap, 5, Bits) == 0);
+       RTEST(GetLastError() == ERROR_INVALID_HANDLE);
+       DeleteObject(hBitmap);
+
+       hBitmap = CreateBitmap(3, 3, 1, 8, NULL);
+       SetLastError(ERROR_SUCCESS);
+
+       /* test NULL pointer and count buffer size != 0 */
+       RTEST(NtGdiSetBitmapBits(hBitmap, 5, NULL) == 0);
+
+       /* test NULL pointer and buffer size == 0*/
+       RTEST(NtGdiSetBitmapBits(hBitmap, 0, NULL) == 0);
+
+       /* test bad pointer */
+       RTEST(NtGdiSetBitmapBits(hBitmap, 5, (PBYTE)0x500) == 0);
+
+       /* Test if we can set a number of bytes between lines */
+       RTEST(NtGdiSetBitmapBits(hBitmap, 5, Bits) == 5);
+
+       /* Test alignment */
+       RTEST(NtGdiSetBitmapBits(hBitmap, 4, Bits+1) == 4);
+
+       /* Test 1 byte too much */
+       RTEST(NtGdiSetBitmapBits(hBitmap, 10, Bits) == 10);
+
+       /* Test one row too much */
+       RTEST(NtGdiSetBitmapBits(hBitmap, 12, Bits) == 12);
+
+       RTEST(NtGdiSetBitmapBits(hBitmap, 13, Bits) == 12);
+
+       RTEST(NtGdiSetBitmapBits(hBitmap, 100, Bits) == 12);
+
+       /* Test huge bytes count */
+       TEST(NtGdiSetBitmapBits(hBitmap, 12345678, Bits) == 0);
+
+       /* Test negative bytes count */
+       RTEST(NtGdiSetBitmapBits(hBitmap, -5, Bits) == 0);
+
+       RTEST(GetLastError() == ERROR_SUCCESS);
+
+       DeleteObject(hBitmap);
+
+       return APISTATUS_NORMAL;
+}
index 10600a3..98a45a4 100644 (file)
@@ -1,15 +1,15 @@
-/* First the call stub */\r
-DWORD STDCALL\r
-NtUserCountClipboardFormats(VOID)\r
-{\r
-       DWORD p;\r
-       return Syscall(L"NtUserCountClipboardFormats", 0, &p);\r
-}\r
-\r
-INT\r
-Test_NtUserCountClipboardFormats(PTESTINFO pti)\r
-{\r
-       RTEST(NtUserCountClipboardFormats() < 1000);\r
-       return APISTATUS_NORMAL;\r
-}\r
-\r
+/* First the call stub */
+DWORD STDCALL
+NtUserCountClipboardFormats(VOID)
+{
+       DWORD p;
+       return Syscall(L"NtUserCountClipboardFormats", 0, &p);
+}
+
+INT
+Test_NtUserCountClipboardFormats(PTESTINFO pti)
+{
+       RTEST(NtUserCountClipboardFormats() < 1000);
+       return APISTATUS_NORMAL;
+}
+
index aa0ac16..f6ba4f9 100644 (file)
@@ -1,7 +1,7 @@
-INT\r
-Test_NtUserFindExistingCursoricon(PTESTINFO pti)\r
-{\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
-\r
+INT
+Test_NtUserFindExistingCursoricon(PTESTINFO pti)
+{
+
+       return APISTATUS_NORMAL;
+}
+
index 6b288d2..5284e13 100644 (file)
@@ -1,30 +1,30 @@
-INT\r
-Test_NtUserRedrawWindow(PTESTINFO pti)\r
-{\r
-       HWND hWnd;\r
-       RECT rect;\r
-\r
-       hWnd = CreateWindowA("BUTTON",\r
-                            "Test",\r
-                            BS_PUSHBUTTON | WS_VISIBLE,\r
-                            0,\r
-                            0,\r
-                            50,\r
-                            30,\r
-                            NULL,\r
-                            NULL,\r
-                            g_hInstance,\r
-                            0);\r
-       ASSERT(hWnd);\r
-\r
-       rect.left = 0;\r
-       rect.top = 0;\r
-       rect.right = 10;\r
-       rect.bottom = 10;\r
-\r
-       TEST(NtUserRedrawWindow(hWnd, &rect, NULL, RDW_VALIDATE) == TRUE);\r
-\r
-       DestroyWindow(hWnd);\r
-\r
-       return APISTATUS_NORMAL;\r
-}\r
+INT
+Test_NtUserRedrawWindow(PTESTINFO pti)
+{
+       HWND hWnd;
+       RECT rect;
+
+       hWnd = CreateWindowA("BUTTON",
+                            "Test",
+                            BS_PUSHBUTTON | WS_VISIBLE,
+                            0,
+                            0,
+                            50,
+                            30,
+                            NULL,
+                            NULL,
+                            g_hInstance,
+                            0);
+       ASSERT(hWnd);
+
+       rect.left = 0;
+       rect.top = 0;
+       rect.right = 10;
+       rect.bottom = 10;
+
+       TEST(NtUserRedrawWindow(hWnd, &rect, NULL, RDW_VALIDATE) == TRUE);
+
+       DestroyWindow(hWnd);
+
+       return APISTATUS_NORMAL;
+}
index 112444d..b4e9b8b 100644 (file)
@@ -1,2 +1,2 @@
-\r
-#define IDI_ICON 1000\r
+
+#define IDI_ICON 1000
index aff2d37..987f903 100644 (file)
-#include "w32knapi.h"\r
-\r
-/* include the tests */\r
-\r
-#include "ntdd/NtGdiDdCreateDirectDrawObject.c"\r
-#include "ntdd/NtGdiDdDeleteDirectDrawObject.c"\r
-#include "ntdd/NtGdiDdQueryDirectDrawObject.c"\r
-\r
-#include "ntgdi/NtGdiArcInternal.c"\r
-#include "ntgdi/NtGdiBitBlt.c"\r
-#include "ntgdi/NtGdiCreateBitmap.c"\r
-#include "ntgdi/NtGdiCreateCompatibleBitmap.c"\r
-#include "ntgdi/NtGdiDoPalette.c"\r
-#include "ntgdi/NtGdiEngCreatePalette.c"\r
-//#include "ntgdi/NtGdiEnumFontChunk.c"\r
-#include "ntgdi/NtGdiEnumFontOpen.c"\r
-#include "ntgdi/NtGdiGetBitmapBits.c"\r
-#include "ntgdi/NtGdiGetFontResourceInfoInternalW.c"\r
-#include "ntgdi/NtGdiGetRandomRgn.c"\r
-#include "ntgdi/NtGdiSelectBitmap.c"\r
-#include "ntgdi/NtGdiSelectBrush.c"\r
-#include "ntgdi/NtGdiSelectFont.c"\r
-#include "ntgdi/NtGdiSelectPen.c"\r
-#include "ntgdi/NtGdiSetBitmapBits.c"\r
-#include "ntgdi/NtGdiSetDIBitsToDeviceInternal.c"\r
-//#include "ntgdi/NtGdiSTROBJ_vEnumStart.c"\r
-#include "ntgdi/NtGdiGetDIBits.c"\r
-#include "ntgdi/NtGdiGetStockObject.c"\r
-\r
-#include "ntuser/NtUserCallHwnd.c"\r
-#include "ntuser/NtUserCallHwndLock.c"\r
-#include "ntuser/NtUserCallHwndOpt.c"\r
-#include "ntuser/NtUserCallHwndParam.c"\r
-#include "ntuser/NtUserCallHwndParamLock.c"\r
-#include "ntuser/NtUserCallNoParam.c"\r
-#include "ntuser/NtUserCallOneParam.c"\r
-#include "ntuser/NtUserCountClipboardFormats.c"\r
-//#include "ntuser/NtUserCreateWindowEx.c"\r
-#include "ntuser/NtUserEnumDisplaySettings.c"\r
-#include "ntuser/NtUserFindExistingCursorIcon.c"\r
-#include "ntuser/NtUserRedrawWindow.c"\r
-#include "ntuser/NtUserScrollDC.c"\r
-#include "ntuser/NtUserSystemParametersInfo.c"\r
-#include "ntuser/NtUserToUnicodeEx.c"\r
-#include "ntuser/NtUserGetTitleBarInfo.c"\r
-\r
-/* The List of tests */\r
-TESTENTRY TestList[] =\r
-{\r
-       /* DirectDraw */\r
-       { L"NtGdiDdCreateDirectDrawObject", Test_NtGdiDdCreateDirectDrawObject },\r
-       { L"NtGdiDdQueryDirectDrawObject", Test_NtGdiDdQueryDirectDrawObject },\r
-       { L"NtGdiDdDeleteDirectDrawObject", Test_NtGdiDdDeleteDirectDrawObject },\r
-\r
-       /* ntgdi */\r
-       { L"NtGdiArcInternal", Test_NtGdiArcInternal },\r
-       { L"NtGdiBitBlt", Test_NtGdiBitBlt },\r
-       { L"NtGdiCreateBitmap", Test_NtGdiCreateBitmap },\r
-       { L"NtGdiCreateCompatibleBitmap", Test_NtGdiCreateCompatibleBitmap },\r
-       { L"NtGdiDoPalette", Test_NtGdiDoPalette },\r
-       { L"NtGdiEngCreatePalette", Test_NtGdiEngCreatePalette },\r
-//     { L"NtGdiEnumFontChunk", Test_NtGdiEnumFontChunk },\r
-       { L"NtGdiEnumFontOpen", Test_NtGdiEnumFontOpen },\r
-       { L"NtGdiGetBitmapBits", Test_NtGdiGetBitmapBits },\r
-       { L"NtGdiGetFontResourceInfoInternalW", Test_NtGdiGetFontResourceInfoInternalW },\r
-       { L"NtGdiGetRandomRgn", Test_NtGdiGetRandomRgn },\r
-       { L"NtGdiSetBitmapBits", Test_NtGdiSetBitmapBits },\r
-       { L"NtGdiSetDIBitsToDeviceInternal", Test_NtGdiSetDIBitsToDeviceInternal },\r
-       { L"NtGdiSelectBitmap", Test_NtGdiSelectBitmap },\r
-       { L"NtGdiSelectBrush", Test_NtGdiSelectBrush },\r
-       { L"NtGdiSelectFont", Test_NtGdiSelectFont },\r
-       { L"NtGdiSelectPen", Test_NtGdiSelectPen },\r
-//     { L"NtGdiSTROBJ_vEnumStart", Test_NtGdiSTROBJ_vEnumStart },\r
-       { L"NtGdiGetDIBitsInternal", Test_NtGdiGetDIBitsInternal },\r
-       { L"NtGdiGetStockObject", Test_NtGdiGetStockObject },\r
-\r
-       /* ntuser */\r
-       { L"NtUserCallHwnd", Test_NtUserCallHwnd },\r
-       { L"NtUserCallHwndLock", Test_NtUserCallHwndLock },\r
-       { L"NtUserCallHwndOpt", Test_NtUserCallHwndOpt },\r
-       { L"NtUserCallHwndParam", Test_NtUserCallHwndParam },\r
-       { L"NtUserCallHwndParamLock", Test_NtUserCallHwndParamLock },\r
-       { L"NtUserCallNoParam", Test_NtUserCallNoParam },\r
-       { L"NtUserCallOneParam", Test_NtUserCallOneParam },\r
-       { L"NtUserCountClipboardFormats", Test_NtUserCountClipboardFormats },\r
-//     { L"NtUserCreateWindowEx", Test_NtUserCreateWindowEx },\r
-       { L"NtUserEnumDisplaySettings", TEST_NtUserEnumDisplaySettings },\r
-       { L"NtUserFindExistingCursorIcon", Test_NtUserFindExistingCursoricon },\r
-       { L"NtUserRedrawWindow", Test_NtUserRedrawWindow },\r
-       { L"NtUserScrollDC", Test_NtUserScrollDC },\r
-       { L"NtUserSystemParametersInfo", Test_NtUserSystemParametersInfo },\r
-       { L"NtUserToUnicodeEx", Test_NtUserToUnicodeEx },\r
-       { L"NtUserGetTitleBarInfo", Test_NtUserGetTitleBarInfo }\r
-};\r
-\r
-/* The function that gives us the number of tests */\r
-INT NumTests(void)\r
-{\r
-       return sizeof(TestList) / sizeof(TESTENTRY);\r
-}\r
-\r
-\r
+#include "w32knapi.h"
+
+/* include the tests */
+
+#include "ntdd/NtGdiDdCreateDirectDrawObject.c"
+#include "ntdd/NtGdiDdDeleteDirectDrawObject.c"
+#include "ntdd/NtGdiDdQueryDirectDrawObject.c"
+
+#include "ntgdi/NtGdiArcInternal.c"
+#include "ntgdi/NtGdiBitBlt.c"
+#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/NtGdiGetFontResourceInfoInternalW.c"
+#include "ntgdi/NtGdiGetRandomRgn.c"
+#include "ntgdi/NtGdiSelectBitmap.c"
+#include "ntgdi/NtGdiSelectBrush.c"
+#include "ntgdi/NtGdiSelectFont.c"
+#include "ntgdi/NtGdiSelectPen.c"
+#include "ntgdi/NtGdiSetBitmapBits.c"
+#include "ntgdi/NtGdiSetDIBitsToDeviceInternal.c"
+//#include "ntgdi/NtGdiSTROBJ_vEnumStart.c"
+#include "ntgdi/NtGdiGetDIBits.c"
+#include "ntgdi/NtGdiGetStockObject.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/NtUserEnumDisplaySettings.c"
+#include "ntuser/NtUserFindExistingCursorIcon.c"
+#include "ntuser/NtUserRedrawWindow.c"
+#include "ntuser/NtUserScrollDC.c"
+#include "ntuser/NtUserSystemParametersInfo.c"
+#include "ntuser/NtUserToUnicodeEx.c"
+#include "ntuser/NtUserGetTitleBarInfo.c"
+
+/* The List of tests */
+TESTENTRY TestList[] =
+{
+       /* DirectDraw */
+       { L"NtGdiDdCreateDirectDrawObject", Test_NtGdiDdCreateDirectDrawObject },
+       { L"NtGdiDdQueryDirectDrawObject", Test_NtGdiDdQueryDirectDrawObject },
+       { L"NtGdiDdDeleteDirectDrawObject", Test_NtGdiDdDeleteDirectDrawObject },
+
+       /* ntgdi */
+       { L"NtGdiArcInternal", Test_NtGdiArcInternal },
+       { L"NtGdiBitBlt", Test_NtGdiBitBlt },
+       { 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"NtGdiGetFontResourceInfoInternalW", Test_NtGdiGetFontResourceInfoInternalW },
+       { L"NtGdiGetRandomRgn", Test_NtGdiGetRandomRgn },
+       { L"NtGdiSetBitmapBits", Test_NtGdiSetBitmapBits },
+       { L"NtGdiSetDIBitsToDeviceInternal", Test_NtGdiSetDIBitsToDeviceInternal },
+       { L"NtGdiSelectBitmap", Test_NtGdiSelectBitmap },
+       { L"NtGdiSelectBrush", Test_NtGdiSelectBrush },
+       { L"NtGdiSelectFont", Test_NtGdiSelectFont },
+       { L"NtGdiSelectPen", Test_NtGdiSelectPen },
+//     { L"NtGdiSTROBJ_vEnumStart", Test_NtGdiSTROBJ_vEnumStart },
+       { L"NtGdiGetDIBitsInternal", Test_NtGdiGetDIBitsInternal },
+       { L"NtGdiGetStockObject", Test_NtGdiGetStockObject },
+
+       /* 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"NtUserEnumDisplaySettings", TEST_NtUserEnumDisplaySettings },
+       { L"NtUserFindExistingCursorIcon", Test_NtUserFindExistingCursoricon },
+       { L"NtUserRedrawWindow", Test_NtUserRedrawWindow },
+       { L"NtUserScrollDC", Test_NtUserScrollDC },
+       { L"NtUserSystemParametersInfo", Test_NtUserSystemParametersInfo },
+       { L"NtUserToUnicodeEx", Test_NtUserToUnicodeEx },
+       { L"NtUserGetTitleBarInfo", Test_NtUserGetTitleBarInfo }
+};
+
+/* The function that gives us the number of tests */
+INT NumTests(void)
+{
+       return sizeof(TestList) / sizeof(TESTENTRY);
+}
+
+
index 2146be1..fa20eef 100644 (file)
@@ -1,98 +1,98 @@
-#include "w32knapi.h"\r
-\r
-HINSTANCE g_hInstance;\r
-HMODULE g_hModule = NULL;\r
-PGDI_TABLE_ENTRY GdiHandleTable;\r
-\r
-static\r
-PGDI_TABLE_ENTRY\r
-MyGdiQueryTable()\r
-{\r
-       PTEB pTeb = NtCurrentTeb();\r
-       PPEB pPeb = pTeb->ProcessEnvironmentBlock;\r
-       return pPeb->GdiSharedHandleTable;\r
-}\r
-\r
-static DWORD STDCALL\r
-IntSyscall(FARPROC proc, UINT cParams, PVOID pFirstParam)\r
-{\r
-       DWORD ret;\r
-\r
-       asm volatile\r
-       (\r
-               "pushfl;"                               // Save flags\r
-               "movl %%ecx, %%eax;"\r
-               "shl $2, %%eax;"                // Calculate param size\r
-               "subl %%eax, %%esp;"    // Calculate new stack pos\r
-               "movl %%esp, %%edi;"    // Destination is stackpointer\r
-               "cld;"                                  // Clear direction flag\r
-               "rep movsd;"                    // Copy params to the stack\r
-               "call *%%edx;"                  // Call function\r
-               "popfl;"                                // Restore flags\r
-               : "=a" (ret)\r
-               : "S" (pFirstParam), "c" (cParams), "d"(proc)\r
-               : "%edi"\r
-       );\r
-\r
-       return ret;\r
-}\r
-\r
-DWORD\r
-Syscall(LPWSTR pszFunction, int cParams, void* pParams)\r
-{\r
-       char szFunctionName[MAX_PATH];\r
-\r
-       sprintf(szFunctionName, "%ls", pszFunction);\r
-       FARPROC proc = (FARPROC)GetProcAddress(g_hModule, szFunctionName);\r
-       if (!proc)\r
-       {\r
-               printf("Couldn't find proc: %s\n", szFunctionName);\r
-               return FALSE;\r
-       }\r
-\r
-       return IntSyscall(proc, cParams, pParams);\r
-}\r
-\r
-BOOL\r
-IsFunctionPresent(LPWSTR lpszFunction)\r
-{\r
-       char szFunctionName[MAX_PATH];\r
-       sprintf(szFunctionName, "%ls", lpszFunction);\r
-       return (GetProcAddress(g_hModule, szFunctionName) != NULL);\r
-}\r
-\r
-int APIENTRY\r
-WinMain(HINSTANCE hInstance,\r
-        HINSTANCE hPrevInstance,\r
-        LPSTR     lpCmdLine,\r
-        int       nCmdShow)\r
-{\r
-       g_hInstance = hInstance;\r
-\r
-       printf("Win32k native API test\n");\r
-\r
-       /* Convert to gui thread */\r
-       // IsGUIThread(TRUE); <- does not exists on win2k\r
-\r
-       InitOsVersion();\r
-       printf("g_OsIdx = %d\n", g_OsIdx);\r
-\r
-       g_hModule = LoadLibraryW(L"w32kdll.dll");\r
-       if (!g_hModule)\r
-       {\r
-               printf("w32kdll.dll not found!\n");\r
-               return -1;\r
-       }\r
-\r
-       GdiHandleTable = MyGdiQueryTable();\r
-       if(!GdiHandleTable)\r
-       {\r
-               FreeLibrary(g_hModule);\r
-               printf("GdiHandleTable not found!\n");\r
-               return -1;\r
-       }\r
-\r
-       printf("\n");\r
-\r
-       return TestMain(L"w32knapi", L"win32k.sys Nt-Api");\r
-}\r
+#include "w32knapi.h"
+
+HINSTANCE g_hInstance;
+HMODULE g_hModule = NULL;
+PGDI_TABLE_ENTRY GdiHandleTable;
+
+static
+PGDI_TABLE_ENTRY
+MyGdiQueryTable()
+{
+       PTEB pTeb = NtCurrentTeb();
+       PPEB pPeb = pTeb->ProcessEnvironmentBlock;
+       return pPeb->GdiSharedHandleTable;
+}
+
+static DWORD STDCALL
+IntSyscall(FARPROC proc, UINT cParams, PVOID pFirstParam)
+{
+       DWORD ret;
+
+       asm volatile
+       (
+               "pushfl;"                               // Save flags
+               "movl %%ecx, %%eax;"
+               "shl $2, %%eax;"                // Calculate param size
+               "subl %%eax, %%esp;"    // Calculate new stack pos
+               "movl %%esp, %%edi;"    // Destination is stackpointer
+               "cld;"                                  // Clear direction flag
+               "rep movsd;"                    // Copy params to the stack
+               "call *%%edx;"                  // Call function
+               "popfl;"                                // Restore flags
+               : "=a" (ret)
+               : "S" (pFirstParam), "c" (cParams), "d"(proc)
+               : "%edi"
+       );
+
+       return ret;
+}
+
+DWORD
+Syscall(LPWSTR pszFunction, int cParams, void* pParams)
+{
+       char szFunctionName[MAX_PATH];
+
+       sprintf(szFunctionName, "%ls", pszFunction);
+       FARPROC proc = (FARPROC)GetProcAddress(g_hModule, szFunctionName);
+       if (!proc)
+       {
+               printf("Couldn't find proc: %s\n", szFunctionName);
+               return FALSE;
+       }
+
+       return IntSyscall(proc, cParams, pParams);
+}
+
+BOOL
+IsFunctionPresent(LPWSTR lpszFunction)
+{
+       char szFunctionName[MAX_PATH];
+       sprintf(szFunctionName, "%ls", lpszFunction);
+       return (GetProcAddress(g_hModule, szFunctionName) != NULL);
+}
+
+int APIENTRY
+WinMain(HINSTANCE hInstance,
+        HINSTANCE hPrevInstance,
+        LPSTR     lpCmdLine,
+        int       nCmdShow)
+{
+       g_hInstance = hInstance;
+
+       printf("Win32k native API test\n");
+
+       /* 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)
+       {
+               printf("w32kdll.dll not found!\n");
+               return -1;
+       }
+
+       GdiHandleTable = MyGdiQueryTable();
+       if(!GdiHandleTable)
+       {
+               FreeLibrary(g_hModule);
+               printf("GdiHandleTable not found!\n");
+               return -1;
+       }
+
+       printf("\n");
+
+       return TestMain(L"w32knapi", L"win32k.sys Nt-Api");
+}
index af4a347..4463015 100644 (file)
@@ -1,65 +1,65 @@
-#ifndef _W32KNAPI_H\r
-#define _W32KNAPI_H\r
-\r
-/* SDK/NDK Headers */\r
-#define NTOS_MODE_USER\r
-#define WIN32_NO_STATUS\r
-#include <windows.h>\r
-#include <winuser.h>\r
-#include <windowsx.h>\r
-#include <winnls32.h>\r
-#include <ndk/ntndk.h>\r
-#include <wingdi.h>\r
-#include <winddi.h>\r
-#include <ddrawi.h>\r
-#include <d3dnthal.h>\r
-#include <prntfont.h>\r
-\r
-/* Public Win32K Headers */\r
-#include <win32k/ntusrtyp.h>\r
-#include <win32k/ntuser.h>\r
-#include <win32k/callback.h>\r
-#include <win32k/ntgdityp.h>\r
-#include <ntgdi.h>\r
-#include <win32k/ntgdihdl.h>\r
-\r
-#include "../apitest.h"\r
-#include "resource.h"\r
-\r
-typedef struct\r
-{\r
-       LPWSTR lpszFunction;\r
-       INT nSyscallNum;\r
-       INT nParams;\r
-} SYCALL_ENTRY, *PSYSCALL_ENTRY;\r
-\r
-extern HINSTANCE g_hInstance;\r
-extern HMODULE g_hModule;\r
-extern PGDI_TABLE_ENTRY GdiHandleTable;\r
-\r
-DWORD Syscall(LPWSTR lpszFunction, int cParams, void* pParams);\r
-BOOL InitOsVersion();\r
-extern UINT g_OsIdx;\r
-\r
-typedef UINT ASPI[5];\r
-extern ASPI gNOPARAM_ROUTINE_CREATEMENU;\r
-extern ASPI gNOPARAM_ROUTINE_CREATEMENUPOPUP;\r
-extern ASPI gNOPARAM_ROUTINE_LOADUSERAPIHOOK;\r
-extern ASPI gONEPARAM_ROUTINE_MAPDEKTOPOBJECT;\r
-extern ASPI gONEPARAM_ROUTINE_SWAPMOUSEBUTTON;\r
-extern ASPI gHWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW;\r
-extern ASPI gHWND_ROUTINE_GETWNDCONTEXTHLPID;\r
-extern ASPI gHWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID;\r
-\r
-#define _NOPARAM_ROUTINE_CREATEMENU gNOPARAM_ROUTINE_CREATEMENU[g_OsIdx]\r
-#define _NOPARAM_ROUTINE_CREATEMENUPOPUP gNOPARAM_ROUTINE_CREATEMENUPOPUP[g_OsIdx]\r
-#define _NOPARAM_ROUTINE_LOADUSERAPIHOOK gNOPARAM_ROUTINE_LOADUSERAPIHOOK[g_OsIdx]\r
-#define _ONEPARAM_ROUTINE_MAPDEKTOPOBJECT gONEPARAM_ROUTINE_MAPDEKTOPOBJECT[g_OsIdx]\r
-#define _ONEPARAM_ROUTINE_SWAPMOUSEBUTTON gONEPARAM_ROUTINE_SWAPMOUSEBUTTON[g_OsIdx]\r
-#define _HWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW gHWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW[g_OsIdx]\r
-#define _HWND_ROUTINE_GETWNDCONTEXTHLPID gHWND_ROUTINE_GETWNDCONTEXTHLPID[g_OsIdx]\r
-#define _HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID gHWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID[g_OsIdx]\r
-\r
-\r
-\r
-#endif /* _W32KNAPI_H */\r
+#ifndef _W32KNAPI_H
+#define _W32KNAPI_H
+
+/* SDK/NDK Headers */
+#define NTOS_MODE_USER
+#define WIN32_NO_STATUS
+#include <windows.h>
+#include <winuser.h>
+#include <windowsx.h>
+#include <winnls32.h>
+#include <ndk/ntndk.h>
+#include <wingdi.h>
+#include <winddi.h>
+#include <ddrawi.h>
+#include <d3dnthal.h>
+#include <prntfont.h>
+
+/* Public Win32K Headers */
+#include <win32k/ntusrtyp.h>
+#include <win32k/ntuser.h>
+#include <win32k/callback.h>
+#include <win32k/ntgdityp.h>
+#include <ntgdi.h>
+#include <win32k/ntgdihdl.h>
+
+#include "../apitest.h"
+#include "resource.h"
+
+typedef struct
+{
+       LPWSTR lpszFunction;
+       INT nSyscallNum;
+       INT nParams;
+} SYCALL_ENTRY, *PSYSCALL_ENTRY;
+
+extern HINSTANCE g_hInstance;
+extern HMODULE g_hModule;
+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 */
index 2ab7793..948fedc 100644 (file)
@@ -1,19 +1,19 @@
-<module name="w32knapi" type="win32cui">\r
-       <include base="w32knapi">.</include>\r
-       <define name="__USE_W32API" />\r
-       <define name="_WIN32_WINNT">0x0501</define>\r
-       <define name="WINVER">0x501</define>\r
-       <library>apitest</library>\r
-       <library>ntdll</library>\r
-       <library>kernel32</library>\r
-       <library>user32</library>\r
-       <library>gdi32</library>\r
-       <library>shell32</library>\r
-       <library>advapi32</library>\r
-       <library>w32kdll</library>\r
-       <library>dbghelp</library>\r
-       <file>w32knapi.c</file>\r
-       <file>osver.c</file>\r
-       <file>testlist.c</file>\r
-       <file>w32knapi.rc</file>\r
-</module>\r
+<module name="w32knapi" type="win32cui">
+       <include base="w32knapi">.</include>
+       <define name="__USE_W32API" />
+       <define name="_WIN32_WINNT">0x0501</define>
+       <define name="WINVER">0x501</define>
+       <library>apitest</library>
+       <library>ntdll</library>
+       <library>kernel32</library>
+       <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>
index d3cc13e..4e631d9 100644 (file)
@@ -1,5 +1,5 @@
-#include <windows.h>\r
-#include "resource.h"\r
-\r
-IDI_ICON ICON "resource/system.ico"\r
-\r
+#include <windows.h>
+#include "resource.h"
+
+IDI_ICON ICON "resource/system.ico"
+