ole32: Marshal HDC as remotable handle.
This commit is contained in:
parent
a66d664505
commit
815197f28c
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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.@]
|
||||
|
@ -759,105 +760,6 @@ void __RPC_USER HICON_UserFree(ULONG *pFlags, HICON *phIcon)
|
|||
FIXME(":stub\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* 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.@]
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue