/* * 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; unsigned long DataRepresentation; void* Buffer; unsigned int BufferLength; unsigned int ProcNum; PRPC_SYNTAX_IDENTIFIER TransferSyntax; void* RpcInterfaceInformation; void* ReservedForRuntime; RPC_MGR_EPV* ManagerEpv; void* ImportContext; unsigned long RpcFlags; } RPC_MESSAGE, *PRPC_MESSAGE; #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 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_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 ); RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingInqTransportType( RPC_BINDING_HANDLE Binding, unsigned int* Type ); RPCRTAPI LONG RPC_ENTRY I_RpcMapWin32Status(RPC_STATUS); #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, unsigned long 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, unsigned long lParam ); #endif #ifdef __cplusplus } #endif #endif /*__WINE_RPCDCEP_H */