| /* |
| * Copyright (C) 2000 Francois Gouget |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| #ifndef __WINE_RPCDCEP_H |
| #define __WINE_RPCDCEP_H |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| typedef struct _RPC_VERSION { |
| unsigned short MajorVersion; |
| unsigned short MinorVersion; |
| } RPC_VERSION; |
| |
| typedef struct _RPC_SYNTAX_IDENTIFIER { |
| GUID SyntaxGUID; |
| RPC_VERSION SyntaxVersion; |
| } RPC_SYNTAX_IDENTIFIER, *PRPC_SYNTAX_IDENTIFIER; |
| |
| typedef struct _RPC_MESSAGE |
| { |
| RPC_BINDING_HANDLE Handle; |
| ULONG DataRepresentation; |
| void* Buffer; |
| unsigned int BufferLength; |
| unsigned int ProcNum; |
| PRPC_SYNTAX_IDENTIFIER TransferSyntax; |
| void* RpcInterfaceInformation; |
| void* ReservedForRuntime; |
| RPC_MGR_EPV* ManagerEpv; |
| void* ImportContext; |
| ULONG RpcFlags; |
| } RPC_MESSAGE, *PRPC_MESSAGE; |
| |
| /* or'ed with ProcNum */ |
| #define RPC_FLAGS_VALID_BIT 0x00008000 |
| |
| #define RPC_CONTEXT_HANDLE_DEFAULT_GUARD ((void *)0xfffff00d) |
| |
| #define RPC_CONTEXT_HANDLE_DEFAULT_FLAGS 0x00000000 |
| #define RPC_CONTEXT_HANDLE_FLAGS 0x30000000 |
| #define RPC_CONTEXT_HANDLE_SERIALIZE 0x10000000 |
| #define RPC_CONTEXT_HANDLE_DONT_SERIALIZE 0x20000000 |
| #define RPC_TYPE_STRICT_CONTEXT_HANDLE 0x40000000 |
| |
| #define RPC_NCA_FLAGS_DEFAULT 0x00000000 |
| #define RPC_NCA_FLAGS_IDEMPOTENT 0x00000001 |
| #define RPC_NCA_FLAGS_BROADCAST 0x00000002 |
| #define RPC_NCA_FLAGS_MAYBE 0x00000004 |
| |
| #define RPC_BUFFER_COMPLETE 0x00001000 |
| #define RPC_BUFFER_PARTIAL 0x00002000 |
| #define RPC_BUFFER_EXTRA 0x00004000 |
| #define RPC_BUFFER_ASYNC 0x00008000 |
| #define RPC_BUFFER_NONOTIFY 0x00010000 |
| |
| #define RPCFLG_MESSAGE 0x01000000 |
| #define RPCFLG_HAS_MULTI_SYNTAXES 0x02000000 |
| #define RPCFLG_HAS_CALLBACK 0x04000000 |
| #define RPCFLG_AUTO_COMPLETE 0x08000000 |
| #define RPCFLG_LOCAL_CALL 0x10000000 |
| #define RPCFLG_INPUT_SYNCHRONOUS 0x20000000 |
| #define RPCFLG_ASYNCHRONOUS 0x40000000 |
| #define RPCFLG_NON_NDR 0x80000000 |
| |
| typedef void (__RPC_STUB *RPC_DISPATCH_FUNCTION)(PRPC_MESSAGE Message); |
| typedef RPC_STATUS (RPC_ENTRY *RPC_FORWARD_FUNCTION)(UUID *InterfaceId, RPC_VERSION *InterfaceVersion, UUID *ObjectId, unsigned char *Rpcpro, void **ppDestEndpoint); |
| |
| typedef struct |
| { |
| unsigned int DispatchTableCount; |
| RPC_DISPATCH_FUNCTION* DispatchTable; |
| LONG_PTR Reserved; |
| } RPC_DISPATCH_TABLE, *PRPC_DISPATCH_TABLE; |
| |
| typedef struct _RPC_PROTSEQ_ENDPOINT |
| { |
| unsigned char* RpcProtocolSequence; |
| unsigned char* Endpoint; |
| } RPC_PROTSEQ_ENDPOINT, *PRPC_PROTSEQ_ENDPOINT; |
| |
| #define NT351_INTERFACE_SIZE 0x40 |
| #define RPC_INTERFACE_HAS_PIPES 0x0001 |
| |
| typedef struct _RPC_SERVER_INTERFACE |
| { |
| unsigned int Length; |
| RPC_SYNTAX_IDENTIFIER InterfaceId; |
| RPC_SYNTAX_IDENTIFIER TransferSyntax; |
| PRPC_DISPATCH_TABLE DispatchTable; |
| unsigned int RpcProtseqEndpointCount; |
| PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint; |
| RPC_MGR_EPV* DefaultManagerEpv; |
| void const* InterpreterInfo; |
| unsigned int Flags; |
| } RPC_SERVER_INTERFACE, *PRPC_SERVER_INTERFACE; |
| |
| typedef struct _RPC_CLIENT_INTERFACE |
| { |
| unsigned int Length; |
| RPC_SYNTAX_IDENTIFIER InterfaceId; |
| RPC_SYNTAX_IDENTIFIER TransferSyntax; |
| PRPC_DISPATCH_TABLE DispatchTable; |
| unsigned int RpcProtseqEndpointCount; |
| PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint; |
| ULONG_PTR Reserved; |
| void const* InterpreterInfo; |
| unsigned int Flags; |
| } RPC_CLIENT_INTERFACE, *PRPC_CLIENT_INTERFACE; |
| |
| #define RPC_C_OPT_COOKIE_AUTH 7 |
| |
| typedef struct _RPC_C_OPT_COOKIE_AUTH_DESCRIPTOR |
| { |
| ULONG BufferSize; |
| char *Buffer; |
| } RPC_C_OPT_COOKIE_AUTH_DESCRIPTOR; |
| |
| #define TRANSPORT_TYPE_CN 0x01 |
| #define TRANSPORT_TYPE_DG 0x02 |
| #define TRANSPORT_TYPE_LPC 0x04 |
| #define TRANSPORT_TYPE_WMSG 0x08 |
| |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcNegotiateTransferSyntax( RPC_MESSAGE* Message ); |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcGetBuffer( RPC_MESSAGE* Message ); |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcGetBufferWithObject( RPC_MESSAGE* Message, UUID* ObjectUuid ); |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcSendReceive( RPC_MESSAGE* Message ); |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcFreeBuffer( RPC_MESSAGE* Message ); |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcSend( RPC_MESSAGE* Message ); |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcReceive( RPC_MESSAGE* Message ); |
| |
| RPCRTAPI void* RPC_ENTRY |
| I_RpcAllocate( unsigned int Size ); |
| RPCRTAPI void RPC_ENTRY |
| I_RpcFree( void* Object ); |
| |
| RPCRTAPI RPC_BINDING_HANDLE RPC_ENTRY |
| I_RpcGetCurrentCallHandle( void ); |
| |
| /* |
| * The platform SDK headers don't define these functions at all if WINNT is defined |
| * The MSVC6 headers define two different sets of functions : |
| * If WINNT and MSWMSG are defined, the NT versions are defined |
| * If WINNT is not defined, the windows 9x versions are defined. |
| * Note that the prototypes for I_RpcBindingSetAsync are different for each case. |
| * |
| * Wine defaults to the WinNT case and only defines these function is MSWMSG is |
| * defined. Defining the NT functions by default causes MIDL generated proxies |
| * to not compile. |
| */ |
| |
| #if 1 /* WINNT */ |
| #ifdef MSWMSG |
| |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcServerStartListening( HWND hWnd ); |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcServerStopListening( void ); |
| /* WINNT */ |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_GetThreadWindowHandle( HWND* hWnd ); |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcAsyncSendReceive( RPC_MESSAGE* Message, void* Context, HWND hWnd ); |
| |
| typedef RPC_STATUS (*RPC_BLOCKING_FN)(void* hWnd, void* Context, HANDLE hSyncEvent); |
| |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcBindingSetAsync( RPC_BINDING_HANDLE Binding, RPC_BLOCKING_FN BlockingFn ); |
| |
| RPCRTAPI UINT RPC_ENTRY |
| I_RpcWindowProc( void* hWnd, UINT Message, UINT wParam, ULONG lParam ); |
| |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcSetWMsgEndpoint( WCHAR* Endpoint ); |
| |
| #endif |
| |
| #else |
| |
| /* WIN9x */ |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcServerStartListening( void* hWnd ); |
| |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcServerStopListening( void ); |
| |
| typedef RPC_STATUS (*RPC_BLOCKING_FN)(void* hWnd, void* Context, void* hSyncEvent); |
| |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcBindingSetAsync( RPC_BINDING_HANDLE Binding, RPC_BLOCKING_FN BlockingFn, ULONG ServerTid ); |
| |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcSetThreadParams( int fClientFree, void* Context, void* hWndClient ); |
| |
| RPCRTAPI UINT RPC_ENTRY |
| I_RpcWindowProc( void* hWnd, unsigned int Message, unsigned int wParam, ULONG lParam ); |
| |
| #endif |
| |
| RPCRTAPI RPC_STATUS RPC_ENTRY |
| I_RpcBindingInqTransportType( RPC_BINDING_HANDLE Binding, unsigned int* Type ); |
| |
| RPCRTAPI LONG RPC_ENTRY I_RpcMapWin32Status(RPC_STATUS); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /*__WINE_RPCDCEP_H */ |