Nikolay Sivov : ole32: Marshal HDC as remotable handle.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jun 15 08:49:09 CDT 2015


Module: wine
Branch: master
Commit: 815197f28caa9683838a97621680b1411122cb35
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=815197f28caa9683838a97621680b1411122cb35

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon Jun 15 11:10:33 2015 +0300

ole32: Marshal HDC as remotable handle.

---

 dlls/ole32/tests/usrmarshal.c |  32 ++++++++++++++
 dlls/ole32/usrmarshal.c       | 100 +-----------------------------------------
 2 files changed, 33 insertions(+), 99 deletions(-)

diff --git a/dlls/ole32/tests/usrmarshal.c b/dlls/ole32/tests/usrmarshal.c
index 83dedc7..53cd9fe 100644
--- a/dlls/ole32/tests/usrmarshal.c
+++ b/dlls/ole32/tests/usrmarshal.c
@@ -866,6 +866,37 @@ static void test_marshal_SNB(void)
     g_expect_user_free = FALSE;
 }
 
+static void test_marshal_HDC(void)
+{
+    MIDL_STUB_MESSAGE stub_msg;
+    HDC hdc = GetDC(0), hdc2;
+    USER_MARSHAL_CB umcb;
+    RPC_MESSAGE rpc_msg;
+    unsigned char *buffer;
+    wireHDC wirehdc;
+    ULONG size;
+
+    init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_LOCAL);
+    size = HDC_UserSize(&umcb.Flags, 0, &hdc);
+    ok(size == sizeof(*wirehdc), "Wrong size %d\n", size);
+
+    buffer = HeapAlloc(GetProcessHeap(), 0, size);
+    init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_LOCAL);
+    HDC_UserMarshal(&umcb.Flags, buffer, &hdc);
+    wirehdc = (wireHDC)buffer;
+    ok(wirehdc->fContext == WDT_INPROC_CALL, "Context should be WDT_INPROC_CALL instead of 0x%08x\n", wirehdc->fContext);
+    ok(wirehdc->u.hInproc == (LONG_PTR)hdc, "Marshaled value should be %p instead of %x\n", hdc, wirehdc->u.hRemote);
+
+    init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_LOCAL);
+    HDC_UserUnmarshal(&umcb.Flags, buffer, &hdc2);
+    ok(hdc == hdc2, "Didn't unmarshal properly\n");
+    HeapFree(GetProcessHeap(), 0, buffer);
+
+    init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_LOCAL);
+    HDC_UserFree(&umcb.Flags, &hdc2);
+    ReleaseDC(0, hdc);
+}
+
 START_TEST(usrmarshal)
 {
     CoInitialize(NULL);
@@ -879,6 +910,7 @@ START_TEST(usrmarshal)
     test_marshal_WdtpInterfacePointer();
     test_marshal_STGMEDIUM();
     test_marshal_SNB();
+    test_marshal_HDC();
 
     CoUninitialize();
 }
diff --git a/dlls/ole32/usrmarshal.c b/dlls/ole32/usrmarshal.c
index d22f9f7..8f895f8 100644
--- a/dlls/ole32/usrmarshal.c
+++ b/dlls/ole32/usrmarshal.c
@@ -341,6 +341,7 @@ static void handle_UserFree(ULONG *pFlags, HANDLE *phMenu)
 IMPL_WIREM_HANDLE(HACCEL)
 IMPL_WIREM_HANDLE(HMENU)
 IMPL_WIREM_HANDLE(HWND)
+IMPL_WIREM_HANDLE(HDC)
 
 /******************************************************************************
  *           HGLOBAL_UserSize [OLE32.@]
@@ -760,105 +761,6 @@ void __RPC_USER HICON_UserFree(ULONG *pFlags, HICON *phIcon)
 }
 
 /******************************************************************************
- *           HDC_UserSize [OLE32.@]
- *
- * Calculates the buffer size required to marshal an HDC.
- *
- * PARAMS
- *  pFlags       [I] Flags. See notes.
- *  StartingSize [I] Starting size of the buffer. This value is added on to
- *                   the buffer size required for the clip format.
- *  phGlobal     [I] HDC to size.
- *
- * RETURNS
- *  The buffer size required to marshal an HDC plus the starting size.
- *
- * NOTES
- *  Even though the function is documented to take a pointer to a ULONG in
- *  pFlags, it actually takes a pointer to a USER_MARSHAL_CB structure, of which
- *  the first parameter is a ULONG.
- *  This function is only intended to be called by the RPC runtime.
- */
-ULONG __RPC_USER HDC_UserSize(ULONG *pFlags, ULONG StartingSize, HDC *phdc)
-{
-    FIXME(":stub\n");
-    return StartingSize;
-}
-
-/******************************************************************************
- *           HDC_UserMarshal [OLE32.@]
- *
- * Marshals an HDC into a buffer.
- *
- * PARAMS
- *  pFlags  [I] Flags. See notes.
- *  pBuffer [I] Buffer to marshal the clip format into.
- *  phdc    [I] HDC to marshal.
- *
- * RETURNS
- *  The end of the marshaled data in the buffer.
- *
- * NOTES
- *  Even though the function is documented to take a pointer to a ULONG in
- *  pFlags, it actually takes a pointer to a USER_MARSHAL_CB structure, of which
- *  the first parameter is a ULONG.
- *  This function is only intended to be called by the RPC runtime.
- */
-unsigned char * __RPC_USER HDC_UserMarshal(ULONG *pFlags, unsigned char *pBuffer, HDC *phdc)
-{
-    FIXME(":stub\n");
-    return pBuffer;
-}
-
-/******************************************************************************
- *           HDC_UserUnmarshal [OLE32.@]
- *
- * Unmarshals an HDC from a buffer.
- *
- * PARAMS
- *  pFlags   [I] Flags. See notes.
- *  pBuffer  [I] Buffer to marshal the clip format from.
- *  phdc     [O] Address that receive the unmarshaled HDC.
- *
- * RETURNS
- *  The end of the marshaled data in the buffer.
- *
- * NOTES
- *  Even though the function is documented to take a pointer to an ULONG in
- *  pFlags, it actually takes a pointer to a USER_MARSHAL_CB structure, of which
- *  the first parameter is an ULONG.
- *  This function is only intended to be called by the RPC runtime.
- */
-unsigned char * __RPC_USER HDC_UserUnmarshal(ULONG *pFlags, unsigned char *pBuffer, HDC *phdc)
-{
-    FIXME(":stub\n");
-    return pBuffer;
-}
-
-/******************************************************************************
- *           HDC_UserFree [OLE32.@]
- *
- * Frees an unmarshaled HDC.
- *
- * PARAMS
- *  pFlags   [I] Flags. See notes.
- *  phdc     [I] HDC to free.
- *
- * RETURNS
- *  The end of the marshaled data in the buffer.
- *
- * NOTES
- *  Even though the function is documented to take a pointer to a ULONG in
- *  pFlags, it actually takes a pointer to a USER_MARSHAL_CB structure, of
- *  which the first parameter is a ULONG.
- *  This function is only intended to be called by the RPC runtime.
- */
-void __RPC_USER HDC_UserFree(ULONG *pFlags, HDC *phdc)
-{
-    FIXME(":stub\n");
-}
-
-/******************************************************************************
  *           HPALETTE_UserSize [OLE32.@]
  *
  * Calculates the buffer size required to marshal a palette.




More information about the wine-cvs mailing list