/* * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __WINE_RPCDCEP_H #define __WINE_RPCDCEP_H 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; typedef void (__RPC_STUB *RPC_DISPATCH_FUNCTION)(PRPC_MESSAGE Message); 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 proxys * 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 ); #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 #endif /*__WINE_RPCDCEP_H */