2 * Copyright (C) 2000 Francois Gouget
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #ifndef __WINE_RPCDCEP_H
20 #define __WINE_RPCDCEP_H
26 typedef struct _RPC_VERSION
{
27 unsigned short MajorVersion
;
28 unsigned short MinorVersion
;
31 typedef struct _RPC_SYNTAX_IDENTIFIER
{
33 RPC_VERSION SyntaxVersion
;
34 } RPC_SYNTAX_IDENTIFIER
, *PRPC_SYNTAX_IDENTIFIER
;
36 typedef struct _RPC_MESSAGE
38 RPC_BINDING_HANDLE Handle
;
39 unsigned long DataRepresentation
;
41 unsigned int BufferLength
;
43 PRPC_SYNTAX_IDENTIFIER TransferSyntax
;
44 void* RpcInterfaceInformation
;
45 void* ReservedForRuntime
;
46 RPC_MGR_EPV
* ManagerEpv
;
48 unsigned long RpcFlags
;
49 } RPC_MESSAGE
, *PRPC_MESSAGE
;
51 #define RPC_CONTEXT_HANDLE_DEFAULT_GUARD ((void *)0xfffff00d)
53 #define RPC_CONTEXT_HANDLE_DEFAULT_FLAGS 0x00000000
54 #define RPC_CONTEXT_HANDLE_FLAGS 0x30000000
55 #define RPC_CONTEXT_HANDLE_SERIALIZE 0x10000000
56 #define RPC_CONTEXT_HANDLE_DONT_SERIALIZE 0x20000000
57 #define RPC_TYPE_STRICT_CONTEXT_HANDLE 0x40000000
59 #define RPC_NCA_FLAGS_DEFAULT 0x00000000
60 #define RPC_NCA_FLAGS_IDEMPOTENT 0x00000001
61 #define RPC_NCA_FLAGS_BROADCAST 0x00000002
62 #define RPC_NCA_FLAGS_MAYBE 0x00000004
64 #define RPC_BUFFER_COMPLETE 0x00001000
65 #define RPC_BUFFER_PARTIAL 0x00002000
66 #define RPC_BUFFER_EXTRA 0x00004000
67 #define RPC_BUFFER_ASYNC 0x00008000
68 #define RPC_BUFFER_NONOTIFY 0x00010000
70 #define RPCFLG_MESSAGE 0x01000000
71 #define RPCFLG_HAS_MULTI_SYNTAXES 0x02000000
72 #define RPCFLG_HAS_CALLBACK 0x04000000
73 #define RPCFLG_AUTO_COMPLETE 0x08000000
74 #define RPCFLG_LOCAL_CALL 0x10000000
75 #define RPCFLG_INPUT_SYNCHRONOUS 0x20000000
76 #define RPCFLG_ASYNCHRONOUS 0x40000000
77 #define RPCFLG_NON_NDR 0x80000000
79 typedef void (__RPC_STUB
*RPC_DISPATCH_FUNCTION
)(PRPC_MESSAGE Message
);
80 typedef RPC_STATUS (RPC_ENTRY
*RPC_FORWARD_FUNCTION
)(UUID
*InterfaceId
, RPC_VERSION
*InterfaceVersion
, UUID
*ObjectId
, unsigned char *Rpcpro
, void **ppDestEndpoint
);
84 unsigned int DispatchTableCount
;
85 RPC_DISPATCH_FUNCTION
* DispatchTable
;
87 } RPC_DISPATCH_TABLE
, *PRPC_DISPATCH_TABLE
;
89 typedef struct _RPC_PROTSEQ_ENDPOINT
91 unsigned char* RpcProtocolSequence
;
92 unsigned char* Endpoint
;
93 } RPC_PROTSEQ_ENDPOINT
, *PRPC_PROTSEQ_ENDPOINT
;
95 #define NT351_INTERFACE_SIZE 0x40
96 #define RPC_INTERFACE_HAS_PIPES 0x0001
98 typedef struct _RPC_SERVER_INTERFACE
101 RPC_SYNTAX_IDENTIFIER InterfaceId
;
102 RPC_SYNTAX_IDENTIFIER TransferSyntax
;
103 PRPC_DISPATCH_TABLE DispatchTable
;
104 unsigned int RpcProtseqEndpointCount
;
105 PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint
;
106 RPC_MGR_EPV
* DefaultManagerEpv
;
107 void const* InterpreterInfo
;
109 } RPC_SERVER_INTERFACE
, *PRPC_SERVER_INTERFACE
;
111 typedef struct _RPC_CLIENT_INTERFACE
114 RPC_SYNTAX_IDENTIFIER InterfaceId
;
115 RPC_SYNTAX_IDENTIFIER TransferSyntax
;
116 PRPC_DISPATCH_TABLE DispatchTable
;
117 unsigned int RpcProtseqEndpointCount
;
118 PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint
;
120 void const* InterpreterInfo
;
122 } RPC_CLIENT_INTERFACE
, *PRPC_CLIENT_INTERFACE
;
124 #define TRANSPORT_TYPE_CN 0x01
125 #define TRANSPORT_TYPE_DG 0x02
126 #define TRANSPORT_TYPE_LPC 0x04
127 #define TRANSPORT_TYPE_WMSG 0x08
129 RPCRTAPI RPC_STATUS RPC_ENTRY
130 I_RpcGetBuffer( RPC_MESSAGE
* Message
);
131 RPCRTAPI RPC_STATUS RPC_ENTRY
132 I_RpcGetBufferWithObject( RPC_MESSAGE
* Message
, UUID
* ObjectUuid
);
133 RPCRTAPI RPC_STATUS RPC_ENTRY
134 I_RpcSendReceive( RPC_MESSAGE
* Message
);
135 RPCRTAPI RPC_STATUS RPC_ENTRY
136 I_RpcFreeBuffer( RPC_MESSAGE
* Message
);
137 RPCRTAPI RPC_STATUS RPC_ENTRY
138 I_RpcSend( RPC_MESSAGE
* Message
);
139 RPCRTAPI RPC_STATUS RPC_ENTRY
140 I_RpcReceive( RPC_MESSAGE
* Message
);
142 RPCRTAPI
void* RPC_ENTRY
143 I_RpcAllocate( unsigned int Size
);
144 RPCRTAPI
void RPC_ENTRY
145 I_RpcFree( void* Object
);
147 RPCRTAPI RPC_BINDING_HANDLE RPC_ENTRY
148 I_RpcGetCurrentCallHandle( void );
151 * The platform SDK headers don't define these functions at all if WINNT is defined
152 * The MSVC6 headers define two different sets of functions :
153 * If WINNT and MSWMSG are defined, the NT versions are defined
154 * If WINNT is not defined, the windows 9x versions are defined.
155 * Note that the prototypes for I_RpcBindingSetAsync are different for each case.
157 * Wine defaults to the WinNT case and only defines these function is MSWMSG is
158 * defined. Defining the NT functions by default causes MIDL generated proxies
165 RPCRTAPI RPC_STATUS RPC_ENTRY
166 I_RpcServerStartListening( HWND hWnd
);
167 RPCRTAPI RPC_STATUS RPC_ENTRY
168 I_RpcServerStopListening( void );
170 RPCRTAPI RPC_STATUS RPC_ENTRY
171 I_GetThreadWindowHandle( HWND
* hWnd
);
172 RPCRTAPI RPC_STATUS RPC_ENTRY
173 I_RpcAsyncSendReceive( RPC_MESSAGE
* Message
, void* Context
, HWND hWnd
);
175 typedef RPC_STATUS (*RPC_BLOCKING_FN
)(void* hWnd
, void* Context
, HANDLE hSyncEvent
);
177 RPCRTAPI RPC_STATUS RPC_ENTRY
178 I_RpcBindingSetAsync( RPC_BINDING_HANDLE Binding
, RPC_BLOCKING_FN BlockingFn
);
180 RPCRTAPI UINT RPC_ENTRY
181 I_RpcWindowProc( void* hWnd
, UINT Message
, UINT wParam
, ULONG lParam
);
183 RPCRTAPI RPC_STATUS RPC_ENTRY
184 I_RpcSetWMsgEndpoint( WCHAR
* Endpoint
);
186 RPCRTAPI RPC_STATUS RPC_ENTRY
187 I_RpcBindingInqTransportType( RPC_BINDING_HANDLE Binding
, unsigned int* Type
);
189 RPCRTAPI LONG RPC_ENTRY
I_RpcMapWin32Status(RPC_STATUS
);
196 RPCRTAPI RPC_STATUS RPC_ENTRY
197 I_RpcServerStartListening( void* hWnd
);
199 RPCRTAPI RPC_STATUS RPC_ENTRY
200 I_RpcServerStopListening( void );
202 typedef RPC_STATUS (*RPC_BLOCKING_FN
)(void* hWnd
, void* Context
, void* hSyncEvent
);
204 RPCRTAPI RPC_STATUS RPC_ENTRY
205 I_RpcBindingSetAsync( RPC_BINDING_HANDLE Binding
, RPC_BLOCKING_FN BlockingFn
, unsigned long ServerTid
);
207 RPCRTAPI RPC_STATUS RPC_ENTRY
208 I_RpcSetThreadParams( int fClientFree
, void* Context
, void* hWndClient
);
210 RPCRTAPI UINT RPC_ENTRY
211 I_RpcWindowProc( void* hWnd
, unsigned int Message
, unsigned int wParam
, unsigned long lParam
);
219 #endif /*__WINE_RPCDCEP_H */