Merge from branch ReactX to Trunk,
authorMagnus Olsen <magnus@greatlord.com>
Sat, 10 Nov 2007 15:31:49 +0000 (15:31 +0000)
committerMagnus Olsen <magnus@greatlord.com>
Sat, 10 Nov 2007 15:31:49 +0000 (15:31 +0000)
Please make a clean build after this update

Add dxg.sys driver
----------------------------------------------------------------
This driver contains all DirectX graphic APIs called by win32k. Most of them
are stubbed, and the following APIs are implemented:
DxDxgGenericThunk, DxDdIoctl, DriverEntry, DxDdStartupDxGraphics, DxDdCleanupDxGraphics

Add dxgthk.sys driver, which is 100% finished
---------------------------------------------------------
The following APIs are implemented (almost all are forwarders):
DriverEntry, EngAcquireSemaphore, EngAllocMem, EngAllocUserMem,
EngCopyBits, EngCreateBitmap, EngCreatePalette, EngCreateSemaphore,
EngDeletePalette, EngDeleteSemaphore, EngDeleteSurface,
EngFindImageProcAddress, EngFreeMem, EngFreeUserMem,
EngLoadImage, EngLockSurface, EngReleaseSemaphore,
EngSetLastError, EngUnloadImage, EngUnlockSurface

Add dxapi.sys driver
--------------------------------------------------------------
Most of the APIs used by the graphic card's driver or win32k are stubs.
The following APIs are implemented:
DriverEntry, GsDriverEntry, DxApiGetVersion, DxApi.
All APIs which DxApi wraps are stubs.

Changes in win32k
-------------------------------------------------------------------
Move _DC struct to include\reactos\win32k\ntgdihdl.h
--------------------------------------------------------------------------
Implement NtGdiDdCanCreateD3DBuffer, NtGdiD3dContextDestroy,
NtGdiD3dContextDestroyAll, NtGdiDdCreateD3DBuffer, NtGdiDdDestroyD3DBuffer,
NtGdiD3dDrawPrimitives2, NtGdiDdLockD3D, NtGdiD3dValidateTextureStageState,
NtGdiDdUnlockD3D, NtGdiDdCreateSurface, NtGdiDdWaitForVerticalBlank,
NtGdiDdCanCreateSurface, NtGdiDdGetScanLine, NtGdiDdCreateSurfaceEx,
DxDdStartupDxGraphics, NtGdiDdCreateDirectDrawObject, NtGdiDxgGenericThunk,
NtGdiDdGetDriverState, NtGdiDdColorControl, NtGdiDdCreateSurfaceObject,
NtGdiDdCreateSurfaceObject, NtGdiDdDeleteDirectDrawObject, NtGdiDdDeleteSurfaceObject,
NtGdiDdQueryDirectDrawObject, NtGdiDdReenableDirectDrawObject, NtGdiDdGetDriverInfo,
NtGdiDdGetAvailDriverMemory, NtGdiDdSetExclusiveMode, NtGdiDdFlipToGDISurface,
NtGdiDdGetDC, NtGdiDdGetDxHandle, NtGdiDdReleaseDC, NtGdiDdResetVisrgn,
NtGdiDdSetGammaRamp, NtGdiDdDestroySurface, NtGdiDdFlip, NtGdiDdLock, NtGdiDdUnlock,
NtGdiDdBlt, NtGdiDdSetColorKey, NtGdiDdAddAttachedSurface, NtGdiDdGetBltStatus,
NtGdiDdGetFlipStatus, NtGdiDdUpdateOverlay, NtGdiDdSetOverlayPosition,
NtGdiDdAlphaBlt, NtGdiDdAttachSurface, NtGdiDdUnattachSurface,
NtGdiDvpCanCreateVideoPort, NtGdiDvpColorControl, NtGdiDvpCreateVideoPort,
NtGdiDvpDestroyVideoPort, NtGdiDvpFlipVideoPort, NtGdiDvpGetVideoPortBandwidth,
NtGdiDvpGetVideoPortFlipStatus, NtGdiDvpGetVideoPortInputFormats,
NtGdiDvpGetVideoPortLine, NtGdiDvpGetVideoPortOutputFormats,
NtGdiDvpGetVideoPortConnectInfo, NtGdiDvpGetVideoSignalStatus,
NtGdiDvpUpdateVideoPort, NtGdiDvpWaitForVideoPortSync,
NtGdiDvpAcquireNotification, NtGdiDvpReleaseNotification,
NtGdiDvpGetVideoPortField, NtGdiDdBeginMoCompFrame,
NtGdiDdCreateMoComp, NtGdiDdDestroyMoComp,
NtGdiDdEndMoCompFrame, NtGdiDdGetInternalMoCompInfo,
NtGdiDdGetMoCompBuffInfo, NtGdiDdGetMoCompFormats,
NtGdiDdGetMoCompGuids, NtGdiDdQueryMoCompStatus,
NtGdiDdRenderMoComp, HeapVidMemAllocAligned,
VidMemFree, EngAllocPrivateUserMem, EngFreePrivateUserMem,
EngLockDirectDrawSurface, EngUnlockDirectDrawSurface

But all those functions are stubbed in dxg.sys
----------------------------------------------------------------------------
Implemented APIsL

DxEngLockDC, DxEngUnlockDC, DxEngGetDCState, EngDxIoctl
----------------------------------------------------------------------------
Stubbed APIs:

DxEngNUIsTermSrv, DxEngRedrawDesktop, DxEngDispUniq, DxEngVisRgnUniq,
DxEngEnumerateHdev, DxEngGetDeviceGammaRamp, DxEngCreateMemoryDC,
DxEngScreenAccessCheck, DxEngLockShareSem, DxEngUnlockShareSem,
DxEngLockHdev, DxEngUnlockHdev, DxEngReferenceHdev,
DxEngIsHdevLockedByCurrentThread, DxEngUnreferenceHdev,
DxEngSetDeviceGammaRamp, DxEngSpTearDownSprites,
DxEngSpUnTearDownSprites, DxEngSpSpritesVisible,
DxEngGetHdevData, DxEngSetHdevData, DxEngGetDesktopDC,
DxEngDeleteDC, DxEngCleanDC, DxEngSetDCOwner,
DxEngSetDCState, DxEngSelectBitmap,DxEngSetBitmapOwner,
DxEngDeleteSurface, DxEngGetSurfaceData, DxEngAltLockSurface,
DxEngUploadPaletteEntryToSurface, DxEngMarkSurfaceAsDirectDraw,
DxEngSelectPaletteToSurface, DxEngSyncPaletteTableWithDevice,
DxEngSetPaletteState, DxEngGetRedirectionBitmap, DxEngLoadImage,
DxEngIncDispUniq

----------------------------------------------------------------------------
Remember we need the DxEng APIs implemented and HeapVidMemAllocAligned,
VidMemFree, EngAllocPrivateUserMem, EngFreePrivateUserMem,
EngLockDirectDrawSurface, EngUnlockDirectDrawSurface implemented
before it's possible to have full DirectX support at kmode.

svn path=/trunk/; revision=30328

16 files changed:
1  2 
reactos/boot/bootdata/packages/reactos.dff
reactos/drivers/directx/dxapi/dxapi_driver.h
reactos/drivers/directx/dxapi/main.c
reactos/drivers/directx/dxg/main.c
reactos/include/ddk/d3dnthal.h
reactos/include/ddk/ddkmapi.h
reactos/include/psdk/ntgdi.h
reactos/include/reactos/drivers/directx/dxeng.h
reactos/include/reactos/win32k/ntgdihdl.h
reactos/subsystems/win32/win32k/include/dc.h
reactos/subsystems/win32/win32k/include/driver.h
reactos/subsystems/win32/win32k/ntddraw/dxeng.c
reactos/subsystems/win32/win32k/objects/gdiobj.c
reactos/subsystems/win32/win32k/stubs/stubs.c
reactos/subsystems/win32/win32k/win32k.def
reactos/subsystems/win32/win32k/win32k.rbuild

@@@ -271,6 -269,6 +271,10 @@@ drivers\bus\acpi\acpi.sy
  drivers\bus\isapnp\isapnp.sys                       2
  drivers\bus\pci\pci.sys                             2
  
++\drivers\directx\dxapi\dxapi.sys                    2
++drivers\directx\dxeng\dxeng.sys                     2
++drivers\directx\dxg\dxg.sys                         2
++
  drivers\filesystems\fs_rec\fs_rec.sys               2
  drivers\filesystems\msfs\msfs.sys                   2
  drivers\filesystems\mup\mup.sys                     2
index 0000000,cbe7e51..6c17e0e
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,160 +1,158 @@@
 -
 -
+ /* DDK/NDK/SDK Headers */
+ /* DDK/NDK/SDK Headers */
+ #include <ddk/ntddk.h>
+ #include <ddk/ntddmou.h>
+ #include <ddk/ntifs.h>
+ #include <ddk/tvout.h>
+ #include <ndk/ntndk.h>
+ #include <stdarg.h>
+ #include <windef.h>
+ #include <winerror.h>
+ #include <wingdi.h>
+ #include <winddi.h>
+ #include <winuser.h>
+ #include <prntfont.h>
+ #include <dde.h>
+ #include <wincon.h>
+ #include <ddk/ddkmapi.h>
+ /* Prototypes */
+ VOID DxGetVersionNumber(PVOID lpvInBuffer, LPDDGETVERSIONNUMBER lpvOutBuffer);
+ VOID DxCloseHandle(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxOpenDirectDraw(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxOpenSurface(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxOpenVideoPort(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxGetKernelCaps(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxGetFieldNumber(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxSetFieldNumber(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxSetSkipPattern(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxGetSurfaceState(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxSetSurfaceState(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxLock(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxFlipOverlay(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxFlipVideoPort(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxGetCurrentAutoflip(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxGetPreviousAutoflip(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxRegisterEvent(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxUnregisterEvent(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxGetPolarity(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxOpenVpCatureDevice(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxAddVpCaptureBuffer(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ VOID DxFlushVpCaptureBuffs(PVOID lpvInBuffer, PVOID lpvOutBuffer);
+ /* Internal driver table being use as looking up table for correct size of structs */
+ DWORD tblCheckInBuffer [] =
+ {
+     /* DD_DXAPI_GETVERSIONNUMBER */
+     0,
+     /* DD_DXAPI_CLOSEHANDLE */
+     sizeof(DDCLOSEHANDLE),
+     0, // DD_DXAPI_OPENDIRECTDRAW
+     0, // DD_DXAPI_OPENSURFACE
+     0, // DD_DXAPI_OPENVIDEOPORT
+     /* DD_DXAPI_GETKERNELCAPS */
+     sizeof(HANDLE),
+     /* DD_DXAPI_GET_VP_FIELD_NUMBER */
+     sizeof(DDGETFIELDNUMIN),
+     0, // DD_DXAPI_SET_VP_FIELD_NUMBER
+     0, // DD_DXAPI_SET_VP_SKIP_FIELD
+     0, // DD_DXAPI_GET_SURFACE_STATE
+     0, // DD_DXAPI_SET_SURFACE_STATE
+     0, // DD_DXAPI_LOCK
+     /* DD_DXAPI_FLIP_OVERLAY */
+     sizeof(DDFLIPOVERLAY),
+     /* DD_DXAPI_FLIP_VP */
+     sizeof(DDFLIPVIDEOPORT),
+     /* DD_DXAPI_GET_CURRENT_VP_AUTOFLIP_SURFACE */
+     sizeof(DDGETAUTOFLIPIN),
+     /* DD_DXAPI_GET_LAST_VP_AUTOFLIP_SURFACE */
+     sizeof(DDGETAUTOFLIPIN),
+     /* DD_DXAPI_REGISTER_CALLBACK */
+     sizeof(DDREGISTERCALLBACK),
+     /* DD_DXAPI_UNREGISTER_CALLBACK */
+     sizeof(DDREGISTERCALLBACK),
+     /* DD_DXAPI_GET_POLARITY */
+     sizeof(DDGETPOLARITYIN),
+     /* DD_DXAPI_OPENVPCAPTUREDEVICE */
+     sizeof(DDOPENVPCAPTUREDEVICEIN),
+     /* DD_DXAPI_ADDVPCAPTUREBUFFER */
+     sizeof(DDADDVPCAPTUREBUFF),
+     /* DD_DXAPI_FLUSHVPCAPTUREBUFFERS */
+     sizeof(HANDLE)
+ };
+ DWORD tblCheckOutBuffer [] =
+ {
+     /* DD_DXAPI_GETVERSIONNUMBER */
+     sizeof(DDGETVERSIONNUMBER),
+     /* DD_DXAPI_CLOSEHANDLE */
+     sizeof(DWORD),
+     0, // DD_DXAPI_OPENDIRECTDRAW
+     0, // DD_DXAPI_OPENSURFACE
+     0, // DD_DXAPI_OPENVIDEOPORT
+     /* DD_DXAPI_GETKERNELCAPS */
+     sizeof(DDGETKERNELCAPSOUT),
+     /* DD_DXAPI_GET_VP_FIELD_NUMBER */
+     sizeof(DDGETFIELDNUMOUT),
+     0, // DD_DXAPI_SET_VP_FIELD_NUMBER
+     0, // DD_DXAPI_SET_VP_SKIP_FIELD
+     0, // DD_DXAPI_GET_SURFACE_STATE
+     0, // DD_DXAPI_SET_SURFACE_STATE
+     0, // DD_DXAPI_LOCK
+     /* DD_DXAPI_FLIP_OVERLAY */
+     sizeof(DWORD),
+     /* DD_DXAPI_FLIP_VP */
+     sizeof(DWORD),
+     /* DD_DXAPI_GET_CURRENT_VP_AUTOFLIP_SURFACE */
+     sizeof(DDGETAUTOFLIPOUT),
+     /* DD_DXAPI_GET_LAST_VP_AUTOFLIP_SURFACE */
+     sizeof(DDGETAUTOFLIPOUT),
+     /* DD_DXAPI_REGISTER_CALLBACK */
+     sizeof(DWORD),
+     /* DD_DXAPI_UNREGISTER_CALLBACK */
+     sizeof(DWORD),
+     /* DD_DXAPI_GET_POLARITY */
+     sizeof(DDGETPOLARITYOUT),
+     /* DD_DXAPI_OPENVPCAPTUREDEVICE */
+     sizeof(DDOPENVPCAPTUREDEVICEOUT),
+     /* DD_DXAPI_ADDVPCAPTUREBUFFER */
+     sizeof(DWORD),
+     /* DD_DXAPI_FLUSHVPCAPTUREBUFFERS */
+     sizeof(DWORD)
+ };
+ /* Internal driver function */
+ DRVFN gDxApiEntryPoint [] = 
+ {
+     {DD_DXAPI_GETVERSIONNUMBER - DD_FIRST_DXAPI, (PFN) DxGetVersionNumber},
+     {DD_DXAPI_CLOSEHANDLE - DD_FIRST_DXAPI, (PFN) DxCloseHandle},
+     {DD_DXAPI_OPENDIRECTDRAW - DD_FIRST_DXAPI, (PFN) DxOpenDirectDraw},
+     {DD_DXAPI_OPENSURFACE - DD_FIRST_DXAPI, (PFN) DxOpenSurface},
+     {DD_DXAPI_OPENVIDEOPORT - DD_FIRST_DXAPI, (PFN) DxOpenVideoPort},
+     {DD_DXAPI_GETKERNELCAPS - DD_FIRST_DXAPI, (PFN) DxGetKernelCaps},
+     {DD_DXAPI_GET_VP_FIELD_NUMBER - DD_FIRST_DXAPI, (PFN) DxGetFieldNumber},
+     {DD_DXAPI_SET_VP_FIELD_NUMBER - DD_FIRST_DXAPI, (PFN) DxSetFieldNumber},
+     {DD_DXAPI_SET_VP_SKIP_FIELD - DD_FIRST_DXAPI, (PFN) DxSetSkipPattern},
+     {DD_DXAPI_GET_SURFACE_STATE - DD_FIRST_DXAPI, (PFN) DxGetSurfaceState},
+     {DD_DXAPI_SET_SURFACE_STATE - DD_FIRST_DXAPI, (PFN) DxSetSurfaceState},
+     {DD_DXAPI_LOCK - DD_FIRST_DXAPI, (PFN) DxLock},
+     {DD_DXAPI_FLIP_OVERLAY - DD_FIRST_DXAPI, (PFN) DxFlipOverlay},
+     {DD_DXAPI_FLIP_VP - DD_FIRST_DXAPI, (PFN) DxFlipVideoPort},
+     {DD_DXAPI_GET_CURRENT_VP_AUTOFLIP_SURFACE - DD_FIRST_DXAPI, (PFN) DxGetCurrentAutoflip},
+     {DD_DXAPI_GET_LAST_VP_AUTOFLIP_SURFACE - DD_FIRST_DXAPI, (PFN) DxGetPreviousAutoflip},
+     {DD_DXAPI_REGISTER_CALLBACK - DD_FIRST_DXAPI, (PFN) DxRegisterEvent},
+     {DD_DXAPI_UNREGISTER_CALLBACK - DD_FIRST_DXAPI, (PFN) DxUnregisterEvent},
+     {DD_DXAPI_GET_POLARITY - DD_FIRST_DXAPI, (PFN) DxGetPolarity},
+     {DD_DXAPI_OPENVPCAPTUREDEVICE - DD_FIRST_DXAPI, (PFN) DxOpenVpCatureDevice},
+     {DD_DXAPI_ADDVPCAPTUREBUFFER - DD_FIRST_DXAPI, (PFN) DxAddVpCaptureBuffer},
+     {DD_DXAPI_FLUSHVPCAPTUREBUFFERS - DD_FIRST_DXAPI, (PFN) DxFlushVpCaptureBuffs}
+ };
index 0000000,81aaf87..870d8a7
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,272 +1,274 @@@
 -DxApi(ULONG dwFunctionNum,
 -      PVOID lpvInBuffer,
 -      ULONG cbInBuffer,
 -      PVOID lpvOutBuffer,
 -      ULONG cbOutBuffer)
+ /*
+  * COPYRIGHT:        See COPYING in the top level directory
+  * PROJECT:          ReactOS kernel
+  * PURPOSE:          Native driver for dxg implementation
+  * FILE:             drivers/directx/dxg/main.c
+  * PROGRAMER:        Magnus olsen (magnus@greatlord.com)
+  * REVISION HISTORY:
+  *       15/10-2007   Magnus Olsen
+  */
+ #include "dxapi_driver.h"
+ NTSTATUS
+ DriverEntry(IN PVOID Context1,
+             IN PVOID Context2)
+ {
+     /* 
+      * NOTE this driver will never be load, it only contain export list
+      * to win32k eng functions
+      */
+     return STATUS_SUCCESS;
+ }
+ NTSTATUS
+ GsDriverEntry(IN PVOID Context1,
+               IN PVOID Context2)
+ {
+     return DriverEntry(Context1, Context2);
+ }
+ /*++
+ * @name DxApiGetVersion
+ * @implemented
+ *
+ * The function DxApiGetVersion return the dsound version, and it always return 4.02
+ *
+ * @return 
+ * Always return 4.02
+ *
+ * @remarks.
+ * none
+ *
+ *--*/
+ ULONG
+ DxApiGetVersion()
+ {
+     /* MSDN say this always return Direct Sound version 4.02 */
+     return 0x402;
+ }
+ /*++
+ * @name DxApi
+ * @implemented
+ *
+ * The function DxApi calls to diffent functions, follow functions 
+ * are supported
+ * DxGetVersionNumber, DxCloseHandle, DxOpenDirectDraw, DxOpenSurface,
+ * DxOpenVideoPort, DxGetKernelCaps, DxGetFieldNumber, DxSetFieldNumber,
+ * DxSetSkipPattern, DxGetSurfaceState, DxSetSurfaceState, DxLock,
+ * DxFlipOverlay, DxFlipVideoPort, DxGetCurrentAutoflip, DxGetPreviousAutoflip,
+ * DxRegisterEvent, DxUnregisterEvent, DxGetPolarity, DxOpenVpCatureDevice,
+ * DxAddVpCaptureBuffer, DxFlushVpCaptureBuffs 
+ *
+ * See ddkmapi.h as well
+ *
+ * @param ULONG dwFunctionNum
+ * The function id we want call on in the dxapi.sys see ddkmapi.h for the id
+ *
+ * @param PVOID lpvInBuffer
+ * Our input buffer to the functions we call to, This param can be NULL
+ *
+ * @param ULONG cbInBuffer
+ * Our size in bytes of the input buffer, rember wrong size will result in the function
+ * does not being call.
+ *
+ * @param PVOID lpvOutBuffer
+ * Our Output buffer, there the function fill in the info, this param can not
+ * be null. if it null the functions we trying call on will not be call
+ *
+ * @param ULONG cbOutBuffer
+ * Our size in bytes of the output buffer, rember wrong size will result in the function
+ * does not being call.
+ *
+ * @return 
+ * Return Always 0. 
+ *
+ * @remarks.
+ * before call to any of this functions, do not forget set lpvOutBuffer->ddRVal = DDERR_GEN*,
+ * if that member exists in the outbuffer ;
+ *
+ *--*/
++
++DXAPI
+ DWORD
++DxApi(IN DWORD dwFunctionNum,
++      IN LPVOID lpvInBuffer,
++      IN DWORD cbInBuffer,
++      OUT LPVOID lpvOutBuffer,
++      OUT DWORD cbOutBuffer)
+ {
+     dwFunctionNum -= DD_FIRST_DXAPI;
+     if ((lpvOutBuffer == NULL) || 
+        (dwFunctionNum < (DD_FIRST_DXAPI - DD_FIRST_DXAPI)) ||
+        (dwFunctionNum > (DD_DXAPI_FLUSHVPCAPTUREBUFFERS - DD_FIRST_DXAPI)) ||
+        (gDxApiEntryPoint[dwFunctionNum].pfn == NULL) ||
+        (cbInBuffer != tblCheckInBuffer[dwFunctionNum]) ||
+        (cbOutBuffer != tblCheckOutBuffer[dwFunctionNum]))
+     {
+         return 0;
+     }
+     gDxApiEntryPoint[dwFunctionNum].pfn(lpvInBuffer, lpvOutBuffer);
+     return 0;
+ }
+ /*++
+ * @name DxGetVersionNumber
+ * @implemented
+ *
+ * The function DxGetVersionNumber return dxapi interface version, that is 1.0
+ *
+ * @return 
+ * Always return 1.0
+ *
+ * @remarks.
+ * none
+ *
+ *--*/
+ VOID
+ DxGetVersionNumber(PVOID lpvInBuffer, LPDDGETVERSIONNUMBER lpvOutBuffer)
+ {
+     lpvOutBuffer->ddRVal = DD_OK;
+     lpvOutBuffer->dwMajorVersion = 1;
+     lpvOutBuffer->dwMinorVersion = 0;
+ }
+ VOID
+ DxCloseHandle(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxOpenDirectDraw(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxOpenSurface(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxOpenVideoPort(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxGetKernelCaps(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxGetFieldNumber(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxSetFieldNumber(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxSetSkipPattern(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxGetSurfaceState(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxSetSurfaceState(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxLock(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxFlipOverlay(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxFlipVideoPort(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxGetCurrentAutoflip(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxGetPreviousAutoflip(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxRegisterEvent(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxUnregisterEvent(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxGetPolarity(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxOpenVpCatureDevice(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxAddVpCaptureBuffer(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
+ VOID
+ DxFlushVpCaptureBuffs(PVOID lpvInBuffer, PVOID lpvOutBuffer)
+ {
+     /* FIXME Unimplement */
+ }
index 0000000,52926cd..3e171c2
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,195 +1,195 @@@
 -            (drv_func->pfn == 0))
+ /*
+  * COPYRIGHT:        See COPYING in the top level directory
+  * PROJECT:          ReactOS kernel
+  * PURPOSE:          Native driver for dxg implementation
+  * FILE:             drivers/directx/dxg/main.c
+  * PROGRAMER:        Magnus olsen (magnus@greatlord.com)
+  * REVISION HISTORY:
+  *       15/10-2007   Magnus Olsen
+  */
+ #include <dxg_int.h>
+ #include "dxg_driver.h"
+ ULONG gcMaxDdHmgr = 0;
+ ULONG gcSizeDdHmgr = 0; 
+ LONG gcDummyPageRefCnt = 0;
+ HSEMAPHORE ghsemHmgr = NULL;
+ HSEMAPHORE ghsemDummyPage = NULL;
+ VOID *gpDummyPage = NULL;
+ PEPROCESS gpepSession = NULL;
+ PLARGE_INTEGER gpLockShortDelay = NULL;
+ HANDLE ghFreeDdHmgr = 0;
+ VOID *gpentDdHmgr = NULL;
+ VOID *gpentDdHmgrLast = NULL;
+ PDRVFN gpEngFuncs;
+ const ULONG gcDxgFuncs = DXG_INDEX_DxDdIoctl + 1;
+ NTSTATUS
+ DriverEntry(IN PVOID Context1,
+             IN PVOID Context2)
+ {
+     return 0;
+ }
+ NTSTATUS
+ APIENTRY
+ DxDdStartupDxGraphics (ULONG SizeEngDrv,
+                        PDRVENABLEDATA pDxEngDrv,
+                        ULONG SizeDxgDrv,
+                        PDRVENABLEDATA pDxgDrv,
+                        PULONG DirectDrawContext,
+                        PEPROCESS Proc )
+ {
+     PDRVFN drv_func;
+     INT i;
+     /* Test see if the data is vaild we got from win32k.sys */
+     if ((SizeEngDrv != sizeof(DRVENABLEDATA)) ||
+         (SizeDxgDrv != sizeof(DRVENABLEDATA)))
+     {
+         return STATUS_BUFFER_TOO_SMALL;
+     }
+     /* rest static value */
+     gpDummyPage = NULL;
+     gcDummyPageRefCnt = 0;
+     ghsemDummyPage = NULL;
+     /* 
+      * Setup internal driver functions list we got from dxg driver functions list
+      */
+     pDxgDrv->iDriverVersion = 0x80000; /* Note 12/1-2004 : DirectX 8 ? */
+     pDxgDrv->c = gcDxgFuncs;
+     pDxgDrv->pdrvfn = gaDxgFuncs;
+     /* check how many driver functions and fail if the value does not match */
+     if (pDxEngDrv->c !=  DXENG_INDEX_DxEngLoadImage + 1)
+     {
+         return STATUS_INTERNAL_ERROR;
+     }
+     /*
+      * Check if all drv functions are sorted right 
+      * and if it really are exported 
+      */
+     for (i=1 ; i < DXENG_INDEX_DxEngLoadImage + 1; i++)
+     {
+         drv_func = &pDxEngDrv->pdrvfn[i];
+         if ((drv_func->iFunc != i) ||
++            (drv_func->pfn == NULL))
+         {
+             return STATUS_INTERNAL_ERROR;
+         }
+     }
+     gpEngFuncs = pDxEngDrv->pdrvfn;
+     /* Note 12/1-2004 : Why is this set to 0x618 */
+     *DirectDrawContext = 0x618;
+     if (DdHmgCreate())
+     {
+         ghsemDummyPage = EngCreateSemaphore();
+         if (ghsemDummyPage)
+         {
+             gpepSession = Proc;
+             return STATUS_SUCCESS;
+         }
+     }
+     DdHmgDestroy();
+     if (ghsemDummyPage)
+     {
+         EngDeleteSemaphore(ghsemDummyPage);
+         ghsemDummyPage = 0;
+     }
+     return STATUS_NO_MEMORY;
+ }
+ NTSTATUS
+ DxDdCleanupDxGraphics()
+ {
+     DdHmgDestroy();
+     if (!ghsemDummyPage)
+     {
+         if (!gpDummyPage)
+         {
+             ExFreePoolWithTag(gpDummyPage,0);
+             gpDummyPage = NULL;
+             gcDummyPageRefCnt = 0;
+         }
+         EngDeleteSemaphore(ghsemDummyPage);
+     }
+     return 0;
+ }
+ BOOL
+ DdHmgDestroy()
+ {
+     gcMaxDdHmgr = 0;
+     gcSizeDdHmgr = 0;
+     ghFreeDdHmgr = 0;
+     gpentDdHmgrLast = NULL;
+     if (gpentDdHmgr)
+     {
+         EngFreeMem(gpentDdHmgr);
+         gpentDdHmgr = NULL; 
+     }
+     if (ghsemHmgr)
+     {
+         EngDeleteSemaphore(ghsemHmgr);
+         ghsemHmgr = NULL;
+     }
+     return TRUE;
+ }
+ BOOL
+ DdHmgCreate()
+ {
+     gpentDdHmgr = EngAllocMem(FL_ZERO_MEMORY, gcSizeDdHmgr, TAG_THDD);
+     ghFreeDdHmgr = 0;
+     gcMaxDdHmgr = 1;
+     if (gpentDdHmgr)
+     {
+         ghsemHmgr = EngCreateSemaphore();
+         if (ghsemHmgr)
+         {
+             gpLockShortDelay = EngAllocMem(FL_ZERO_MEMORY | FL_NONPAGED_MEMORY, sizeof(LARGE_INTEGER), TAG_GINI);
+             if (gpLockShortDelay)
+             {
+                 gpLockShortDelay->QuadPart = ((LONGLONG)-100000);
+                 return TRUE;
+             }
+             EngDeleteSemaphore(ghsemHmgr);
+             ghsemHmgr = NULL;
+         }
+         EngFreeMem(gpentDdHmgr);
+         gpentDdHmgr = NULL;
+     }
+     return FALSE;
+ }
Simple merge
@@@ -3,10 -3,10 +3,8 @@@
   *
   * DirectDraw support for DxApi function
   *
-- * This file is part of the w32api package.
-- *
   * Contributors:
-- *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
++ *   Created by Magnus Olsen
   *
   * THIS SOFTWARE IS NOT COPYRIGHTED
   *
Simple merge
index 0000000,12a0322..0488557
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,175 +1,117 @@@
 -
 -
+ /************************************************************************/
+ /* This driver interface are exported from win32k.sys to dxg.sys        */
+ /************************************************************************/
+ #define DXENG_INDEX_Resverd0                            0x00
+ #define DXENG_INDEX_DxEngNUIsTermSrv                    0x01
+ #define DXENG_INDEX_DxEngScreenAccessCheck              0x02
+ #define DXENG_INDEX_DxEngRedrawDesktop                  0x03
+ #define DXENG_INDEX_DxEngDispUniq                       0x04
+ #define DXENG_INDEX_DxEngIncDispUniq                    0x05
+ #define DXENG_INDEX_DxEngVisRgnUniq                     0x06
+ #define DXENG_INDEX_DxEngLockShareSem                   0x07
+ #define DXENG_INDEX_DxEngUnlockShareSem                 0x08
+ #define DXENG_INDEX_DxEngEnumerateHdev                  0x09
+ #define DXENG_INDEX_DxEngLockHdev                       0x0A
+ #define DXENG_INDEX_DxEngUnlockHdev                     0x0B
+ #define DXENG_INDEX_DxEngIsHdevLockedByCurrentThread    0x0C
+ #define DXENG_INDEX_DxEngReferenceHdev                  0x0D
+ #define DXENG_INDEX_DxEngUnreferenceHdev                0x0E
+ #define DXENG_INDEX_DxEngGetDeviceGammaRamp             0x0F
+ #define DXENG_INDEX_DxEngSetDeviceGammaRamp             0x10
+ #define DXENG_INDEX_DxEngSpTearDownSprites              0x11
+ #define DXENG_INDEX_DxEngSpUnTearDownSprites            0x12
+ #define DXENG_INDEX_DxEngSpSpritesVisible               0x13
+ #define DXENG_INDEX_DxEngGetHdevData                    0x14
+ #define DXENG_INDEX_DxEngSetHdevData                    0x15
+ #define DXENG_INDEX_DxEngCreateMemoryDC                 0x16
+ #define DXENG_INDEX_DxEngGetDesktopDC                   0x17
+ #define DXENG_INDEX_DxEngDeleteDC                       0x18
+ #define DXENG_INDEX_DxEngCleanDC                        0x19
+ #define DXENG_INDEX_DxEngSetDCOwner                     0x1A
+ #define DXENG_INDEX_DxEngLockDC                         0x1B
+ #define DXENG_INDEX_DxEngUnlockDC                       0x1C
+ #define DXENG_INDEX_DxEngSetDCState                     0x1D
+ #define DXENG_INDEX_DxEngGetDCState                     0x1E
+ #define DXENG_INDEX_DxEngSelectBitmap                   0x1F
+ #define DXENG_INDEX_DxEngSetBitmapOwner                 0x20
+ #define DXENG_INDEX_DxEngDeleteSurface                  0x21
+ #define DXENG_INDEX_DxEngGetSurfaceData                 0x22
+ #define DXENG_INDEX_DxEngAltLockSurface                 0x23
+ #define DXENG_INDEX_DxEngUploadPaletteEntryToSurface    0x24
+ #define DXENG_INDEX_DxEngMarkSurfaceAsDirectDraw        0x25
+ #define DXENG_INDEX_DxEngSelectPaletteToSurface         0x26
+ #define DXENG_INDEX_DxEngSyncPaletteTableWithDevice     0x27
+ #define DXENG_INDEX_DxEngSetPaletteState                0x28
+ #define DXENG_INDEX_DxEngGetRedirectionBitmap           0x29
+ #define DXENG_INDEX_DxEngLoadImage                      0x2A
+ /************************************************************************/
+ /* win32k.sys internal protypes for the driver functions it export      */
+ /************************************************************************/
+ /* Notes : Check see if termal server got a connections or not */
+ BOOL DxEngNUIsTermSrv();
+ /* Notes : it always return TRUE, and it update whole the screen (redaw current desktop) */
+ BOOL DxEngRedrawDesktop();
+ /* Notes : return the DisplayUniqVisrgn counter from gdishare memory */
+ ULONG DxEngDispUniq();
+ /* Notes :  return the VisRgnUniq counter for win32k */
+ ULONG DxEngVisRgnUniq();
+ /* Notes : Enumate all drivers in win32k */
+ HDEV *DxEngEnumerateHdev(HDEV *hdev);
+ /* Notes : same protypes NtGdiEngGetDeviceGammaRamp, diffent is we skipp the user mode checks and seh */
+ BOOL
+ DxEngGetDeviceGammaRamp(HDC hDC, LPVOID lpRamp);
+ /* Notes : Lock the hDC */
+ PDC DxEngLockDC(HDC hDC);
+ /* Notes : Unlock the hDC */
+ BOOL DxEngUnlockDC(PDC pDC);
+ /* prototypes are not done yet, I need gather all my notes 
+  * to make them correct 
+  */
 -
 -/******************************************************/
 -/* DxEngGetHdevData define value for the Index param  */
 -/* This value are not document in msdn or ddk, they   */
 -/* optain with blackbox win32k and reading the BOOK   */
 -/* "Windows Graphics Programming Win32 Gdi And        */
 -/* Directdraw of Feng Yuan" and use you head          */
 -/******************************************************/
 -
 -/* Unknown */
 -#define HDEVGETDATA_UNK_54C_8                   0
 -
 -/* resverd in msdn for internal use in win32k */
 -#define HDEVGETDATA_DWRESERVED19                1
 -
 -#define HDEVGETDATA_PALETTECALLBACKS_DWFLAGS    2
 -
 -/* resverd in msdn for internal use in win32k */
 -#define HDEVGETDATA_DWRESERVED24                3
 -
 -/* Unknown */
 -#define HDEVGETDATA_UNK_54C_20                  4
 -
 -#define DEVGETDATA_PALETTECALLBACKS_DWSIZE      5
 -
 -/* Unknown */
 -#define HDEVGETDATA_UNK_70C                     6
 -
 -/* Get the DD_SURFACECALLBACKS dwFlag member value */
 -#define HDEVGETDATA_SURFACECALLBACK_DWFLAGS     7
 -
 -/* Unknown */
 -#define HDEVGETDATA_UNK_588                     8
 -
 -/* Unknown */
 -#define HDEVGETDATA_UNK_01C_F400                9
 -
 -/* Unknown */
 -#define HDEVGETDATA_UNK_01C_F20000             10
 -
 -/* Get if the driver is refens or not */
 -#define HDEVGETDATA_CDRIVERREF                 16
 -
 -/* Get the Set palette functions */
 -#define HDEVGETDATA_PFN_SETPALETTE             18
 -
 -
 -
 -
 -
 -
 -
 -
 -
 -
 -
+ DWORD DxEngCreateMemoryDC(DWORD x1);
+ DWORD DxEngScreenAccessCheck();
+ DWORD DxEngLockShareSem();
+ DWORD DxEngUnlockShareSem();
+ DWORD DxEngLockHdev(DWORD x1);
+ DWORD DxEngUnlockHdev(DWORD x1);
+ DWORD DxEngReferenceHdev(DWORD x1);
+ DWORD DxEngIsHdevLockedByCurrentThread(DWORD x1);
+ DWORD DxEngUnreferenceHdev(DWORD x1);
+ DWORD DxEngSetDeviceGammaRamp(DWORD x1, DWORD x2, DWORD x3);
+ DWORD DxEngSpTearDownSprites(DWORD x1, DWORD x2, DWORD x3);
+ DWORD DxEngSpUnTearDownSprites(DWORD x1, DWORD x2, DWORD x3);
+ DWORD DxEngSpSpritesVisible(DWORD x1);
+ DWORD DxEngGetHdevData(PEDD_DIRECTDRAW_GLOBAL pEDDgpl, DWORD Index);
+ DWORD DxEngSetHdevData(DWORD x1, DWORD x2, DWORD x3);
+ DWORD DxEngGetDesktopDC(DWORD x1, DWORD x2, DWORD x3);
+ DWORD DxEngDeleteDC(DWORD x1, DWORD x2);
+ DWORD DxEngCleanDC(DWORD x1);
+ DWORD DxEngSetDCOwner(DWORD x1, DWORD x2);
+ DWORD DxEngSetDCState(DWORD x1, DWORD x2, DWORD x3);
+ DWORD DxEngGetDCState(HDC hDC, DWORD type);
+ DWORD DxEngSelectBitmap(DWORD x1, DWORD x2);
+ DWORD DxEngSetBitmapOwner(DWORD x1, DWORD x2);
+ DWORD DxEngDeleteSurface(DWORD x1);
+ DWORD DxEngGetSurfaceData(DWORD x1, DWORD x2);
+ DWORD DxEngAltLockSurface(DWORD x1);
+ DWORD DxEngUploadPaletteEntryToSurface(DWORD x1, DWORD x2,DWORD x3, DWORD x4);
+ DWORD DxEngMarkSurfaceAsDirectDraw(DWORD x1, DWORD x2);
+ DWORD DxEngSelectPaletteToSurface(DWORD x1, DWORD x2);
+ DWORD DxEngSyncPaletteTableWithDevice(DWORD x1, DWORD x2);
+ DWORD DxEngSetPaletteState(DWORD x1, DWORD x2, DWORD x3);
+ DWORD DxEngGetRedirectionBitmap(DWORD x1);
+ DWORD DxEngLoadImage(DWORD x1,DWORD x2);
+ DWORD DxEngIncDispUniq();
@@@ -283,26 -285,224 +285,249 @@@ typedef struct _DC_ATT
      RGNATTR VisRectRegion;\r
  } DC_ATTR, *PDC_ATTR;\r
  \r
 -  HGDIOBJ     hHmgr;\r
 +typedef struct _BRUSH_ATTR\r
 +{\r
 +    LOGBRUSH logbrush;\r
 +    DWORD    dwUnused[3];\r
 +} BRUSH_ATTR, *PBRUSH_ATTR;\r
 +\r
++\r
 +typedef struct _REGION_ATTR\r
 +{\r
 +    DWORD dwUnknown1; \r
 +    DWORD dwUnknown2; \r
 +    LONG right; \r
 +    LONG bottom;\r
 +    LONG left; \r
 +    LONG top; \r
 +} REGION_ATTR, *PREGION_ATTR;\r
 +\r
 +typedef struct _FONT_ATTR\r
 +{\r
 +    DWORD dwUnknown;\r
 +    void *pCharWidthData;\r
 +} FONT_ATTR, *PFONT_ATTR;\r
 +\r
++\r
+ typedef enum tagGdiPathState\r
+ {\r
+    PATH_Null,\r
+    PATH_Open,\r
+    PATH_Closed\r
+ } GdiPathState;\r
\r
+ typedef struct tagGdiPath\r
+ {\r
+    GdiPathState state;\r
+    POINT      *pPoints;\r
+    BYTE         *pFlags;\r
+    int          numEntriesUsed, numEntriesAllocated;\r
+    BOOL       newStroke;\r
+ } GdiPath;\r
\r
+ typedef struct _WIN_DC_INFO\r
+ {\r
+   int  flags;\r
+   HRGN  hClipRgn;     /* Clip region (may be 0) */\r
+   HRGN  hVisRgn;      /* Visible region (must never be 0) */\r
+   HRGN  hGCClipRgn;   /* GC clip region (ClipRgn AND VisRgn) */\r
+   HBITMAP  hBitmap;\r
+   HBITMAP  hFirstBitmap; /* Bitmap selected at creation of the DC */\r
\r
+ /* #if 0 */\r
+     HANDLE      hDevice;\r
+     HPALETTE    hPalette;\r
\r
+     GdiPath       path;\r
+ /* #endif */\r
\r
+   RECT   totalExtent;\r
+   BYTE   bitsPerPixel;\r
\r
+   INT  DCOrgX;            /* DC origin */\r
+   INT  DCOrgY;\r
+   INT  ArcDirection;\r
\r
+   XFORM  xformWorld2Wnd;    /* World-to-window transformation */\r
+   XFORM  xformWorld2Vport;  /* World-to-viewport transformation */\r
+   XFORM  xformVport2World;  /* Inverse of the above transformation */\r
+   BOOL  vport2WorldValid;  /* Is xformVport2World valid? */\r
+ } WIN_DC_INFO;\r
\r
++\r
+ typedef BOOL (NTAPI *PGD_ENABLEDRIVER)(ULONG, ULONG, PDRVENABLEDATA);\r
+ typedef DHPDEV (NTAPI *PGD_ENABLEPDEV)(DEVMODEW  *, LPWSTR, ULONG, HSURF *, ULONG, ULONG  *, ULONG, DEVINFO  *, LPWSTR, LPWSTR, HANDLE);\r
+ typedef VOID (NTAPI *PGD_COMPLETEPDEV)(DHPDEV, HDEV);\r
+ typedef VOID (NTAPI *PGD_DISABLEPDEV)(DHPDEV); \r
+ typedef HSURF (NTAPI *PGD_ENABLESURFACE)(DHPDEV);\r
+ typedef VOID (NTAPI *PGD_DISABLESURFACE)(DHPDEV);\r
+ typedef BOOL (NTAPI *PGD_ASSERTMODE)(DHPDEV, BOOL);\r
+ typedef BOOL (NTAPI *PGD_OFFSET)(SURFOBJ*, LONG, LONG, FLONG);\r
+ typedef BOOL (NTAPI *PGD_RESETPDEV)(DHPDEV, DHPDEV);\r
+ typedef VOID (NTAPI *PGD_DISABLEDRIVER)(VOID);\r
+ typedef HBITMAP (NTAPI *PGD_CREATEDEVICEBITMAP)(DHPDEV, SIZEL, ULONG); \r
+ typedef VOID (NTAPI *PGD_DELETEDEVICEBITMAP)(DHSURF); \r
+ typedef BOOL (NTAPI *PGD_ALPHABLEND)(SURFOBJ*, SURFOBJ*, CLIPOBJ*, XLATEOBJ*, RECTL*, RECTL*, BLENDOBJ*);\r
+ typedef BOOL (NTAPI *PGD_REALIZEBRUSH)(BRUSHOBJ*, SURFOBJ*, SURFOBJ*, SURFOBJ*, XLATEOBJ*, ULONG); \r
+ typedef ULONG (NTAPI *PGD_DITHERCOLOR)(DHPDEV, ULONG, ULONG, PULONG); \r
+ typedef BOOL (NTAPI *PGD_STROKEPATH)(SURFOBJ*, PATHOBJ*, CLIPOBJ*, XFORMOBJ*, BRUSHOBJ*, POINTL*, PLINEATTRS, MIX); \r
+ typedef BOOL (NTAPI *PGD_FILLPATH)(SURFOBJ*, PATHOBJ*, CLIPOBJ*, BRUSHOBJ*, POINTL*, MIX, ULONG); \r
+ typedef BOOL (NTAPI *PGD_STROKEANDFILLPATH)(SURFOBJ*, PATHOBJ*, CLIPOBJ*, XFORMOBJ*, BRUSHOBJ*, PLINEATTRS, BRUSHOBJ*, POINTL*, MIX, ULONG); \r
+ typedef BOOL (NTAPI *PGD_PAINT)(SURFOBJ*, CLIPOBJ*, BRUSHOBJ*, POINTL*, MIX); \r
+ typedef BOOL (NTAPI *PGD_BITBLT)(SURFOBJ*, SURFOBJ*, SURFOBJ*, CLIPOBJ*, XLATEOBJ*, RECTL*, POINTL*, POINTL*, BRUSHOBJ*, POINTL*, ROP4); \r
+ typedef BOOL (NTAPI *PGD_TRANSPARENTBLT)(SURFOBJ*, SURFOBJ*, CLIPOBJ*, XLATEOBJ*, RECTL*, RECTL*, ULONG, ULONG);\r
+ typedef BOOL (NTAPI *PGD_COPYBITS)(SURFOBJ*, SURFOBJ*, CLIPOBJ*, XLATEOBJ*, RECTL*, POINTL*); \r
+ typedef BOOL (NTAPI *PGD_STRETCHBLT)(SURFOBJ*, SURFOBJ*, SURFOBJ*, CLIPOBJ*, XLATEOBJ*, COLORADJUSTMENT*, POINTL*, RECTL*, RECTL*, POINTL*, ULONG);\r
+ typedef BOOL (NTAPI *PGD_STRETCHBLTROP)(SURFOBJ*, SURFOBJ*, SURFOBJ*, CLIPOBJ*, XLATEOBJ*, COLORADJUSTMENT*, POINTL*, RECTL*, RECTL*, POINTL*, ULONG, BRUSHOBJ*, DWORD);\r
+ typedef BOOL (NTAPI *PGD_SETPALETTE)(DHPDEV, PALOBJ*, ULONG, ULONG, ULONG); \r
+ typedef BOOL (NTAPI *PGD_TEXTOUT)(SURFOBJ*, STROBJ*, FONTOBJ*, CLIPOBJ*, RECTL*, RECTL*, BRUSHOBJ*, BRUSHOBJ*, POINTL*, MIX); \r
+ typedef ULONG (NTAPI *PGD_ESCAPE)(SURFOBJ*, ULONG, ULONG, PVOID *, ULONG, PVOID *); \r
+ typedef ULONG (NTAPI *PGD_DRAWESCAPE)(SURFOBJ*, ULONG, CLIPOBJ*, RECTL*, ULONG, PVOID *); \r
+ typedef PIFIMETRICS (NTAPI *PGD_QUERYFONT)(DHPDEV, ULONG, ULONG, PULONG); \r
+ typedef PVOID (NTAPI *PGD_QUERYFONTTREE)(DHPDEV, ULONG, ULONG, ULONG, PULONG); \r
+ typedef LONG (NTAPI *PGD_QUERYFONTDATA)(DHPDEV, FONTOBJ*, ULONG, HGLYPH, GLYPHDATA*, PVOID, ULONG); \r
+ typedef ULONG (NTAPI *PGD_SETPOINTERSHAPE)(SURFOBJ*, SURFOBJ*, SURFOBJ*, XLATEOBJ*, LONG, LONG, LONG, LONG, RECTL*, ULONG); \r
+ typedef VOID (NTAPI *PGD_MOVEPOINTER)(SURFOBJ*, LONG, LONG, RECTL*); \r
+ typedef BOOL (NTAPI *PGD_LINETO)(SURFOBJ*, CLIPOBJ*, BRUSHOBJ*, LONG, LONG, LONG, LONG, RECTL*, MIX);\r
+ typedef BOOL (NTAPI *PGD_SENDPAGE)(SURFOBJ*);\r
+ typedef BOOL (NTAPI *PGD_STARTPAGE)(SURFOBJ*);\r
+ typedef BOOL (NTAPI *PGD_ENDDOC)(SURFOBJ*, ULONG);\r
+ typedef BOOL (NTAPI *PGD_STARTDOC)(SURFOBJ*, PWSTR, DWORD);\r
+ typedef ULONG (NTAPI *PGD_GETGLYPHMODE)(DHPDEV, FONTOBJ*);\r
+ typedef VOID (NTAPI *PGD_SYNCHRONIZE)(DHPDEV, RECTL*);\r
+ typedef ULONG (NTAPI *PGD_SAVESCREENBITS)(SURFOBJ*, ULONG, ULONG, RECTL*);\r
+ typedef ULONG (NTAPI *PGD_GETMODES)(HANDLE, ULONG, PDEVMODEW);\r
+ typedef VOID (NTAPI *PGD_FREE)(PVOID, ULONG);\r
+ typedef VOID (NTAPI *PGD_DESTROYFONT)(FONTOBJ*);\r
+ typedef LONG (NTAPI *PGD_QUERYFONTCAPS)(ULONG, PULONG);\r
+ typedef ULONG (NTAPI *PGD_LOADFONTFILE)(ULONG, PVOID, ULONG, ULONG);\r
+ typedef BOOL (NTAPI *PGD_UNLOADFONTFILE)(ULONG);\r
+ typedef ULONG (NTAPI *PGD_FONTMANAGEMENT)(SURFOBJ*, FONTOBJ*, ULONG, ULONG, PVOID, ULONG, PVOID);\r
+ typedef LONG (NTAPI *PGD_QUERYTRUETYPETABLE)(ULONG, ULONG, ULONG, PTRDIFF, ULONG, PBYTE);\r
+ typedef LONG (NTAPI *PGD_QUERYTRUETYPEOUTLINE)(DHPDEV, FONTOBJ*, HGLYPH, BOOL, GLYPHDATA*, ULONG, TTPOLYGONHEADER*);\r
+ typedef PVOID (NTAPI *PGD_GETTRUETYPEFILE)(ULONG, PULONG);\r
+ typedef LONG (NTAPI *PGD_QUERYFONTFILE)(ULONG, ULONG, ULONG, PULONG);\r
+ typedef BOOL (NTAPI *PGD_QUERYADVANCEWIDTHS)(DHPDEV, FONTOBJ*, ULONG, HGLYPH *, PVOID *, ULONG);\r
+ typedef BOOL (NTAPI *PGD_SETPIXELFORMAT)(SURFOBJ*, LONG, ULONG);\r
+ typedef LONG (NTAPI *PGD_DESCRIBEPIXELFORMAT)(DHPDEV, LONG, ULONG, PPIXELFORMATDESCRIPTOR);\r
+ typedef BOOL (NTAPI *PGD_SWAPBUFFERS)(SURFOBJ*, PWNDOBJ);\r
+ typedef BOOL (NTAPI *PGD_STARTBANDING)(SURFOBJ*, POINTL*);\r
+ typedef BOOL (NTAPI *PGD_NEXTBAND)(SURFOBJ*, POINTL*);\r
+ typedef BOOL (NTAPI *PGD_GETDIRECTDRAWINFO)(DHPDEV, PDD_HALINFO, PDWORD, VIDEOMEMORY*, PDWORD, PDWORD);\r
+ typedef BOOL (NTAPI *PGD_ENABLEDIRECTDRAW)(DHPDEV, PDD_CALLBACKS, PDD_SURFACECALLBACKS, PDD_PALETTECALLBACKS);\r
+ typedef VOID (NTAPI *PGD_DISABLEDIRECTDRAW)(DHPDEV);\r
+ typedef LONG (NTAPI *PGD_QUERYSPOOLTYPE)(DHPDEV, LPWSTR);\r
+ typedef BOOL (NTAPI *PGD_GRADIENTFILL)(SURFOBJ*, CLIPOBJ*, XLATEOBJ*, TRIVERTEX*, ULONG, PVOID, ULONG, RECTL*, POINTL*, ULONG);\r
+ typedef VOID (NTAPI *PGD_SYNCHRONIZESURFACE)(SURFOBJ*, RECTL *, FLONG);\r
\r
+ typedef struct _DRIVER_FUNCTIONS\r
+ {\r
+   PGD_ENABLEDRIVER  EnableDriver;\r
+   PGD_ENABLEPDEV  EnablePDEV;\r
+   PGD_COMPLETEPDEV  CompletePDEV;\r
+   PGD_DISABLEPDEV  DisablePDEV;\r
+   PGD_ENABLESURFACE  EnableSurface;\r
+   PGD_DISABLESURFACE  DisableSurface;\r
+   PGD_ASSERTMODE  AssertMode;\r
+   PGD_OFFSET  Offset;\r
+   PGD_RESETPDEV  ResetPDEV;\r
+   PGD_DISABLEDRIVER  DisableDriver;\r
+   PGD_CREATEDEVICEBITMAP  CreateDeviceBitmap;\r
+   PGD_DELETEDEVICEBITMAP  DeleteDeviceBitmap;\r
+   PGD_REALIZEBRUSH  RealizeBrush;\r
+   PGD_DITHERCOLOR  DitherColor;\r
+   PGD_STROKEPATH  StrokePath;\r
+   PGD_FILLPATH  FillPath;\r
+   PGD_STROKEANDFILLPATH  StrokeAndFillPath;\r
+   PGD_PAINT  Paint;\r
+   PGD_BITBLT  BitBlt;\r
+   PGD_TRANSPARENTBLT TransparentBlt;\r
+   PGD_COPYBITS  CopyBits;\r
+   PGD_STRETCHBLT  StretchBlt;\r
+   PGD_STRETCHBLTROP  StretchBltROP;\r
+   PGD_SETPALETTE  SetPalette;\r
+   PGD_TEXTOUT  TextOut;\r
+   PGD_ESCAPE  Escape;\r
+   PGD_DRAWESCAPE  DrawEscape;\r
+   PGD_QUERYFONT  QueryFont;\r
+   PGD_QUERYFONTTREE  QueryFontTree;\r
+   PGD_QUERYFONTDATA  QueryFontData;\r
+   PGD_SETPOINTERSHAPE  SetPointerShape;\r
+   PGD_MOVEPOINTER  MovePointer;\r
+   PGD_LINETO  LineTo;\r
+   PGD_SENDPAGE  SendPage;\r
+   PGD_STARTPAGE  StartPage;\r
+   PGD_ENDDOC  EndDoc;\r
+   PGD_STARTDOC  StartDoc;\r
+   PGD_GETGLYPHMODE  GetGlyphMode;\r
+   PGD_SYNCHRONIZE  Synchronize;\r
+   PGD_SAVESCREENBITS  SaveScreenBits;\r
+   PGD_GETMODES  GetModes;\r
+   PGD_FREE  Free;\r
+   PGD_DESTROYFONT  DestroyFont;\r
+   PGD_QUERYFONTCAPS  QueryFontCaps;\r
+   PGD_LOADFONTFILE  LoadFontFile;\r
+   PGD_UNLOADFONTFILE  UnloadFontFile;\r
+   PGD_FONTMANAGEMENT  FontManagement;\r
+   PGD_QUERYTRUETYPETABLE  QueryTrueTypeTable;\r
+   PGD_QUERYTRUETYPEOUTLINE  QueryTrueTypeOutline;\r
+   PGD_GETTRUETYPEFILE  GetTrueTypeFile;\r
+   PGD_QUERYFONTFILE  QueryFontFile;\r
+   PGD_QUERYADVANCEWIDTHS  QueryAdvanceWidths;\r
+   PGD_SETPIXELFORMAT  SetPixelFormat;\r
+   PGD_DESCRIBEPIXELFORMAT  DescribePixelFormat;\r
+   PGD_SWAPBUFFERS  SwapBuffers;\r
+   PGD_STARTBANDING  StartBanding;\r
+   PGD_NEXTBAND  NextBand;\r
+   PGD_GETDIRECTDRAWINFO  GetDirectDrawInfo;\r
+   PGD_ENABLEDIRECTDRAW  EnableDirectDraw;\r
+   PGD_DISABLEDIRECTDRAW  DisableDirectDraw;\r
+   PGD_QUERYSPOOLTYPE  QuerySpoolType;\r
+   PGD_GRADIENTFILL  GradientFill;\r
+   PGD_SYNCHRONIZESURFACE SynchronizeSurface;\r
+   PGD_ALPHABLEND AlphaBlend;\r
+ } DRIVER_FUNCTIONS, *PDRIVER_FUNCTIONS;\r
\r
+ typedef struct _DC\r
+ {\r
 -\r
 -  struct _EDD_DIRECTDRAW_GLOBAL * pEDDgpl;\r
 -\r
++  HGDIOBJ     hHmgr;  // Handle for this DC object.\r
+   PVOID       pvEntry;\r
+   ULONG       lucExcLock;\r
+   ULONG       Tid;\r
\r
+   DHPDEV      PDev;\r
+   INT         DC_Type;\r
+   INT         DC_Flags;\r
 -  HDC         hSelf;\r
+   PDC_ATTR    pDc_Attr;\r
+   DC_ATTR     Dc_Attr;\r
\r
 -  \r
 -  HANDLE      hFile;  \r
++  struct _EDD_DIRECTDRAW_GLOBAL * pEDDgpl;\r
++\r
++  HDC         hSelf;  // Used only for MemoryDC & SaveDC.\r
+   HDC         hNext;\r
+   HSURF       FillPatternSurfaces[HS_DDI_MAX];\r
+   PGDIINFO    GDIInfo;\r
+   PDEVINFO    DevInfo;\r
+   HDEV        GDIDevice;\r
\r
+   DRIVER_FUNCTIONS  DriverFunctions;\r
+   UNICODE_STRING    DriverName;\r
+   HANDLE      DeviceDriver;\r
\r
+   CLIPOBJ     *CombinedClip;\r
\r
+   XLATEOBJ    *XlateBrush;\r
+   XLATEOBJ    *XlatePen;\r
\r
+   INT         saveLevel;\r
+   BOOL        IsIC;\r
\r
+   HPALETTE    PalIndexed;\r
\r
+   WIN_DC_INFO w;\r
++\r
++  HANDLE      hFile;\r
+   LPENHMETAHEADER emh;\r
+ } DC, *PDC;\r
++\r
  #endif\r
index 0000000,0d937b6..a652753
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,579 +1,521 @@@
 -    switch (Index)
 -    {
 -        case HDEVGETDATA_UNK_54C_8:
 -            return (DWORD)pEDDgpl->unk_54c[8];
 -
 -        case HDEVGETDATA_DWRESERVED19:
 -            return (DWORD)pEDDgpl->d3dNtHalCallbacks.dwReserved19;
 -
 -        case HDEVGETDATA_PALETTECALLBACKS_DWFLAGS:
 -            return (DWORD)pEDDgpl->ddPaletteCallbacks.dwFlags;
 -
 -        case HDEVGETDATA_DWRESERVED24:
 -            return (DWORD)pEDDgpl->d3dNtHalCallbacks.dwReserved24;
 -
 -        case HDEVGETDATA_UNK_54C_20:
 -            return (DWORD)pEDDgpl->unk_54c[20];
 -
 -        case DEVGETDATA_PALETTECALLBACKS_DWSIZE:
 -            return (DWORD)pEDDgpl->ddPaletteCallbacks.dwSize;
 -
 -        case HDEVGETDATA_UNK_70C:
 -            return (DWORD)pEDDgpl->unk_70C;
 -
 -        case HDEVGETDATA_SURFACECALLBACK_DWFLAGS:
 -            return (DWORD)pEDDgpl->ddSurfaceCallbacks.dwFlags;
 -
 -        case HDEVGETDATA_UNK_588:
 -            return (DWORD)pEDDgpl->unk_54c[15];
 -
 -        case HDEVGETDATA_UNK_01C_F400:
 -            return (DWORD)pEDDgpl->unk_01c[1] & 0x400;
 -
 -        case HDEVGETDATA_UNK_01C_F20000: 
 -            return (DWORD)pEDDgpl->unk_01c[1] & 0x20000;
 -
 -        case 0x0B:
 -            return (DWORD)pEDDgpl->unk_01c[1] & 0x1;
 -
 -        case 0x0C:
 -            return (DWORD)pEDDgpl->unk_01c[0];
 -
 -        case HDEVGETDATA_CDRIVERREF:
 -            return (DWORD) (pEDDgpl->cDriverReferences) ? TRUE : FALSE ;
 -
 -        case 0x11:
 -            return (DWORD)pEDDgpl->d3dNtHalCallbacks.dwReserved8 & 0x100;
 -
 -        case HDEVGETDATA_PFN_SETPALETTE:
 -            return (DWORD)pEDDgpl->ddSurfaceCallbacks.SetPalette;
 -
 -        case 0x13:
 -            return (DWORD)pEDDgpl->unk_54c[0x0A];
 -
 -        case 0x14:
 -            return (DWORD)pEDDgpl->unk_01c[1] & 0x80000;
 -
 -        default:
 -            break;
 -    }
+ /*
+  * COPYRIGHT:        See COPYING in the top level directory
+  * PROJECT:          ReactOS kernel
+  * PURPOSE:          Native driver enumate of dxeng implementation
+  * FILE:             subsys/win32k/ntddraw/dxeng.c
+  * PROGRAMER:        Magnus olsen (magnus@greatlord.com)
+  * REVISION HISTORY:
+  *       15/10-2007   Magnus Olsen
+  */
+ #include <w32k.h>
+ #include <debug.h>
+ ULONG gcEngFuncs = DXENG_INDEX_DxEngLoadImage + 1;
+ DRVFN gaEngFuncs [] =
+ {
+     {0, (PFN) NULL},
+     {DXENG_INDEX_DxEngNUIsTermSrv, (PFN)DxEngNUIsTermSrv},
+     {DXENG_INDEX_DxEngScreenAccessCheck, (PFN)DxEngScreenAccessCheck},
+     {DXENG_INDEX_DxEngRedrawDesktop, (PFN)DxEngRedrawDesktop},
+     {DXENG_INDEX_DxEngDispUniq, (PFN)DxEngDispUniq},
+     {DXENG_INDEX_DxEngIncDispUniq, (PFN)DxEngIncDispUniq},
+     {DXENG_INDEX_DxEngVisRgnUniq, (PFN)DxEngVisRgnUniq},
+     {DXENG_INDEX_DxEngLockShareSem, (PFN)DxEngLockShareSem},
+     {DXENG_INDEX_DxEngUnlockShareSem, (PFN)DxEngUnlockShareSem},
+     {DXENG_INDEX_DxEngEnumerateHdev, (PFN)DxEngEnumerateHdev},
+     {DXENG_INDEX_DxEngLockHdev, (PFN)DxEngLockHdev},
+     {DXENG_INDEX_DxEngUnlockHdev, (PFN)DxEngUnlockHdev},
+     {DXENG_INDEX_DxEngIsHdevLockedByCurrentThread, (PFN)DxEngIsHdevLockedByCurrentThread},
+     {DXENG_INDEX_DxEngReferenceHdev, (PFN)DxEngReferenceHdev},
+     {DXENG_INDEX_DxEngUnreferenceHdev, (PFN)DxEngUnreferenceHdev},
+     {DXENG_INDEX_DxEngGetDeviceGammaRamp, (PFN)DxEngGetDeviceGammaRamp},
+     {DXENG_INDEX_DxEngSetDeviceGammaRamp, (PFN)DxEngSetDeviceGammaRamp},
+     {DXENG_INDEX_DxEngSpTearDownSprites, (PFN)DxEngSpTearDownSprites},
+     {DXENG_INDEX_DxEngSpUnTearDownSprites, (PFN)DxEngSpUnTearDownSprites},
+     {DXENG_INDEX_DxEngSpSpritesVisible, (PFN)DxEngSpSpritesVisible},
+     {DXENG_INDEX_DxEngGetHdevData, (PFN)DxEngGetHdevData},
+     {DXENG_INDEX_DxEngSetHdevData, (PFN)DxEngSetHdevData},
+     {DXENG_INDEX_DxEngCreateMemoryDC, (PFN)DxEngCreateMemoryDC},
+     {DXENG_INDEX_DxEngGetDesktopDC, (PFN)DxEngGetDesktopDC},
+     {DXENG_INDEX_DxEngDeleteDC, (PFN)DxEngDeleteDC},
+     {DXENG_INDEX_DxEngCleanDC, (PFN)DxEngCleanDC},
+     {DXENG_INDEX_DxEngSetDCOwner, (PFN)DxEngSetDCOwner},
+     {DXENG_INDEX_DxEngLockDC, (PFN)DxEngLockDC},
+     {DXENG_INDEX_DxEngUnlockDC, (PFN)DxEngUnlockDC},
+     {DXENG_INDEX_DxEngSetDCState, (PFN)DxEngGetDCState},
+     {DXENG_INDEX_DxEngGetDCState, (PFN)DxEngGetDCState},
+     {DXENG_INDEX_DxEngSelectBitmap, (PFN)DxEngSelectBitmap},
+     {DXENG_INDEX_DxEngSetBitmapOwner, (PFN)DxEngSetBitmapOwner},
+     {DXENG_INDEX_DxEngDeleteSurface, (PFN)DxEngDeleteSurface},
+     {DXENG_INDEX_DxEngGetSurfaceData, (PFN)DxEngGetSurfaceData},
+     {DXENG_INDEX_DxEngAltLockSurface, (PFN)DxEngAltLockSurface},
+     {DXENG_INDEX_DxEngUploadPaletteEntryToSurface, (PFN)DxEngUploadPaletteEntryToSurface},
+     {DXENG_INDEX_DxEngMarkSurfaceAsDirectDraw, (PFN)DxEngMarkSurfaceAsDirectDraw},
+     {DXENG_INDEX_DxEngSelectPaletteToSurface, (PFN)DxEngSelectPaletteToSurface},
+     {DXENG_INDEX_DxEngSyncPaletteTableWithDevice, (PFN)DxEngSyncPaletteTableWithDevice},
+     {DXENG_INDEX_DxEngSetPaletteState, (PFN)DxEngSetPaletteState},
+     {DXENG_INDEX_DxEngGetRedirectionBitmap, (PFN)DxEngGetRedirectionBitmap},
+     {DXENG_INDEX_DxEngLoadImage, (PFN)DxEngLoadImage}
+ };
+ /************************************************************************/
+ /* DxEngNUIsTermSrv                                                     */
+ /************************************************************************/
+ /* Notes : Check see if termal server got a connections or not */
+ BOOL
+ DxEngNUIsTermSrv()
+ {
+     /* FIXME ReactOS does not suport terminal server yet, we can not check if we got a connections or not */
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngRedrawDesktop                                                   */
+ /************************************************************************/
+ /* Notes : it always return TRUE, and it update whole the screen (redaw current desktop) */
+ BOOL
+ DxEngRedrawDesktop()
+ {
+     /* FIXME add redraw code */
+     UNIMPLEMENTED;
+     return TRUE;
+ }
+ /************************************************************************/
+ /* DxEngDispUniq                                                        */
+ /************************************************************************/
+ /*  Notes : return the DisplayUniqVisrgn counter from gdishare memory  */
+ ULONG
+ DxEngDispUniq()
+ {
+     /* FIXME DisplayUniqVisrgn from gdishare memory */
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngVisRgnUniq                                                      */
+ /************************************************************************/
+ /* Notes :  return the VisRgnUniq counter for win32k */
+ ULONG
+ DxEngVisRgnUniq()
+ {
+     /* FIXME DisplayUniqVisrgn from gdishare memory */
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngEnumerateHdev                                                   */
+ /************************************************************************/
+ /* Enumate all drivers in win32k */
+ HDEV *
+ DxEngEnumerateHdev(HDEV *hdev)
+ {
+     /* FIXME Enumate all drivers in win32k */
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngGetDeviceGammaRamp                                              */
+ /************************************************************************/
+ /* same protypes NtGdiEngGetDeviceGammaRamp, diffent is we skipp the user mode checks and seh */
+ BOOL
+ DxEngGetDeviceGammaRamp(HDC hDC, LPVOID lpRamp)
+ {
+     /* FIXME redirect it to NtGdiEngGetDeviceGammaRamp internal call  */
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /*++
+ * @name DxEngLockDC
+ * @implemented
+ *
+ * The function DxEngLockDC lock a hdc from dxg.sys 
+ *
+ * @param HDC hDC
+ * The handle we need want lock
+ *
+ * @return 
+ * This api return PDC or NULL depns if it sussess lock the hdc or not
+ *
+ * @remarks.
+ * none
+ *
+ *--*/
+ PDC
+ DxEngLockDC(HDC hDC)
+ {
+     return DC_LockDc(hDC);
+ }
+ /*++
+ * @name DxEngUnlockDC
+ * @implemented
+ *
+ * The function DxEngUnlockDC Unlock a pDC (hdc) from dxg.sys 
+ * @param PDC pDC
+ * The handle we need unlock
+ *
+ * @return 
+ * This api always return TRUE if it sussess or not 
+ *
+ * @remarks.
+ * none
+ *
+ *--*/
+ BOOL
+ DxEngUnlockDC(PDC pDC)
+ {
+     DC_UnlockDc(pDC);
+     return TRUE;
+ }
+ /************************************************************************/
+ /* DxEngCreateMemoryDC                                                  */
+ /************************************************************************/
+ DWORD DxEngCreateMemoryDC(DWORD x1)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngScreenAccessCheck                                               */
+ /************************************************************************/
+ DWORD DxEngScreenAccessCheck()
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngLockShareSem                                                    */
+ /************************************************************************/
+ DWORD DxEngLockShareSem()
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngUnlockShareSem                                                  */
+ /************************************************************************/
+ DWORD DxEngUnlockShareSem()
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngLockHdev                                                        */
+ /************************************************************************/
+ DWORD DxEngLockHdev(DWORD x1)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngUnlockHdev                                                      */
+ /************************************************************************/
+ DWORD DxEngUnlockHdev(DWORD x1)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngReferenceHdev                                                   */
+ /************************************************************************/
+ DWORD DxEngReferenceHdev(DWORD x1)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngIsHdevLockedByCurrentThread                                     */
+ /************************************************************************/
+ DWORD DxEngIsHdevLockedByCurrentThread(DWORD x1)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngUnreferenceHdev                                                 */
+ /************************************************************************/
+ DWORD DxEngUnreferenceHdev(DWORD x1)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngSetDeviceGammaRamp                                              */
+ /************************************************************************/
+ DWORD DxEngSetDeviceGammaRamp(DWORD x1, DWORD x2, DWORD x3)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngSpTearDownSprites                                               */
+ /************************************************************************/
+ DWORD DxEngSpTearDownSprites(DWORD x1, DWORD x2, DWORD x3)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngSpUnTearDownSprites                                             */
+ /************************************************************************/
+ DWORD DxEngSpUnTearDownSprites(DWORD x1, DWORD x2, DWORD x3)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngSpSpritesVisible                                                */
+ /************************************************************************/
+ DWORD DxEngSpSpritesVisible(DWORD x1)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngGetHdevData                                                     */
+ /************************************************************************/
+ DWORD
+ DxEngGetHdevData(PEDD_DIRECTDRAW_GLOBAL pEDDgpl,
+                  DWORD Index)
+ {
++    UNIMPLEMENTED;
+     return 0;
+ }
+ /************************************************************************/
+ /* DxEngSetHdevData                                                     */
+ /************************************************************************/
+ DWORD DxEngSetHdevData(DWORD x1, DWORD x2, DWORD x3)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngGetDesktopDC                                                    */
+ /************************************************************************/
+ DWORD DxEngGetDesktopDC(DWORD x1, DWORD x2, DWORD x3)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngDeleteDC                                                        */
+ /************************************************************************/
+ DWORD DxEngDeleteDC(DWORD x1, DWORD x2)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngCleanDC                                                         */
+ /************************************************************************/
+ DWORD DxEngCleanDC(DWORD x1)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngSetDCOwner                                                      */
+ /************************************************************************/
+ DWORD DxEngSetDCOwner(DWORD x1, DWORD x2)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngSetDCState                                                      */
+ /************************************************************************/
+ DWORD DxEngSetDCState(DWORD x1, DWORD x2, DWORD x3)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngGetDCState                                                      */
+ /************************************************************************/
+ DWORD
+ DxEngGetDCState(HDC hDC,
+                 DWORD type)
+ {
+     PEDD_DIRECTDRAW_GLOBAL pEDDgpl = NULL;
+     PDC pDC = DC_LockDc(hDC);
+     if (pDC)
+     {
+         switch (type)
+         {
+             case 1:
+                 UNIMPLEMENTED;
+                 return 0;
+             case 2:
+                 UNIMPLEMENTED;
+                 return 0;
+             case 3:
+                 pEDDgpl = pDC->pEDDgpl;
+                 DC_UnlockDc(pDC);
+                 return (DWORD)pEDDgpl;
+             default:
+                 UNIMPLEMENTED;
+                 break;
+         }
+     }
+     return 0;
+ }
+ /************************************************************************/
+ /* DxEngSelectBitmap                                                    */
+ /************************************************************************/
+ DWORD DxEngSelectBitmap(DWORD x1, DWORD x2)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngSetBitmapOwner                                                  */
+ /************************************************************************/
+ DWORD DxEngSetBitmapOwner(DWORD x1, DWORD x2)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngDeleteSurface                                                   */
+ /************************************************************************/
+ DWORD DxEngDeleteSurface(DWORD x1)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngGetSurfaceData                                                  */
+ /************************************************************************/
+ DWORD DxEngGetSurfaceData(DWORD x1, DWORD x2)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngAltLockSurface                                                  */
+ /************************************************************************/
+ DWORD DxEngAltLockSurface(DWORD x1)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngUploadPaletteEntryToSurface                                     */
+ /************************************************************************/
+ DWORD DxEngUploadPaletteEntryToSurface(DWORD x1, DWORD x2,DWORD x3, DWORD x4)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngMarkSurfaceAsDirectDraw                                         */
+ /************************************************************************/
+ DWORD DxEngMarkSurfaceAsDirectDraw(DWORD x1, DWORD x2)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngSelectPaletteToSurface                                          */
+ /************************************************************************/
+ DWORD DxEngSelectPaletteToSurface(DWORD x1, DWORD x2)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngSyncPaletteTableWithDevice                                      */
+ /************************************************************************/
+ DWORD DxEngSyncPaletteTableWithDevice(DWORD x1, DWORD x2)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngSetPaletteState                                                 */
+ /************************************************************************/
+ DWORD DxEngSetPaletteState(DWORD x1, DWORD x2, DWORD x3)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngGetRedirectionBitmap                                            */
+ /************************************************************************/
+ DWORD DxEngGetRedirectionBitmap(DWORD x1)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngLoadImage                                                       */
+ /************************************************************************/
+ DWORD DxEngLoadImage(DWORD x1,DWORD x2)
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
+ /************************************************************************/
+ /* DxEngIncDispUniq                                                       */
+ /************************************************************************/
+ DWORD DxEngIncDispUniq()
+ {
+     UNIMPLEMENTED;
+     return FALSE;
+ }
@@@ -70,8 -70,8 +70,8 @@@ OBJ_TYPE_INFO ObjTypeInfo[] 
  {
    {0, 0,                     0,                       NULL},             /* 00 reserved entry */
    {1, sizeof(DC),            GDI_OBJECT_TAG_DC,       DC_Cleanup},       /* 01 DC */
-   {1, sizeof(DD_DIRECTDRAW), GDI_OBJECT_TAG_DDRAW,    DD_Cleanup},       /* 02 DD_DDRAW, should be moved away from gdi objects */
-   {1, sizeof(DD_SURFACE),    GDI_OBJECT_TAG_DDSURF,   DDSURF_Cleanup},   /* 03 DD_SURFACE, should be moved away from gdi objects */
 -  {0, 0,                     0,                       NULL},             /* 02 DD_DDRAW, unused, should it be here ? */
 -  {0, 0,                     0,                       NULL},             /* 03 DD_SURFACE, unused, should it be here ? */
++  {1, 0,                     0,                       0},                /* 02 DD_DDRAW, should be moved away from gdi objects */
++  {1, 0,                     0,                       0},                /* 03 DD_SURFACE, should be moved away from gdi objects */
    {1, sizeof(ROSRGNDATA),    GDI_OBJECT_TAG_REGION,   RGNDATA_Cleanup},  /* 04 REGION */
    {1, sizeof(BITMAPOBJ),     GDI_OBJECT_TAG_BITMAP,   BITMAP_Cleanup},   /* 05 BITMAP */
    {0, sizeof(DC),            GDI_OBJECT_TAG_CLIOBJ,   GDI_CleanupDummy}, /* 06 CLIOBJ: METADC,... FIXME: don't use DC struct */
@@@ -851,32 -851,11 +851,7 @@@ EngQuerySystemAttribute
     return FALSE;
  }
  
- /*
-  * @unimplemented
-  */
- FLATPTR STDCALL
- HeapVidMemAllocAligned(
-    IN LPVIDMEM lpVidMem,
-    IN DWORD dwWidth,
-    IN DWORD dwHeight,
-    IN LPSURFACEALIGNMENT lpAlignment,
-    OUT LPLONG lpNewPitch)
- {
-    UNIMPLEMENTED;
-    return 0;
- }
- /*
-  * @unimplemented
-  */
- VOID STDCALL
- VidMemFree(
-    IN LPVMEMHEAP pvmh,
-    IN FLATPTR ptr)
- {
-    UNIMPLEMENTED;
- }
  
 -
 -
 -
 -
  /*
   * @unimplemented
   */
@@@ -888,19 -867,8 +863,6 @@@ BRUSHOBJ_hGetColorTransform
     return NULL;
  }
  
- /*
-  * @unimplemented
-  */
- PVOID STDCALL
- EngAllocPrivateUserMem(
-    IN PDD_SURFACE_LOCAL  psl,
-    IN SIZE_T  cj,
-    IN ULONG  tag)
- {
-    UNIMPLEMENTED;
-    return NULL;
- }
 -
--
  /*
   * @unimplemented
   */
@@@ -922,17 -890,6 +884,8 @@@ EngDeleteFile
     return FALSE;
  }
  
- /*
-  * @unimplemented
-  */
- VOID STDCALL
- EngFreePrivateUserMem(
-    IN PDD_SURFACE_LOCAL  psl,
-    IN PVOID  pv)
- {
-    UNIMPLEMENTED;
- }
++
 +
  /*
   * @unimplemented
   */
@@@ -961,17 -918,6 +914,8 @@@ EngHangNotification
     return EHN_ERROR;
  }
  
- /*
-  * @unimplemented
-  */
- PDD_SURFACE_LOCAL STDCALL
- EngLockDirectDrawSurface(
-    IN HANDLE Surface)
- {
-    UNIMPLEMENTED;
-    return NULL;
- }
++
 +
  /*
   * @unimplemented
   */
@@@ -1062,17 -1008,6 +1006,7 @@@ EngStretchBltROP
     return FALSE;
  }
  
- /*
-  * @unimplemented
-  */
- BOOL STDCALL
- EngUnlockDirectDrawSurface(
-    IN PDD_SURFACE_LOCAL Surface)
- {
-    UNIMPLEMENTED;
-    return FALSE;
- }
 +
  /*
   * @unimplemented
   */
@@@ -2557,20 -2293,8 +2245,7 @@@ NtGdiGetEudcTimeStampEx
      return 0;
  }
  
-  /*
-  * @unimplemented
-  */
-  DWORD
- STDCALL
- NtGdiDvpGetVideoPortField(
-     IN HANDLE hVideoPort,
-     IN OUT PDD_GETVPORTFIELDDATA puGetVPortFieldData)
- {
-     UNIMPLEMENTED;
-     return 0;
- }
  
 -
   /*
   * @unimplemented
   */