basic NT4 DirectDraw implemet and it is untested 
- NtGdiDdGetBltStatus
- NtGdiDdGetFlipStatus
- NtGdiDdSetOverlayPosition

Write some code for NtGdiDdDestroySurface and NtGdiDdCreateSurface, we got now basic all nt4 api implemet and unstested  for directdraw in the kernel
Modified: trunk/reactos/subsys/win32k/ntddraw/ddraw.c
Modified: trunk/reactos/subsys/win32k/ntddraw/stubs.c

Modified: trunk/reactos/subsys/win32k/ntddraw/ddraw.c
--- trunk/reactos/subsys/win32k/ntddraw/ddraw.c	2005-10-07 22:20:50 UTC (rev 18316)
+++ trunk/reactos/subsys/win32k/ntddraw/ddraw.c	2005-10-07 22:50:26 UTC (rev 18317)
@@ -236,7 +236,7 @@
 )
 {
 	DWORD  ddRVal = DDHAL_DRIVER_NOTHANDLED;
-	/* DD_CREATESURFACEDATA surf; */
+	
 
 	PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
 	if (pDirectDraw == NULL) 
@@ -245,11 +245,8 @@
 	if (!(pDirectDraw->DD.dwFlags & DDHAL_CB32_CANCREATESURFACE))
 		ddRVal = DDHAL_DRIVER_NOTHANDLED;
 	else
-	{	
-	  UNIMPLEMENTED;
-	  /*
-	   ddRVal = pDirectDraw->DD.CreateSurface(&surf);
-	  */
+	{	  
+	   ddRVal = pDirectDraw->DD.CreateSurface(puCreateSurfaceData);	 
 	}
 
 	GDIOBJ_UnlockObjByPtr(pDirectDraw);	
@@ -338,9 +335,18 @@
 		ddRVal = DDHAL_DRIVER_NOTHANDLED;
 	else	
 	{
-		/* DD_DESTROYSURFACEDATA DestroySurf; */
-		UNIMPLEMENTED;
-        /* ddRVal = pDirectDraw->Surf.DestroySurface(DestroySurf); */
+		DD_DESTROYSURFACEDATA DestroySurf; 
+	
+		/* FIXME 
+		 * bRealDestroy 
+		 * are we doing right ??
+		 */
+        DestroySurf.lpDD =  &pDirectDraw->Global;
+
+        DestroySurf.lpDDSurface = hSurface;  // ?
+        DestroySurf.DestroySurface = pDirectDraw->Surf.DestroySurface;		
+		
+        ddRVal = pDirectDraw->Surf.DestroySurface(&DestroySurf); 
 	}
 
     GDIOBJ_UnlockObjByPtr(pDirectDraw);
@@ -474,7 +480,46 @@
     return ddRVal;	
 }
 
+DWORD STDCALL NtGdiDdGetBltStatus(
+    HANDLE hSurface,
+    PDD_GETBLTSTATUSDATA puGetBltStatusData
+)
+{
+	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_GETBLTSTATUS))
+		ddRVal = DDHAL_DRIVER_NOTHANDLED;
+	else
+        ddRVal = pDirectDraw->Surf.GetBltStatus(puGetBltStatusData);
+
+    GDIOBJ_UnlockObjByPtr(pDirectDraw);
+    return ddRVal;		
+}
+
+DWORD STDCALL NtGdiDdGetFlipStatus(
+    HANDLE hSurface,
+    PDD_GETFLIPSTATUSDATA puGetFlipStatusData
+)
+{
+    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_GETFLIPSTATUS))
+		ddRVal = DDHAL_DRIVER_NOTHANDLED;
+	else
+        ddRVal = pDirectDraw->Surf.GetFlipStatus(puGetFlipStatusData);
+
+    GDIOBJ_UnlockObjByPtr(pDirectDraw);
+    return ddRVal;		
+}
+
 DWORD STDCALL NtGdiDdUpdateOverlay(
     HANDLE hSurfaceDestination,
     HANDLE hSurfaceSource,
@@ -496,8 +541,28 @@
     return ddRVal;
 }
 
+DWORD STDCALL NtGdiDdSetOverlayPosition(
+    HANDLE hSurfaceSource,
+    HANDLE hSurfaceDestination,
+    PDD_SETOVERLAYPOSITIONDATA puSetOverlayPositionData
+)
+{
+	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_SETOVERLAYPOSITION))
+		ddRVal = DDHAL_DRIVER_NOTHANDLED;
+	else
+        ddRVal = pDirectDraw->Surf.SetOverlayPosition(puSetOverlayPositionData);
+
+    GDIOBJ_UnlockObjByPtr(pDirectDraw);
+    return ddRVal;
+}
+
+
 /************************************************************************/
 /* SURFACE OBJECT                                                       */
 /************************************************************************/

Modified: trunk/reactos/subsys/win32k/ntddraw/stubs.c
--- trunk/reactos/subsys/win32k/ntddraw/stubs.c	2005-10-07 22:20:50 UTC (rev 18316)
+++ trunk/reactos/subsys/win32k/ntddraw/stubs.c	2005-10-07 22:50:26 UTC (rev 18317)
@@ -203,15 +203,7 @@
 }
 
 
-DWORD STDCALL NtGdiDdGetBltStatus(
-    HANDLE hSurface,
-    PDD_GETBLTSTATUSDATA puGetBltStatusData
-)
-{
-	UNIMPLEMENTED
 
-	return 0;
-}
 
 HDC STDCALL NtGdiDdGetDC(
     HANDLE hSurface,
@@ -245,15 +237,7 @@
 	return 0;
 }
 
-DWORD STDCALL NtGdiDdGetFlipStatus(
-    HANDLE hSurface,
-    PDD_GETFLIPSTATUSDATA puGetFlipStatusData
-)
-{
-	UNIMPLEMENTED
 
-	return 0;
-}
 
 DWORD STDCALL NtGdiDdGetInternalMoCompInfo(
     HANDLE hDirectDraw,
@@ -374,16 +358,7 @@
 	return 0;
 }
 
-DWORD STDCALL NtGdiDdSetOverlayPosition(
-    HANDLE hSurfaceSource,
-    HANDLE hSurfaceDestination,
-    PDD_SETOVERLAYPOSITIONDATA puSetOverlayPositionData
-)
-{
-	UNIMPLEMENTED
 
-	return 0;
-}
 
 VOID STDCALL NtGdiDdUnattachSurface(
     HANDLE hSurface,