Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
815197f2
Commit
815197f2
authored
Jun 15, 2015
by
Nikolay Sivov
Committed by
Alexandre Julliard
Jun 15, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ole32: Marshal HDC as remotable handle.
parent
a66d6645
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
33 additions
and
99 deletions
+33
-99
usrmarshal.c
dlls/ole32/tests/usrmarshal.c
+32
-0
usrmarshal.c
dlls/ole32/usrmarshal.c
+1
-99
No files found.
dlls/ole32/tests/usrmarshal.c
View file @
815197f2
...
...
@@ -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
();
}
dlls/ole32/usrmarshal.c
View file @
815197f2
...
...
@@ -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.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment