Added dwFlags to lock_update private functions so we can pass
WRITEONLY/READONLY.
Added those flags to the internal Lock() calls.
Only copy the surface from screen to surface if not writeonly.
Restrict blitting between display window and surface to the
locked/unlocked rectangle and the clipwindow section.
Added defines for DDHAL_UNLOCKDATA/DDHAL_LOCKDATA, added calls to HAL
implementation.

diff --git a/include/ddrawi.h b/include/ddrawi.h
index 76fea03..edea856 100644
--- a/include/ddrawi.h
+++ b/include/ddrawi.h
@@ -538,6 +538,24 @@
     LPDDRAWI_DDRAWSURFACE_LCL	lpSurfTargLeft;
 } DDHAL_FLIPDATA;
 
+typedef struct _DDHAL_LOCKDATA {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpDDSurface;
+    DWORD			bHasRect;
+    RECTL			rArea;
+    LPVOID			lpSurfData;
+    HRESULT			ddRVal;
+    LPDDHALSURFCB_LOCK		Lock;
+    DWORD			dwFlags;
+} DDHAL_LOCKDATA;
+
+typedef struct _DDHAL_UNLOCKDATA {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpDDSurface;
+    HRESULT			ddRVal;
+    LPDDHALSURFCB_UNLOCK	Unlock;
+} DDHAL_UNLOCKDATA;
+
 typedef struct _DDHAL_BLTDATA {
     LPDDRAWI_DIRECTDRAW_GBL	lpDD;
     LPDDRAWI_DDRAWSURFACE_LCL	lpDDDestSurface;