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