diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c
index 9d472ef..ad93932 100644
--- a/dlls/gdi32/driver.c
+++ b/dlls/gdi32/driver.c
@@ -125,6 +125,7 @@ static struct graphics_driver *create_driver( HMODULE module )
         GET_FUNC(IntersectClipRect);
         GET_FUNC(InvertRgn);
         GET_FUNC(LineTo);
+        GET_FUNC(LockDIBSection);
         GET_FUNC(MoveTo);
         GET_FUNC(ModifyWorldTransform);
         GET_FUNC(OffsetClipRgn);
@@ -193,6 +194,7 @@ static struct graphics_driver *create_driver( HMODULE module )
         GET_FUNC(StrokePath);
         GET_FUNC(SwapBuffers);
         GET_FUNC(UnrealizePalette);
+        GET_FUNC(UnlockDIBSection);
         GET_FUNC(WidenPath);
 
         /* OpenGL32 */
diff --git a/dlls/gdi32/enhmfdrv/init.c b/dlls/gdi32/enhmfdrv/init.c
index 4f418e1..57856d5 100644
--- a/dlls/gdi32/enhmfdrv/init.c
+++ b/dlls/gdi32/enhmfdrv/init.c
@@ -84,6 +84,7 @@ static const DC_FUNCTIONS EMFDRV_Funcs =
     EMFDRV_IntersectClipRect,        /* pIntersectClipRect */
     EMFDRV_InvertRgn,                /* pInvertRgn */
     EMFDRV_LineTo,                   /* pLineTo */
+    NULL,                            /* pLockDIBSection */
     EMFDRV_ModifyWorldTransform,     /* pModifyWorldTransform */
     EMFDRV_MoveTo,                   /* pMoveTo */
     EMFDRV_OffsetClipRgn,            /* pOffsetClipRgn */
@@ -151,6 +152,7 @@ static const DC_FUNCTIONS EMFDRV_Funcs =
     EMFDRV_StrokeAndFillPath,        /* pStrokeAndFillPath */
     EMFDRV_StrokePath,               /* pStrokePath */
     NULL,                            /* pSwapBuffers */
+    NULL,                            /* pUnlockDIBSection */
     NULL,                            /* pUnrealizePalette */
     EMFDRV_WidenPath                 /* pWidenPath */
 };
diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h
index e43ac30..6d06e02 100644
--- a/dlls/gdi32/gdi_private.h
+++ b/dlls/gdi32/gdi_private.h
@@ -97,6 +97,9 @@ typedef struct tagGDIOBJHDR
 
 typedef struct { int opaque; } *PHYSDEV;  /* PHYSDEV is an opaque pointer */
 
+/* For pLockDIBSection() */
+enum { DIB_Status_None, DIB_Status_InSync, DIB_Status_GdiMod, DIB_Status_AppMod };
+
 typedef struct tagDC_FUNCS
 {
     INT      (*pAbortDoc)(PHYSDEV);
@@ -150,6 +153,7 @@ typedef struct tagDC_FUNCS
     INT      (*pIntersectClipRect)(PHYSDEV,INT,INT,INT,INT);
     BOOL     (*pInvertRgn)(PHYSDEV,HRGN);
     BOOL     (*pLineTo)(PHYSDEV,INT,INT);
+    HBITMAP  (*pLockDIBSection)(PHYSDEV,BOOL,BOOL);
     BOOL     (*pModifyWorldTransform)(PHYSDEV,const XFORM*,INT);
     BOOL     (*pMoveTo)(PHYSDEV,INT,INT);
     INT      (*pOffsetClipRgn)(PHYSDEV,INT,INT);
@@ -219,6 +223,7 @@ typedef struct tagDC_FUNCS
     BOOL     (*pStrokeAndFillPath)(PHYSDEV);
     BOOL     (*pStrokePath)(PHYSDEV);
     BOOL     (*pSwapBuffers)(PHYSDEV);
+    VOID     (*pUnlockDIBSection)(PHYSDEV,BOOL);
     BOOL     (*pUnrealizePalette)(HPALETTE);
     BOOL     (*pWidenPath)(PHYSDEV);
 
diff --git a/dlls/gdi32/mfdrv/init.c b/dlls/gdi32/mfdrv/init.c
index e939ce1..88e102d 100644
--- a/dlls/gdi32/mfdrv/init.c
+++ b/dlls/gdi32/mfdrv/init.c
@@ -84,6 +84,7 @@ static const DC_FUNCTIONS MFDRV_Funcs =
     MFDRV_IntersectClipRect,         /* pIntersectClipRect */
     MFDRV_InvertRgn,                 /* pInvertRgn */
     MFDRV_LineTo,                    /* pLineTo */
+    NULL,                            /* pLockDIBSection */
     NULL,                            /* pModifyWorldTransform */
     MFDRV_MoveTo,                    /* pMoveTo */
     MFDRV_OffsetClipRgn,             /* pOffsetClipRgn */
@@ -151,6 +152,7 @@ static const DC_FUNCTIONS MFDRV_Funcs =
     MFDRV_StrokeAndFillPath,         /* pStrokeAndFillPath */
     MFDRV_StrokePath,                /* pStrokePath */
     NULL,                            /* pSwapBuffers */
+    NULL,                            /* pUnlockDIBSection */
     NULL,                            /* pUnrealizePalette */
     MFDRV_WidenPath                  /* pWidenPath */
 };
diff --git a/dlls/winex11.drv/winex11.drv.spec b/dlls/winex11.drv/winex11.drv.spec
index 6a6c173..abb9279 100644
--- a/dlls/winex11.drv/winex11.drv.spec
+++ b/dlls/winex11.drv/winex11.drv.spec
@@ -29,6 +29,7 @@
 @ cdecl GetTextExtentExPoint(ptr ptr long long ptr ptr ptr) X11DRV_GetTextExtentExPoint
 @ cdecl GetTextMetrics(ptr ptr) X11DRV_GetTextMetrics
 @ cdecl LineTo(ptr long long) X11DRV_LineTo
+@ cdecl LockDIBSection(ptr long long) X11DRV_LockDIBSection
 @ cdecl PaintRgn(ptr long) X11DRV_PaintRgn
 @ cdecl PatBlt(ptr long long long long long) X11DRV_PatBlt
 @ cdecl Pie(ptr long long long long long long long long) X11DRV_Pie
@@ -59,6 +60,7 @@
 @ cdecl SetTextColor(ptr long) X11DRV_SetTextColor
 @ cdecl StretchBlt(ptr long long long long ptr long long long long long) X11DRV_StretchBlt
 @ cdecl SwapBuffers(ptr) X11DRV_SwapBuffers
+@ cdecl UnlockDIBSection(ptr long) X11DRV_UnlockDIBSection
 @ cdecl UnrealizePalette(long) X11DRV_UnrealizePalette
 
 # USER driver
