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
a8ffa9ba
Commit
a8ffa9ba
authored
Apr 06, 2010
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ole32: Don't use in-memory structure layouts to build the wire data, define…
ole32: Don't use in-memory structure layouts to build the wire data, define wire-specific structures instead.
parent
d04c2ccb
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
39 additions
and
17 deletions
+39
-17
rpc.c
dlls/ole32/rpc.c
+39
-17
No files found.
dlls/ole32/rpc.c
View file @
a8ffa9ba
...
@@ -144,6 +144,28 @@ typedef struct
...
@@ -144,6 +144,28 @@ typedef struct
/* [size_is((size+7)&~7)] */
unsigned
char
data
[
1
];
/* [size_is((size+7)&~7)] */
unsigned
char
data
[
1
];
}
WIRE_ORPC_EXTENT
;
}
WIRE_ORPC_EXTENT
;
typedef
struct
{
ULONG
size
;
ULONG
reserved
;
unsigned
char
extent
[
1
];
}
WIRE_ORPC_EXTENT_ARRAY
;
typedef
struct
{
ULONG
version
;
ULONG
flags
;
ULONG
reserved1
;
GUID
cid
;
unsigned
char
extensions
[
1
];
}
WIRE_ORPCTHIS
;
typedef
struct
{
ULONG
flags
;
unsigned
char
extensions
[
1
];
}
WIRE_ORPCTHAT
;
struct
channel_hook_entry
struct
channel_hook_entry
{
{
struct
list
entry
;
struct
list
entry
;
...
@@ -503,10 +525,10 @@ static HRESULT WINAPI ServerRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface,
...
@@ -503,10 +525,10 @@ static HRESULT WINAPI ServerRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface,
extensions_size
=
ChannelHooks_ServerGetSize
(
&
message_state
->
channel_hook_info
,
extensions_size
=
ChannelHooks_ServerGetSize
(
&
message_state
->
channel_hook_info
,
&
channel_hook_data
,
&
channel_hook_count
,
&
extension_count
);
&
channel_hook_data
,
&
channel_hook_count
,
&
extension_count
);
msg
->
BufferLength
+=
FIELD_OFFSET
(
ORPCTHAT
,
extensions
)
+
4
;
msg
->
BufferLength
+=
FIELD_OFFSET
(
WIRE_ORPCTHAT
,
extensions
)
+
sizeof
(
DWORD
)
;
if
(
extensions_size
)
if
(
extensions_size
)
{
{
msg
->
BufferLength
+=
FIELD_OFFSET
(
ORPC_EXTENT_ARRAY
,
extent
)
+
2
*
sizeof
(
DWORD
)
+
extensions_size
;
msg
->
BufferLength
+=
FIELD_OFFSET
(
WIRE_ORPC_EXTENT_ARRAY
,
extent
[
2
*
sizeof
(
DWORD
)
+
extensions_size
])
;
if
(
extension_count
&
1
)
if
(
extension_count
&
1
)
msg
->
BufferLength
+=
FIELD_OFFSET
(
WIRE_ORPC_EXTENT
,
data
[
0
]);
msg
->
BufferLength
+=
FIELD_OFFSET
(
WIRE_ORPC_EXTENT
,
data
[
0
]);
}
}
...
@@ -523,7 +545,7 @@ static HRESULT WINAPI ServerRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface,
...
@@ -523,7 +545,7 @@ static HRESULT WINAPI ServerRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface,
status
=
I_RpcGetBuffer
(
msg
);
status
=
I_RpcGetBuffer
(
msg
);
orpcthat
=
msg
->
Buffer
;
orpcthat
=
msg
->
Buffer
;
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
FIELD_OFFSET
(
ORPCTHAT
,
extensions
);
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
FIELD_OFFSET
(
WIRE_
ORPCTHAT
,
extensions
);
orpcthat
->
flags
=
ORPCF_NULL
/* FIXME? */
;
orpcthat
->
flags
=
ORPCF_NULL
/* FIXME? */
;
...
@@ -533,10 +555,10 @@ static HRESULT WINAPI ServerRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface,
...
@@ -533,10 +555,10 @@ static HRESULT WINAPI ServerRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface,
if
(
extensions_size
)
if
(
extensions_size
)
{
{
ORPC_EXTENT_ARRAY
*
orpc_extent_array
=
msg
->
Buffer
;
WIRE_
ORPC_EXTENT_ARRAY
*
orpc_extent_array
=
msg
->
Buffer
;
orpc_extent_array
->
size
=
extension_count
;
orpc_extent_array
->
size
=
extension_count
;
orpc_extent_array
->
reserved
=
0
;
orpc_extent_array
->
reserved
=
0
;
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
FIELD_OFFSET
(
ORPC_EXTENT_ARRAY
,
extent
);
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
FIELD_OFFSET
(
WIRE_
ORPC_EXTENT_ARRAY
,
extent
);
/* NDR representation of orpc_extent_array->extent */
/* NDR representation of orpc_extent_array->extent */
*
(
DWORD
*
)
msg
->
Buffer
=
1
;
*
(
DWORD
*
)
msg
->
Buffer
=
1
;
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
sizeof
(
DWORD
);
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
sizeof
(
DWORD
);
...
@@ -645,10 +667,10 @@ static HRESULT WINAPI ClientRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface,
...
@@ -645,10 +667,10 @@ static HRESULT WINAPI ClientRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface,
extensions_size
=
ChannelHooks_ClientGetSize
(
&
message_state
->
channel_hook_info
,
extensions_size
=
ChannelHooks_ClientGetSize
(
&
message_state
->
channel_hook_info
,
&
channel_hook_data
,
&
channel_hook_count
,
&
extension_count
);
&
channel_hook_data
,
&
channel_hook_count
,
&
extension_count
);
msg
->
BufferLength
+=
FIELD_OFFSET
(
ORPCTHIS
,
extensions
)
+
4
;
msg
->
BufferLength
+=
FIELD_OFFSET
(
WIRE_ORPCTHIS
,
extensions
)
+
sizeof
(
DWORD
)
;
if
(
extensions_size
)
if
(
extensions_size
)
{
{
msg
->
BufferLength
+=
FIELD_OFFSET
(
ORPC_EXTENT_ARRAY
,
extent
)
+
2
*
sizeof
(
DWORD
)
+
extensions_size
;
msg
->
BufferLength
+=
FIELD_OFFSET
(
WIRE_ORPC_EXTENT_ARRAY
,
extent
[
2
*
sizeof
(
DWORD
)
+
extensions_size
])
;
if
(
extension_count
&
1
)
if
(
extension_count
&
1
)
msg
->
BufferLength
+=
FIELD_OFFSET
(
WIRE_ORPC_EXTENT
,
data
[
0
]);
msg
->
BufferLength
+=
FIELD_OFFSET
(
WIRE_ORPC_EXTENT
,
data
[
0
]);
}
}
...
@@ -703,7 +725,7 @@ static HRESULT WINAPI ClientRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface,
...
@@ -703,7 +725,7 @@ static HRESULT WINAPI ClientRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface,
if
(
status
==
RPC_S_OK
)
if
(
status
==
RPC_S_OK
)
{
{
orpcthis
=
msg
->
Buffer
;
orpcthis
=
msg
->
Buffer
;
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
FIELD_OFFSET
(
ORPCTHIS
,
extensions
);
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
FIELD_OFFSET
(
WIRE_
ORPCTHIS
,
extensions
);
orpcthis
->
version
.
MajorVersion
=
COM_MAJOR_VERSION
;
orpcthis
->
version
.
MajorVersion
=
COM_MAJOR_VERSION
;
orpcthis
->
version
.
MinorVersion
=
COM_MINOR_VERSION
;
orpcthis
->
version
.
MinorVersion
=
COM_MINOR_VERSION
;
...
@@ -720,7 +742,7 @@ static HRESULT WINAPI ClientRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface,
...
@@ -720,7 +742,7 @@ static HRESULT WINAPI ClientRpcChannelBuffer_GetBuffer(LPRPCCHANNELBUFFER iface,
ORPC_EXTENT_ARRAY
*
orpc_extent_array
=
msg
->
Buffer
;
ORPC_EXTENT_ARRAY
*
orpc_extent_array
=
msg
->
Buffer
;
orpc_extent_array
->
size
=
extension_count
;
orpc_extent_array
->
size
=
extension_count
;
orpc_extent_array
->
reserved
=
0
;
orpc_extent_array
->
reserved
=
0
;
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
FIELD_OFFSET
(
ORPC_EXTENT_ARRAY
,
extent
);
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
FIELD_OFFSET
(
WIRE_
ORPC_EXTENT_ARRAY
,
extent
);
/* NDR representation of orpc_extent_array->extent */
/* NDR representation of orpc_extent_array->extent */
*
(
DWORD
*
)
msg
->
Buffer
=
1
;
*
(
DWORD
*
)
msg
->
Buffer
=
1
;
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
sizeof
(
DWORD
);
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
sizeof
(
DWORD
);
...
@@ -1152,8 +1174,8 @@ static HRESULT unmarshal_ORPC_EXTENT_ARRAY(RPC_MESSAGE *msg, const char *end,
...
@@ -1152,8 +1174,8 @@ static HRESULT unmarshal_ORPC_EXTENT_ARRAY(RPC_MESSAGE *msg, const char *end,
DWORD
pointer_id
;
DWORD
pointer_id
;
DWORD
i
;
DWORD
i
;
memcpy
(
extensions
,
msg
->
Buffer
,
FIELD_OFFSET
(
ORPC_EXTENT_ARRAY
,
extent
));
memcpy
(
extensions
,
msg
->
Buffer
,
FIELD_OFFSET
(
WIRE_
ORPC_EXTENT_ARRAY
,
extent
));
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
FIELD_OFFSET
(
ORPC_EXTENT_ARRAY
,
extent
);
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
FIELD_OFFSET
(
WIRE_
ORPC_EXTENT_ARRAY
,
extent
);
if
((
const
char
*
)
msg
->
Buffer
+
2
*
sizeof
(
DWORD
)
>
end
)
if
((
const
char
*
)
msg
->
Buffer
+
2
*
sizeof
(
DWORD
)
>
end
)
return
RPC_E_INVALID_HEADER
;
return
RPC_E_INVALID_HEADER
;
...
@@ -1205,14 +1227,14 @@ static HRESULT unmarshal_ORPCTHIS(RPC_MESSAGE *msg, ORPCTHIS *orpcthis,
...
@@ -1205,14 +1227,14 @@ static HRESULT unmarshal_ORPCTHIS(RPC_MESSAGE *msg, ORPCTHIS *orpcthis,
*
first_wire_orpc_extent
=
NULL
;
*
first_wire_orpc_extent
=
NULL
;
if
(
msg
->
BufferLength
<
FIELD_OFFSET
(
ORPCTHIS
,
extensions
)
+
4
)
if
(
msg
->
BufferLength
<
FIELD_OFFSET
(
WIRE_ORPCTHIS
,
extensions
)
+
sizeof
(
DWORD
)
)
{
{
ERR
(
"invalid buffer length
\n
"
);
ERR
(
"invalid buffer length
\n
"
);
return
RPC_E_INVALID_HEADER
;
return
RPC_E_INVALID_HEADER
;
}
}
memcpy
(
orpcthis
,
msg
->
Buffer
,
FIELD_OFFSET
(
ORPCTHIS
,
extensions
));
memcpy
(
orpcthis
,
msg
->
Buffer
,
FIELD_OFFSET
(
WIRE_
ORPCTHIS
,
extensions
));
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
FIELD_OFFSET
(
ORPCTHIS
,
extensions
);
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
FIELD_OFFSET
(
WIRE_
ORPCTHIS
,
extensions
);
if
((
const
char
*
)
msg
->
Buffer
+
sizeof
(
DWORD
)
>
end
)
if
((
const
char
*
)
msg
->
Buffer
+
sizeof
(
DWORD
)
>
end
)
return
RPC_E_INVALID_HEADER
;
return
RPC_E_INVALID_HEADER
;
...
@@ -1256,14 +1278,14 @@ static HRESULT unmarshal_ORPCTHAT(RPC_MESSAGE *msg, ORPCTHAT *orpcthat,
...
@@ -1256,14 +1278,14 @@ static HRESULT unmarshal_ORPCTHAT(RPC_MESSAGE *msg, ORPCTHAT *orpcthat,
*
first_wire_orpc_extent
=
NULL
;
*
first_wire_orpc_extent
=
NULL
;
if
(
msg
->
BufferLength
<
FIELD_OFFSET
(
ORPCTHAT
,
extensions
)
+
4
)
if
(
msg
->
BufferLength
<
FIELD_OFFSET
(
WIRE_ORPCTHAT
,
extensions
)
+
sizeof
(
DWORD
)
)
{
{
ERR
(
"invalid buffer length
\n
"
);
ERR
(
"invalid buffer length
\n
"
);
return
RPC_E_INVALID_HEADER
;
return
RPC_E_INVALID_HEADER
;
}
}
memcpy
(
orpcthat
,
msg
->
Buffer
,
FIELD_OFFSET
(
ORPCTHAT
,
extensions
));
memcpy
(
orpcthat
,
msg
->
Buffer
,
FIELD_OFFSET
(
WIRE_
ORPCTHAT
,
extensions
));
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
FIELD_OFFSET
(
ORPCTHAT
,
extensions
);
msg
->
Buffer
=
(
char
*
)
msg
->
Buffer
+
FIELD_OFFSET
(
WIRE_
ORPCTHAT
,
extensions
);
if
((
const
char
*
)
msg
->
Buffer
+
sizeof
(
DWORD
)
>
end
)
if
((
const
char
*
)
msg
->
Buffer
+
sizeof
(
DWORD
)
>
end
)
return
RPC_E_INVALID_HEADER
;
return
RPC_E_INVALID_HEADER
;
...
...
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