Remove more stub from ntdraw and implement it, (untested) it is alot of stub that have been implemet. fill DD_CALLBACKS right in NtGdiDdCreateDirectDrawObject, and fix party the internal struct. 
implemet follow but not tested
- NtGdiDdCreateSurface, NtGdiDdDestroySurface 
  some part it need fill the info right before it call on DdCreateSurface
-  NtGdiDdFlip done
-  NtGdiDdGetScanLine done
-  NtGdiDdSetColorKey done
-  NtGdiDdUnlock done
-  NtGdiDdUpdateOverlay done
-  NtGdiDdSetExclusiveMode done (need setup the callback)
-  NtGdiDdLock done
Modified: trunk/reactos/subsys/win32k/include/intddraw.h
Modified: trunk/reactos/subsys/win32k/ntddraw/ddraw.c
Modified: trunk/reactos/subsys/win32k/ntddraw/stubs.c

Modified: trunk/reactos/subsys/win32k/include/intddraw.h
--- trunk/reactos/subsys/win32k/include/intddraw.h	2005-10-07 20:15:10 UTC (rev 18312)
+++ trunk/reactos/subsys/win32k/include/intddraw.h	2005-10-07 20:27:52 UTC (rev 18313)
@@ -8,6 +8,7 @@
 #define GDI_OBJECT_TYPE_DD_CLIPPER    0x00640000
 #define GDI_OBJECT_TYPE_DD_MOTIONCOMP 0x00650000
 
+
 typedef struct
 {
 	DD_SURFACE_LOCAL Local;
@@ -22,38 +23,62 @@
 {
 	DD_DIRECTDRAW_LOCAL Local;
 	DD_DIRECTDRAW_GLOBAL Global;
-	// Drv callbacks
-	PGD_GETDIRECTDRAWINFO           DrvGetDirectDrawInfo;
-	PGD_DISABLEDIRECTDRAW           DrvDisableDirectDraw;
+	// Drv callbacks		
+	PGD_GETDIRECTDRAWINFO            DrvGetDirectDrawInfo; 	
+	PGD_DISABLEDIRECTDRAW            DrvDisableDirectDraw;
+	PDD_GETDRIVERINFO                DdGetDriverInfo; 
+
 	// DD callbacks
-	PDD_CREATESURFACE               DdCreateSurface;
-	PDD_SETCOLORKEY                 DdDrvSetColorKey; // ?????
-	PDD_WAITFORVERTICALBLANK        DdWaitForVerticalBlank;
-	PDD_CANCREATESURFACE            DdCanCreateSurface;
-	PDD_CREATEPALETTE               DdCreatePalette;
-	PDD_GETSCANLINE                 DdGetScanLine;
-	PDD_MAPMEMORY                   DdMapMemory;
+	DD_CALLBACKS                     DD;
+
 	// Surface callbacks
-	PDD_SURFCB_DESTROYSURFACE	    DdDestroySurface;
-	PDD_SURFCB_FLIP                 DdFlip;
-	PDD_SURFCB_SETCLIPLIST          DdSetClipList;
-	PDD_SURFCB_LOCK                 DdLock;
-	PDD_SURFCB_UNLOCK               DdUnlock;
-	PDD_SURFCB_BLT                  DdBlt;
-	PDD_SURFCB_SETCOLORKEY          DdSetColorKey;
-	PDD_SURFCB_ADDATTACHEDSURFACE   DdAddAttachedSurface;
-	PDD_SURFCB_GETBLTSTATUS         DdGetBltStatus;
-	PDD_SURFCB_GETFLIPSTATUS        DdGetFlipStatus;
-	PDD_SURFCB_UPDATEOVERLAY        DdUpdateOverlay;
-	PDD_SURFCB_SETOVERLAYPOSITION   DdSetOverlayPosition;
-	PDD_SURFCB_SETPALETTE           DdSetPalette;
-	// Miscellaneous Callback Function
-	PDD_GETAVAILDRIVERMEMORY        DdGetAvailDriverMemory;
-	// NT callbacks 
-	DD_FREEDRIVERMEMORYDATA         DdFreeDriverMemory;
+	DD_SURFACECALLBACKS              Surf;
+
 	// Palette callbacks
-	PDD_PALCB_DESTROYPALETTE        DdDestroyPalette;
-	PDD_PALCB_SETENTRIES            DdSetEntries;
+	DD_PALETTECALLBACKS              Pal;
+	
+	// Color Control Callback 
+	PDD_COLORCB_COLORCONTROL         DdControlColor; 
+	// Miscellaneous Callback
+	PDD_GETAVAILDRIVERMEMORY         DdGetAvailDriverMemory;
+    // Kernel Callback 
+	PDD_KERNELCB_SYNCSURFACE         DdSyncSurfaceData; 
+	PDD_KERNELCB_SYNCVIDEOPORT       DdSyncVideoPortData;
+	// NT-based Callback 
+	PDD_FLIPTOGDISURFACE             DdFlipToGDISurface; 
+	PDD_FREEDRIVERMEMORY             DdFreeDriverMemory; 
+	PDD_SETEXCLUSIVEMODE             DdSetExclusiveMode; 
+	// Motion Compensation
+    PDD_MOCOMPCB_BEGINFRAME          DdMoCompBeginFrame; 
+    PDD_MOCOMPCB_CREATE              DdMoCompCreate; 
+	PDD_MOCOMPCB_DESTROY             DdMoCompDestroy; 
+	PDD_MOCOMPCB_ENDFRAME            DdMoCompEndFrame;
+	PDD_MOCOMPCB_GETCOMPBUFFINFO     DdMoCompGetBuffInfo; 
+	PDD_MOCOMPCB_GETFORMATS          DdMoCompGetFormats;
+	PDD_MOCOMPCB_GETGUIDS            DdMoCompGetGuids; 
+	PDD_MOCOMPCB_GETINTERNALINFO     DdMoCompGetInternalInfo; 
+	PDD_MOCOMPCB_QUERYSTATUS         DdMoCompQueryStatus; 
+	PDD_MOCOMPCB_RENDER              DdMoCompRender; 
+	// Video Port Callback 
+    PDD_VPORTCB_CANCREATEVIDEOPORT   DdVideoPortCanCreate;
+    PDD_VPORTCB_COLORCONTROL         DdVideoPortColorControl;
+    PDD_VPORTCB_CREATEVIDEOPORT      DdVideoPortCreate;
+    PDD_VPORTCB_DESTROYVPORT         DdVideoPortDestroy;
+    PDD_VPORTCB_FLIP                 DdVideoPortFlip;
+    PDD_VPORTCB_GETBANDWIDTH         DdVideoPortGetBandwidth;
+    PDD_VPORTCB_GETVPORTCONNECT      DdVideoPortGetConnectInfo;
+    PDD_VPORTCB_GETFIELD             DdVideoPortGetField;
+    PDD_VPORTCB_GETFLIPSTATUS        DdVideoPortGetFlipStatus;
+    PDD_VPORTCB_GETINPUTFORMATS      DdVideoPortGetInputFormats;
+    PDD_VPORTCB_GETLINE              DdVideoPortGetLine;
+    PDD_VPORTCB_GETOUTPUTFORMATS     DdVideoPortGetOutputFormats;
+    PDD_VPORTCB_GETSIGNALSTATUS      DdVideoPortGetSignalStatus;
+    PDD_VPORTCB_UPDATE               DdVideoPortUpdate;
+    PDD_VPORTCB_WAITFORSYNC          DdVideoPortWaitForSync;
+    // Notify Callback 
+    //LPDD_NOTIFYCALLBACK NotifyCallback
+
+
 	// D3D Device context callbacks
 	PD3DNTHAL_CONTEXTCREATECB       D3dContextCreate;
 	PD3DNTHAL_CONTEXTDESTROYCB      D3dContextDestroy;
@@ -63,6 +88,9 @@
 	PDD_SURFCB_DESTROYSURFACE       DdDestroyD3DBuffer;
 	PDD_SURFCB_LOCK                 DdLockD3DBuffer;
 	PDD_SURFCB_UNLOCK               DdUnlockD3DBuffer;
+	
+	
+	           
 } DD_DIRECTDRAW, *PDD_DIRECTDRAW;
 
 BOOL INTERNAL_CALL DD_Cleanup(PVOID pDD);

Modified: trunk/reactos/subsys/win32k/ntddraw/ddraw.c
--- trunk/reactos/subsys/win32k/ntddraw/ddraw.c	2005-10-07 20:15:10 UTC (rev 18312)
+++ trunk/reactos/subsys/win32k/ntddraw/ddraw.c	2005-10-07 20:27:52 UTC (rev 18313)
@@ -83,53 +83,67 @@
 
 	pDirectDraw->DrvGetDirectDrawInfo = pDC->DriverFunctions.GetDirectDrawInfo;
 	pDirectDraw->DrvDisableDirectDraw = pDC->DriverFunctions.DisableDirectDraw;
-
+	
+    /* DD_CALLBACKS setup */
+    pDirectDraw->DD.dwFlags = callbacks.dwFlags;
+	
+	/* DestroyDriver Unsuse in win2k or higher                         */            
+	if (callbacks.dwFlags & DDHAL_CB32_DESTROYDRIVER)
+	    pDirectDraw->DD.DestroyDriver = callbacks.DestroyDriver;
 	if (callbacks.dwFlags & DDHAL_CB32_CREATESURFACE)
-		pDirectDraw->DdCreateSurface = callbacks.CreateSurface;
+		pDirectDraw->DD.CreateSurface = callbacks.CreateSurface;
 	if (callbacks.dwFlags & DDHAL_CB32_SETCOLORKEY)
-		pDirectDraw->DdDrvSetColorKey = callbacks.SetColorKey;
+		pDirectDraw->DD.SetColorKey = callbacks.SetColorKey;
+	if (callbacks.dwFlags & DDHAL_CB32_SETMODE)
+		pDirectDraw->DD.SetMode = callbacks.SetMode;
 	if (callbacks.dwFlags & DDHAL_CB32_WAITFORVERTICALBLANK)
-		pDirectDraw->DdWaitForVerticalBlank = callbacks.WaitForVerticalBlank;
+		pDirectDraw->DD.WaitForVerticalBlank = callbacks.WaitForVerticalBlank;
 	if (callbacks.dwFlags & DDHAL_CB32_CANCREATESURFACE)
-		pDirectDraw->DdCanCreateSurface = callbacks.CanCreateSurface;
+		pDirectDraw->DD.CanCreateSurface = callbacks.CanCreateSurface;
 	if (callbacks.dwFlags & DDHAL_CB32_CREATEPALETTE)
-		pDirectDraw->DdCreatePalette = callbacks.CreatePalette;
+		pDirectDraw->DD.CreatePalette = callbacks.CreatePalette;
 	if (callbacks.dwFlags & DDHAL_CB32_GETSCANLINE)
-		pDirectDraw->DdGetScanLine = callbacks.GetScanLine;
+		pDirectDraw->DD.GetScanLine = callbacks.GetScanLine;
 	if (callbacks.dwFlags & DDHAL_CB32_MAPMEMORY)
-		pDirectDraw->DdMapMemory = callbacks.MapMemory;
+		pDirectDraw->DD.MapMemory = callbacks.MapMemory;
 
+	/* Surface Callbacks */
+    pDirectDraw->Surf.dwFlags = surface_callbacks.dwFlags;
+	
 	if (surface_callbacks.dwFlags & DDHAL_SURFCB32_DESTROYSURFACE)
-		pDirectDraw->DdDestroySurface = surface_callbacks.DestroySurface;
+		pDirectDraw->Surf.DestroySurface = surface_callbacks.DestroySurface;
 	if (surface_callbacks.dwFlags & DDHAL_SURFCB32_FLIP)
-		pDirectDraw->DdFlip = surface_callbacks.Flip;
+		pDirectDraw->Surf.Flip = surface_callbacks.Flip;
 	if (surface_callbacks.dwFlags & DDHAL_SURFCB32_SETCLIPLIST)
-		pDirectDraw->DdSetClipList = surface_callbacks.SetClipList;
+		pDirectDraw->Surf.SetClipList = surface_callbacks.SetClipList;
 	if (surface_callbacks.dwFlags & DDHAL_SURFCB32_LOCK)
-		pDirectDraw->DdLock = surface_callbacks.Lock;
+		pDirectDraw->Surf.Lock = surface_callbacks.Lock;
 	if (surface_callbacks.dwFlags & DDHAL_SURFCB32_UNLOCK)
-		pDirectDraw->DdUnlock = surface_callbacks.Unlock;
+		pDirectDraw->Surf.Unlock = surface_callbacks.Unlock;
 	if (surface_callbacks.dwFlags & DDHAL_SURFCB32_BLT)
-		pDirectDraw->DdBlt = surface_callbacks.Blt;
+		pDirectDraw->Surf.Blt = surface_callbacks.Blt;
+	/* DD Callbacks SetColorKey is same as Surface callback SetColorKey */
 	if (surface_callbacks.dwFlags & DDHAL_SURFCB32_SETCOLORKEY)
-		pDirectDraw->DdSetColorKey = surface_callbacks.SetColorKey;
+		pDirectDraw->Surf.SetColorKey = surface_callbacks.SetColorKey;
 	if (surface_callbacks.dwFlags & DDHAL_SURFCB32_ADDATTACHEDSURFACE)
-		pDirectDraw->DdAddAttachedSurface = surface_callbacks.AddAttachedSurface;
+		pDirectDraw->Surf.AddAttachedSurface = surface_callbacks.AddAttachedSurface;
 	if (surface_callbacks.dwFlags & DDHAL_SURFCB32_GETBLTSTATUS)
-		pDirectDraw->DdGetBltStatus = surface_callbacks.GetBltStatus;
+		pDirectDraw->Surf.GetBltStatus = surface_callbacks.GetBltStatus;
 	if (surface_callbacks.dwFlags & DDHAL_SURFCB32_GETFLIPSTATUS)
-		pDirectDraw->DdGetFlipStatus = surface_callbacks.GetFlipStatus;
+		pDirectDraw->Surf.GetFlipStatus = surface_callbacks.GetFlipStatus;
 	if (surface_callbacks.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY)
-		pDirectDraw->DdUpdateOverlay = surface_callbacks.UpdateOverlay;
+		pDirectDraw->Surf.UpdateOverlay = surface_callbacks.UpdateOverlay;
 	if (surface_callbacks.dwFlags & DDHAL_SURFCB32_SETOVERLAYPOSITION)
-		pDirectDraw->DdSetOverlayPosition = surface_callbacks.SetOverlayPosition;
+		pDirectDraw->Surf.SetOverlayPosition = surface_callbacks.SetOverlayPosition;
 	if (surface_callbacks.dwFlags & DDHAL_SURFCB32_SETPALETTE)
-		pDirectDraw->DdSetPalette = surface_callbacks.SetPalette;
-
+		pDirectDraw->Surf.SetPalette = surface_callbacks.SetPalette;
+	
+    /* Palette Callbacks */
+    pDirectDraw->Pal.dwFlags = palette_callbacks.dwFlags;
 	if (palette_callbacks.dwFlags & DDHAL_PALCB32_DESTROYPALETTE)
-		pDirectDraw->DdDestroyPalette = palette_callbacks.DestroyPalette;
+		pDirectDraw->Pal.DestroyPalette = palette_callbacks.DestroyPalette;
 	if (palette_callbacks.dwFlags & DDHAL_PALCB32_SETENTRIES)
-		pDirectDraw->DdSetEntries = palette_callbacks.SetEntries;
+		pDirectDraw->Pal.SetEntries = palette_callbacks.SetEntries;
 
 	GDIOBJ_UnlockObjByPtr(pDirectDraw);
 	DC_UnlockDc(pDC);
@@ -204,7 +218,265 @@
 	return TRUE;
 }
 
+
 /************************************************************************/
+/* DD CALLBACKS                                                         */
+/* FIXME NtGdiDdCreateSurface we do not call to ddCreateSurface         */
+/************************************************************************/
+
+DWORD STDCALL NtGdiDdCreateSurface(
+    HANDLE hDirectDrawLocal,
+    HANDLE *hSurface,
+    DDSURFACEDESC *puSurfaceDescription,
+    DD_SURFACE_GLOBAL *puSurfaceGlobalData,
+    DD_SURFACE_LOCAL *puSurfaceLocalData,
+    DD_SURFACE_MORE *puSurfaceMoreData,
+    PDD_CREATESURFACEDATA puCreateSurfaceData,
+    HANDLE *puhSurface
+)
+{
+	DWORD  ddRVal = DDHAL_DRIVER_NOTHANDLED;
+	/* DD_CREATESURFACEDATA surf; */
+
+	PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
+	if (pDirectDraw == NULL) 
+		return DDHAL_DRIVER_NOTHANDLED;
+
+	if (!(pDirectDraw->DD.dwFlags & DDHAL_CB32_CANCREATESURFACE))
+		ddRVal = DDHAL_DRIVER_NOTHANDLED;
+	else
+	{	
+	  UNIMPLEMENTED;
+	  /*
+	   ddRVal = pDirectDraw->DD.CreateSurface(&surf);
+	  */
+	}
+
+	GDIOBJ_UnlockObjByPtr(pDirectDraw);	
+	return ddRVal;
+}
+
+DWORD STDCALL NtGdiDdWaitForVerticalBlank(
+    HANDLE hDirectDrawLocal,
+    PDD_WAITFORVERTICALBLANKDATA puWaitForVerticalBlankData
+)
+{
+	DWORD  ddRVal;
+	PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
+	if (pDirectDraw == NULL) 
+		return DDHAL_DRIVER_NOTHANDLED;
+
+	if (!(pDirectDraw->DD.dwFlags & DDHAL_CB32_WAITFORVERTICALBLANK))
+		ddRVal = DDHAL_DRIVER_NOTHANDLED;
+	else	
+  	    ddRVal = pDirectDraw->DD.WaitForVerticalBlank(puWaitForVerticalBlankData);
+
+    GDIOBJ_UnlockObjByPtr(pDirectDraw);
+	return ddRVal;
+}
+
+DWORD STDCALL NtGdiDdCanCreateSurface(
+    HANDLE hDirectDrawLocal,
+    PDD_CANCREATESURFACEDATA puCanCreateSurfaceData
+)
+{
+	DWORD  ddRVal;
+
+	PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
+	if (pDirectDraw == NULL) 
+		return DDHAL_DRIVER_NOTHANDLED;
+
+	if (!(pDirectDraw->DD.dwFlags & DDHAL_CB32_CANCREATESURFACE))
+		ddRVal = DDHAL_DRIVER_NOTHANDLED;
+	else	
+	    ddRVal = pDirectDraw->DD.CanCreateSurface(puCanCreateSurfaceData);
+
+	GDIOBJ_UnlockObjByPtr(pDirectDraw);
+	return ddRVal;
+}
+
+DWORD STDCALL NtGdiDdGetScanLine(
+    HANDLE hDirectDrawLocal,
+    PDD_GETSCANLINEDATA puGetScanLineData
+)
+{
+	DWORD  ddRVal;
+
+	PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
+	if (pDirectDraw == NULL) 
+		return DDHAL_DRIVER_NOTHANDLED;
+
+	if (!(pDirectDraw->DD.dwFlags & DDHAL_CB32_GETSCANLINE))
+		ddRVal = DDHAL_DRIVER_NOTHANDLED;
+	else	
+	    ddRVal = pDirectDraw->DD.GetScanLine(puGetScanLineData);
+
+	GDIOBJ_UnlockObjByPtr(pDirectDraw);
+	return ddRVal;
+}
+
+
+
+/************************************************************************/
+/* Surface CALLBACKS                                                    */
+/* FIXME                                                                */
+/* NtGdiDdDestroySurface                                                */ 
+/************************************************************************/
+
+DWORD STDCALL NtGdiDdDestroySurface(
+    HANDLE hSurface,
+    BOOL bRealDestroy
+)
+{	
+	DWORD  ddRVal;
+
+	PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
+	if (pDirectDraw == NULL) 
+		return DDHAL_DRIVER_NOTHANDLED;
+
+	if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_DESTROYSURFACE))
+		ddRVal = DDHAL_DRIVER_NOTHANDLED;
+	else	
+	{
+		/* DD_DESTROYSURFACEDATA DestroySurf; */
+		UNIMPLEMENTED;
+        /* ddRVal = pDirectDraw->Surf.DestroySurface(DestroySurf); */
+	}
+
+    GDIOBJ_UnlockObjByPtr(pDirectDraw);
+    return ddRVal;			
+}
+
+DWORD STDCALL NtGdiDdFlip(
+    HANDLE hSurfaceCurrent,
+    HANDLE hSurfaceTarget,
+    HANDLE hSurfaceCurrentLeft,
+    HANDLE hSurfaceTargetLeft,
+    PDD_FLIPDATA puFlipData
+)
+{
+	DWORD  ddRVal;
+
+	PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceTarget, GDI_OBJECT_TYPE_DIRECTDRAW);
+	if (pDirectDraw == NULL) 
+		return DDHAL_DRIVER_NOTHANDLED;
+
+	if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_FLIP))
+		ddRVal = DDHAL_DRIVER_NOTHANDLED;
+	else
+        ddRVal = pDirectDraw->Surf.Flip(puFlipData);
+
+    GDIOBJ_UnlockObjByPtr(pDirectDraw);
+    return ddRVal;		
+}
+
+DWORD STDCALL NtGdiDdLock(
+    HANDLE hSurface,
+    PDD_LOCKDATA puLockData,
+    HDC hdcClip
+)
+{
+	DWORD  ddRVal;
+
+	PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
+	if (pDirectDraw == NULL) 
+		return DDHAL_DRIVER_NOTHANDLED;
+
+	if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_LOCK))
+		ddRVal = DDHAL_DRIVER_NOTHANDLED;
+	else
+        ddRVal = pDirectDraw->Surf.Lock(puLockData);
+
+    GDIOBJ_UnlockObjByPtr(pDirectDraw);
+    return ddRVal;		
+}
+
+
+DWORD STDCALL NtGdiDdSetColorKey(
+    HANDLE hSurface,
+    PDD_SETCOLORKEYDATA puSetColorKeyData
+)
+{
+	DWORD  ddRVal;
+
+	PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
+	if (pDirectDraw == NULL) 
+		return DDHAL_DRIVER_NOTHANDLED;
+
+	if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_SETCOLORKEY))
+		ddRVal = DDHAL_DRIVER_NOTHANDLED;
+	else
+        ddRVal = pDirectDraw->Surf.SetColorKey(puSetColorKeyData);
+
+    GDIOBJ_UnlockObjByPtr(pDirectDraw);
+    return ddRVal;	
+}
+
+DWORD STDCALL NtGdiDdBlt(
+    HANDLE hSurfaceDest,
+    HANDLE hSurfaceSrc,
+    PDD_BLTDATA puBltData
+)
+{
+    DWORD  ddRVal;
+
+    PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceDest, GDI_OBJECT_TYPE_DIRECTDRAW);
+	if (pDirectDraw == NULL) 
+		return DDHAL_DRIVER_NOTHANDLED;
+
+	if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_BLT))
+		ddRVal = DDHAL_DRIVER_NOTHANDLED;
+	else
+        ddRVal = pDirectDraw->Surf.Blt(puBltData);
+
+    GDIOBJ_UnlockObjByPtr(pDirectDraw);
+
+    return ddRVal;
+   }
+
+DWORD STDCALL NtGdiDdUpdateOverlay(
+    HANDLE hSurfaceDestination,
+    HANDLE hSurfaceSource,
+    PDD_UPDATEOVERLAYDATA puUpdateOverlayData
+)
+{
+	DWORD  ddRVal;
+
+    PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceDestination, GDI_OBJECT_TYPE_DIRECTDRAW);
+	if (pDirectDraw == NULL) 
+		return DDHAL_DRIVER_NOTHANDLED;
+
+	if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY))
+		ddRVal = DDHAL_DRIVER_NOTHANDLED;
+	else
+        ddRVal = pDirectDraw->Surf.UpdateOverlay(puUpdateOverlayData);
+
+    GDIOBJ_UnlockObjByPtr(pDirectDraw);
+    return ddRVal;
+}
+
+DWORD STDCALL NtGdiDdUnlock(
+    HANDLE hSurface,
+    PDD_UNLOCKDATA puUnlockData
+)
+{
+	DWORD  ddRVal;
+
+	PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
+	if (pDirectDraw == NULL) 
+		return DDHAL_DRIVER_NOTHANDLED;
+
+	if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY))
+		ddRVal = DDHAL_DRIVER_NOTHANDLED;
+	else
+        ddRVal = pDirectDraw->Surf.Unlock(puUnlockData);
+
+    GDIOBJ_UnlockObjByPtr(pDirectDraw);    
+	return ddRVal;
+}
+
+
+/************************************************************************/
 /* SURFACE OBJECT                                                       */
 /************************************************************************/
 
@@ -260,6 +532,13 @@
 	return GDIOBJ_FreeObj(hSurface, GDI_OBJECT_TYPE_DD_SURFACE);
 }
 
+
+
+/************************************************************************/
+/* DIRECT DRAW SURFACR END                                                   */
+/************************************************************************/
+
+
 /*
 BOOL STDCALL NtGdiDdAttachSurface(
     HANDLE hSurfaceFrom,
@@ -294,18 +573,12 @@
     PDD_GETDRIVERINFODATA puGetDriverInfoData)
 
 {
-	DWORD  pdwNumHeaps;
-	VIDEOMEMORY  *pvmList = NULL;
-    DWORD  pdwNumFourCC;
-    DWORD  *pdwFourCC = NULL;
 	DWORD  ddRVal;
 
 	PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
 
-    ddRVal = pDirectDraw->DrvGetDirectDrawInfo(
-                 pDirectDraw->Global.dhpdev,(PDD_HALINFO) puGetDriverInfoData,
-                 &pdwNumHeaps, pvmList, &pdwNumFourCC, pdwFourCC);
-
+	ddRVal = pDirectDraw->DdGetDriverInfo(puGetDriverInfoData);
+   
     GDIOBJ_UnlockObjByPtr(pDirectDraw);
 
 	return ddRVal;
@@ -313,33 +586,26 @@
 
 
 
-DWORD STDCALL NtGdiDdWaitForVerticalBlank(
-    HANDLE hDirectDrawLocal,
-    PDD_WAITFORVERTICALBLANKDATA puWaitForVerticalBlankData
-)
-{
-	DWORD  ddRVal;
-	PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
-	
-	ddRVal = pDirectDraw->DdWaitForVerticalBlank(puWaitForVerticalBlankData);
 
-    GDIOBJ_UnlockObjByPtr(pDirectDraw);
 
-	return ddRVal;
-}
 
 
-DWORD STDCALL NtGdiDdCanCreateSurface(
+
+
+
+
+ 
+DWORD STDCALL NtGdiDdGetAvailDriverMemory(
     HANDLE hDirectDrawLocal,
-    PDD_CANCREATESURFACEDATA puCanCreateSurfaceData
+    PDD_GETAVAILDRIVERMEMORYDATA puGetAvailDriverMemoryData
 )
 {
 	DWORD  ddRVal;
 
 	PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
 
-	ddRVal = pDirectDraw->DdCanCreateSurface(puCanCreateSurfaceData);
-
+    ddRVal = pDirectDraw->DdGetAvailDriverMemory(puGetAvailDriverMemoryData); 
+ 
 	GDIOBJ_UnlockObjByPtr(pDirectDraw);
 
 	return ddRVal;
@@ -347,48 +613,21 @@
 
 
 
-DWORD STDCALL NtGdiDdBlt(
-    HANDLE hSurfaceDest,
-    HANDLE hSurfaceSrc,
-    PDD_BLTDATA puBltData
-)
-{
- DWORD  ddRVal;
 
- PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceDest, GDI_OBJECT_TYPE_DIRECTDRAW);
-
- puBltData->lpDDDestSurface =  hSurfaceDest;
- puBltData->lpDDSrcSurface  =  hSurfaceSrc;
- puBltData->lpDD = pDirectDraw->Local.lpGbl;
-
- ddRVal = pDirectDraw->DdBlt(puBltData);
-
- GDIOBJ_UnlockObjByPtr(pDirectDraw);
-
- return ddRVal;
-}
-
- /* FIXME
-    this call is not implement yet  
-	where to get the pointer DdGetAvailDriverMemory(puGetAvailDriverMemoryData 
-	for the call in NtGdiDdCreateDirectDrawObject `??
-	or some where else ??
-	*/
- 
-DWORD STDCALL NtGdiDdGetAvailDriverMemory(
-    HANDLE hDirectDrawLocal,
-    PDD_GETAVAILDRIVERMEMORYDATA puGetAvailDriverMemoryData
+DWORD STDCALL NtGdiDdSetExclusiveMode(
+    HANDLE hDirectDraw,
+    PDD_SETEXCLUSIVEMODEDATA puSetExclusiveModeData
 )
 {
 	DWORD  ddRVal;
 
-	PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
+	PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDraw, GDI_OBJECT_TYPE_DIRECTDRAW);
 
-    ddRVal = pDirectDraw->DdGetAvailDriverMemory(puGetAvailDriverMemoryData); 
- 
-	GDIOBJ_UnlockObjByPtr(pDirectDraw);
+    ddRVal = pDirectDraw->DdSetExclusiveMode(puSetExclusiveModeData);
 
-	return ddRVal;
+    GDIOBJ_UnlockObjByPtr(pDirectDraw);
+    
+	return ddRVal;	
 }
 
 

Modified: trunk/reactos/subsys/win32k/ntddraw/stubs.c
--- trunk/reactos/subsys/win32k/ntddraw/stubs.c	2005-10-07 20:15:10 UTC (rev 18312)
+++ trunk/reactos/subsys/win32k/ntddraw/stubs.c	2005-10-07 20:27:52 UTC (rev 18313)
@@ -141,16 +141,7 @@
 	return 0;
 }
 
-/*
-HANDLE STDCALL NtGdiDdCreateDirectDrawObject(
-    HDC hdc
-)
-{
-	UNIMPLEMENTED
 
-	return 0;
-}
-*/
 
 HANDLE STDCALL NtGdiDdCreateMoComp(
     HANDLE hDirectDraw,
@@ -162,21 +153,7 @@
 	return 0;
 }
 
-DWORD STDCALL NtGdiDdCreateSurface(
-    HANDLE hDirectDraw,
-    HANDLE *hSurface,
-    DDSURFACEDESC *puSurfaceDescription,
-    DD_SURFACE_GLOBAL *puSurfaceGlobalData,
-    DD_SURFACE_LOCAL *puSurfaceLocalData,
-    DD_SURFACE_MORE *puSurfaceMoreData,
-    PDD_CREATESURFACEDATA puCreateSurfaceData,
-    HANDLE *puhSurface
-)
-{
-	UNIMPLEMENTED
 
-	return 0;
-}
 
 DWORD STDCALL NtGdiDdCreateSurfaceEx(
     HANDLE hDirectDraw,
@@ -189,40 +166,8 @@
 	return 0;
 }
 
-/*
-HANDLE STDCALL NtGdiDdCreateSurfaceObject(
-    HANDLE hDirectDrawLocal,
-    HANDLE hSurface,
-    PDD_SURFACE_LOCAL puSurfaceLocal,
-    PDD_SURFACE_MORE puSurfaceMore,
-    PDD_SURFACE_GLOBAL puSurfaceGlobal,
-    BOOL bComplete
-)
-{
-	UNIMPLEMENTED
 
-	return 0;
-}
 
-BOOL STDCALL NtGdiDdDeleteDirectDrawObject(
-    HANDLE hDirectDrawLocal
-)
-{
-	UNIMPLEMENTED
-
-	return 0;
-}
-
-BOOL STDCALL NtGdiDdDeleteSurfaceObject(
-    HANDLE hSurface
-)
-{
-	UNIMPLEMENTED
-
-	return 0;
-}
-*/
-
 DWORD STDCALL NtGdiDdDestroyD3DBuffer(
     HANDLE hSurface
 )
@@ -242,15 +187,7 @@
 	return 0;
 }
 
-DWORD STDCALL NtGdiDdDestroySurface(
-    HANDLE hSurface,
-    BOOL bRealDestroy
-)
-{
-	UNIMPLEMENTED
 
-	return 0;
-}
 
 DWORD STDCALL NtGdiDdEndMoCompFrame(
     HANDLE hMoComp,
@@ -262,18 +199,7 @@
 	return 0;
 }
 
-DWORD STDCALL NtGdiDdFlip(
-    HANDLE hSurfaceCurrent,
-    HANDLE hSurfaceTarget,
-    HANDLE hSurfaceCurrentLeft,
-    HANDLE hSurfaceTargetLeft,
-    PDD_FLIPDATA puFlipData
-)
-{
-	UNIMPLEMENTED
 
-	return 0;
-}
 
 DWORD STDCALL NtGdiDdFlipToGDISurface(
     HANDLE hDirectDraw,
@@ -378,26 +304,9 @@
 	return 0;
 }
 
-DWORD STDCALL NtGdiDdGetScanLine(
-    HANDLE hDirectDraw,
-    PDD_GETSCANLINEDATA puGetScanLineData
-)
-{
-	UNIMPLEMENTED
 
-	return 0;
-}
 
-DWORD STDCALL NtGdiDdLock(
-    HANDLE hSurface,
-    PDD_LOCKDATA puLockData,
-    HDC hdcClip
-)
-{
-	UNIMPLEMENTED
 
-	return 0;
-}
 
 DWORD STDCALL NtGdiDdLockD3D(
     HANDLE hSurface,
@@ -459,25 +368,9 @@
 	return 0;
 }
 
-DWORD STDCALL NtGdiDdSetColorKey(
-    HANDLE hSurface,
-    PDD_SETCOLORKEYDATA puSetColorKeyData
-)
-{
-	UNIMPLEMENTED
 
-	return 0;
-}
 
-DWORD STDCALL NtGdiDdSetExclusiveMode(
-    HANDLE hDirectDraw,
-    PDD_SETEXCLUSIVEMODEDATA puSetExclusiveModeData
-)
-{
-	UNIMPLEMENTED
 
-	return 0;
-}
 
 BOOL STDCALL NtGdiDdSetGammaRamp(
     HANDLE hDirectDraw,
@@ -509,15 +402,7 @@
 	UNIMPLEMENTED
 }
 
-DWORD STDCALL NtGdiDdUnlock(
-    HANDLE hSurface,
-    PDD_UNLOCKDATA puUnlockData
-)
-{
-	UNIMPLEMENTED
 
-	return 0;
-}
 
 DWORD STDCALL NtGdiDdUnlockD3D(
     HANDLE hSurface,
@@ -529,16 +414,7 @@
 	return 0;
 }
 
-DWORD STDCALL NtGdiDdUpdateOverlay(
-    HANDLE hSurfaceDestination,
-    HANDLE hSurfaceSource,
-    PDD_UPDATEOVERLAYDATA puUpdateOverlayData
-)
-{
-	UNIMPLEMENTED
 
-	return 0;
-}
 
 
 DWORD STDCALL NtGdiDdAlphaBlt(VOID)