xref: /reactos/sdk/include/psdk/rpcdcep.h (revision c2c66aff)
1 /*
2  * Copyright (C) 2000 Francois Gouget
3  *
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.
8  *
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.
13  *
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
17  */
18 
19 #ifndef __WINE_RPCDCEP_H
20 #define __WINE_RPCDCEP_H
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 typedef struct _RPC_VERSION {
27     unsigned short MajorVersion;
28     unsigned short MinorVersion;
29 } RPC_VERSION;
30 
31 typedef struct _RPC_SYNTAX_IDENTIFIER {
32     GUID SyntaxGUID;
33     RPC_VERSION SyntaxVersion;
34 } RPC_SYNTAX_IDENTIFIER, *PRPC_SYNTAX_IDENTIFIER;
35 
36 typedef struct _RPC_MESSAGE
37 {
38     RPC_BINDING_HANDLE Handle;
39     ULONG DataRepresentation;
40     void* Buffer;
41     unsigned int BufferLength;
42     unsigned int ProcNum;
43     PRPC_SYNTAX_IDENTIFIER TransferSyntax;
44     void* RpcInterfaceInformation;
45     void* ReservedForRuntime;
46     RPC_MGR_EPV* ManagerEpv;
47     void* ImportContext;
48     ULONG RpcFlags;
49 } RPC_MESSAGE, *PRPC_MESSAGE;
50 
51 /* or'ed with ProcNum */
52 #define RPC_FLAGS_VALID_BIT         0x00008000
53 
54 #define RPC_CONTEXT_HANDLE_DEFAULT_GUARD ((void *)0xfffff00d)
55 
56 #define RPC_CONTEXT_HANDLE_DEFAULT_FLAGS    0x00000000
57 #define RPC_CONTEXT_HANDLE_FLAGS            0x30000000
58 #define RPC_CONTEXT_HANDLE_SERIALIZE        0x10000000
59 #define RPC_CONTEXT_HANDLE_DONT_SERIALIZE   0x20000000
60 #define RPC_TYPE_STRICT_CONTEXT_HANDLE      0x40000000
61 
62 #define RPC_NCA_FLAGS_DEFAULT       0x00000000
63 #define RPC_NCA_FLAGS_IDEMPOTENT    0x00000001
64 #define RPC_NCA_FLAGS_BROADCAST     0x00000002
65 #define RPC_NCA_FLAGS_MAYBE         0x00000004
66 
67 #define RPC_BUFFER_COMPLETE         0x00001000
68 #define RPC_BUFFER_PARTIAL          0x00002000
69 #define RPC_BUFFER_EXTRA            0x00004000
70 #define RPC_BUFFER_ASYNC            0x00008000
71 #define RPC_BUFFER_NONOTIFY         0x00010000
72 
73 #define RPCFLG_MESSAGE              0x01000000
74 #define RPCFLG_HAS_MULTI_SYNTAXES   0x02000000
75 #define RPCFLG_HAS_CALLBACK         0x04000000
76 #define RPCFLG_AUTO_COMPLETE        0x08000000
77 #define RPCFLG_LOCAL_CALL           0x10000000
78 #define RPCFLG_INPUT_SYNCHRONOUS    0x20000000
79 #define RPCFLG_ASYNCHRONOUS         0x40000000
80 #define RPCFLG_NON_NDR              0x80000000
81 
82 typedef void  (__RPC_STUB *RPC_DISPATCH_FUNCTION)(PRPC_MESSAGE Message);
83 typedef RPC_STATUS (RPC_ENTRY *RPC_FORWARD_FUNCTION)(UUID *InterfaceId, RPC_VERSION *InterfaceVersion, UUID *ObjectId, unsigned char *Rpcpro, void **ppDestEndpoint);
84 
85 typedef struct
86 {
87     unsigned int DispatchTableCount;
88     RPC_DISPATCH_FUNCTION* DispatchTable;
89     LONG_PTR Reserved;
90 } RPC_DISPATCH_TABLE, *PRPC_DISPATCH_TABLE;
91 
92 typedef struct _RPC_PROTSEQ_ENDPOINT
93 {
94     unsigned char* RpcProtocolSequence;
95     unsigned char* Endpoint;
96 } RPC_PROTSEQ_ENDPOINT, *PRPC_PROTSEQ_ENDPOINT;
97 
98 #define NT351_INTERFACE_SIZE 0x40
99 #define RPC_INTERFACE_HAS_PIPES 0x0001
100 
101 typedef struct _RPC_SERVER_INTERFACE
102 {
103     unsigned int Length;
104     RPC_SYNTAX_IDENTIFIER InterfaceId;
105     RPC_SYNTAX_IDENTIFIER TransferSyntax;
106     PRPC_DISPATCH_TABLE DispatchTable;
107     unsigned int RpcProtseqEndpointCount;
108     PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;
109     RPC_MGR_EPV* DefaultManagerEpv;
110     void const* InterpreterInfo;
111     unsigned int Flags;
112 } RPC_SERVER_INTERFACE, *PRPC_SERVER_INTERFACE;
113 
114 typedef struct _RPC_CLIENT_INTERFACE
115 {
116     unsigned int Length;
117     RPC_SYNTAX_IDENTIFIER InterfaceId;
118     RPC_SYNTAX_IDENTIFIER TransferSyntax;
119     PRPC_DISPATCH_TABLE DispatchTable;
120     unsigned int RpcProtseqEndpointCount;
121     PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;
122     ULONG_PTR Reserved;
123     void const* InterpreterInfo;
124     unsigned int Flags;
125 } RPC_CLIENT_INTERFACE, *PRPC_CLIENT_INTERFACE;
126 
127 #define RPC_C_OPT_COOKIE_AUTH 7
128 
129 typedef struct _RPC_C_OPT_COOKIE_AUTH_DESCRIPTOR
130 {
131     ULONG BufferSize;
132     char *Buffer;
133 } RPC_C_OPT_COOKIE_AUTH_DESCRIPTOR;
134 
135 #define TRANSPORT_TYPE_CN   0x01
136 #define TRANSPORT_TYPE_DG   0x02
137 #define TRANSPORT_TYPE_LPC  0x04
138 #define TRANSPORT_TYPE_WMSG 0x08
139 
140 RPCRTAPI RPC_STATUS RPC_ENTRY
141   I_RpcNegotiateTransferSyntax( RPC_MESSAGE* Message );
142 RPCRTAPI RPC_STATUS RPC_ENTRY
143   I_RpcGetBuffer( RPC_MESSAGE* Message );
144 RPCRTAPI RPC_STATUS RPC_ENTRY
145   I_RpcGetBufferWithObject( RPC_MESSAGE* Message, UUID* ObjectUuid );
146 RPCRTAPI RPC_STATUS RPC_ENTRY
147   I_RpcSendReceive( RPC_MESSAGE* Message );
148 RPCRTAPI RPC_STATUS RPC_ENTRY
149   I_RpcFreeBuffer( RPC_MESSAGE* Message );
150 RPCRTAPI RPC_STATUS RPC_ENTRY
151   I_RpcSend( RPC_MESSAGE* Message );
152 RPCRTAPI RPC_STATUS RPC_ENTRY
153   I_RpcReceive( RPC_MESSAGE* Message );
154 
155 RPCRTAPI void* RPC_ENTRY
156   I_RpcAllocate( unsigned int Size );
157 RPCRTAPI void RPC_ENTRY
158   I_RpcFree( void* Object );
159 
160 RPCRTAPI RPC_BINDING_HANDLE RPC_ENTRY
161   I_RpcGetCurrentCallHandle( void );
162 
163 /*
164  * The platform SDK headers don't define these functions at all if WINNT is defined
165  * The MSVC6 headers define two different sets of functions :
166  *  If WINNT and MSWMSG are defined, the NT versions are defined
167  *  If WINNT is not defined, the windows 9x versions are defined.
168  * Note that the prototypes for I_RpcBindingSetAsync are different for each case.
169  *
170  * Wine defaults to the WinNT case and only defines these function is MSWMSG is
171  *  defined. Defining the NT functions by default causes MIDL generated proxies
172  *  to not compile.
173  */
174 
175 #if 1  /* WINNT */
176 #ifdef MSWMSG
177 
178 RPCRTAPI RPC_STATUS RPC_ENTRY
179   I_RpcServerStartListening( HWND hWnd );
180 RPCRTAPI RPC_STATUS RPC_ENTRY
181   I_RpcServerStopListening( void );
182 /* WINNT */
183 RPCRTAPI RPC_STATUS RPC_ENTRY
184   I_GetThreadWindowHandle( HWND* hWnd );
185 RPCRTAPI RPC_STATUS RPC_ENTRY
186   I_RpcAsyncSendReceive( RPC_MESSAGE* Message, void* Context, HWND hWnd );
187 
188 typedef RPC_STATUS (*RPC_BLOCKING_FN)(void* hWnd, void* Context, HANDLE hSyncEvent);
189 
190 RPCRTAPI RPC_STATUS RPC_ENTRY
191   I_RpcBindingSetAsync( RPC_BINDING_HANDLE Binding, RPC_BLOCKING_FN BlockingFn );
192 
193 RPCRTAPI UINT RPC_ENTRY
194   I_RpcWindowProc( void* hWnd, UINT Message, UINT wParam, ULONG lParam );
195 
196 RPCRTAPI RPC_STATUS RPC_ENTRY
197   I_RpcSetWMsgEndpoint( WCHAR* Endpoint );
198 
199 #endif
200 
201 #else
202 
203 /* WIN9x */
204 RPCRTAPI RPC_STATUS RPC_ENTRY
205   I_RpcServerStartListening( void* hWnd );
206 
207 RPCRTAPI RPC_STATUS RPC_ENTRY
208   I_RpcServerStopListening( void );
209 
210 typedef RPC_STATUS (*RPC_BLOCKING_FN)(void* hWnd, void* Context, void* hSyncEvent);
211 
212 RPCRTAPI RPC_STATUS RPC_ENTRY
213   I_RpcBindingSetAsync( RPC_BINDING_HANDLE Binding, RPC_BLOCKING_FN BlockingFn, ULONG ServerTid );
214 
215 RPCRTAPI RPC_STATUS RPC_ENTRY
216   I_RpcSetThreadParams( int fClientFree, void* Context, void* hWndClient );
217 
218 RPCRTAPI UINT RPC_ENTRY
219   I_RpcWindowProc( void* hWnd, unsigned int Message, unsigned int wParam, ULONG lParam );
220 
221 #endif
222 
223 RPCRTAPI RPC_STATUS RPC_ENTRY
224   I_RpcBindingInqTransportType( RPC_BINDING_HANDLE Binding, unsigned int* Type );
225 
226 RPCRTAPI LONG RPC_ENTRY I_RpcMapWin32Status(RPC_STATUS);
227 
228 #ifdef __cplusplus
229 }
230 #endif
231 
232 #endif /*__WINE_RPCDCEP_H */
233