mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 18:15:11 +00:00
232 lines
7.2 KiB
C
232 lines
7.2 KiB
C
/*
|
|
* 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 */
|