IErrorInfo is now derived from IUnknown.
[wine] / include / wine / obj_clientserver.h
1 /*
2  * Defines the COM interfaces and APIs related to client/server aspects.
3  */
4
5 #ifndef __WINE_WINE_OBJ_CLIENTSERVER_H
6 #define __WINE_WINE_OBJ_CLIENTSERVER_H
7
8 #include "wine/obj_base.h"
9
10 #ifdef __cplusplus
11 extern "C" {
12 #endif /* defined(__cplusplus) */
13
14 /*****************************************************************************
15  * Predeclare the interfaces
16  */
17 DEFINE_OLEGUID(IID_IClientSecurity,     0x0000013dL, 0, 0);
18 typedef struct IClientSecurity IClientSecurity,*LPCLIENTSECURITY;
19
20 DEFINE_OLEGUID(IID_IExternalConnection, 0x00000019L, 0, 0);
21 typedef struct IExternalConnection IExternalConnection,*LPEXTERNALCONNECTION;
22
23 DEFINE_OLEGUID(IID_IMessageFilter,      0x00000016L, 0, 0);
24 typedef struct IMessageFilter IMessageFilter,*LPMESSAGEFILTER;
25
26 DEFINE_OLEGUID(IID_IServerSecurity,     0x0000013eL, 0, 0);
27 typedef struct IServerSecurity IServerSecurity,*LPSERVERSECURITY;
28
29
30 /*****************************************************************************
31  * IClientSecurity interface
32  */
33 typedef struct tagSOLE_AUTHENTICATION_SERVICE
34 {
35     DWORD dwAuthnSvc;
36     DWORD dwAuthzSvc;
37     OLECHAR* pPrincipalName;
38     HRESULT hr;
39 } SOLE_AUTHENTICATION_SERVICE, *PSOLE_AUTHENTICATION_SERVICE;
40
41 typedef enum tagEOLE_AUTHENTICATION_CAPABILITIES
42 {
43      EOAC_NONE           = 0x0,
44      EOAC_MUTUAL_AUTH    = 0x1,
45      EOAC_SECURE_REFS    = 0x2,
46      EOAC_ACCESS_CONTROL = 0x4
47 } EOLE_AUTHENTICATION_CAPABILITIES;
48
49 #define ICOM_INTERFACE IClientSecurity
50 #define IClientSecurity_METHODS \
51      ICOM_METHOD8(HRESULT,QueryBlanket, IUnknown*,pProxy, DWORD*,pAuthnSvc, DWORD*,pAuthzSvc, OLECHAR**,pServerPrincName, DWORD*,pAuthnLevel, DWORD*,pImpLevel, void**,pAuthInfo, DWORD*,pCapabilites) \
52     ICOM_METHOD8(HRESULT,SetBlanket,   IUnknown*,pProxy, DWORD,pAuthnSvc, DWORD,pAuthzSvc, OLECHAR*,pServerPrincName, DWORD,pAuthnLevel, DWORD,pImpLevel, void*,pAuthInfo, DWORD,pCapabilites) \
53     ICOM_METHOD2(HRESULT,CopyProxy,    IUnknown*,pProxy, IUnknown**,ppCopy)
54 #define IClientSecurity_IMETHODS \
55     IUnknown_IMETHODS \
56     IClientSecurity_METHODS
57 ICOM_DEFINE(IClientSecurity,IUnknown)
58 #undef ICOM_INTERFACE
59
60 /*** IUnknown methods ***/
61 #define IClientSecurity_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
62 #define IClientSecurity_AddRef(p)             ICOM_CALL (AddRef,p)
63 #define IClientSecurity_Release(p)            ICOM_CALL (Release,p)
64 /*** IClientSecurity methods ***/
65 #define IClientSecurity_QueryBlanket(p,a,b,c,d,e,f,g,h) ICOM_CALL8(QueryBlanket,p,a,b,c,d,e,f,g,h)
66 #define IClientSecurity_SetBlanket(p,a,b,c,d,e,f,g,h)   ICOM_CALL8(SetBlanket,p,a,b,c,d,e,f,g,h)
67 #define IClientSecurity_CopyProxy(p,a,b)                ICOM_CALL2(CopyProxy,p,a,b)
68
69
70 /*****************************************************************************
71  * IExternalConnection interface
72  */
73 typedef enum tagEXTCONN
74 {
75     EXTCONN_STRONG   = 0x1,
76     EXTCONN_WEAK     = 0x2,
77     EXTCONN_CALLABLE = 0x4
78 } EXTCONN;
79
80 #define ICOM_INTERFACE IExternalConnection
81 #define IExternalConnection_METHODS \
82     ICOM_METHOD2(DWORD,AddConnection,     DWORD,extconn, DWORD,reserved) \
83     ICOM_METHOD3(DWORD,ReleaseConnection, DWORD,extconn, DWORD,reserved, BOOL,fLastReleaseCloses)
84 #define IExternalConnection_IMETHODS \
85     IUnknown_IMETHODS \
86     IExternalConnection_METHODS
87 ICOM_DEFINE(IExternalConnection,IUnknown)
88 #undef ICOM_INTERFACE
89
90 /*** IUnknown methods ***/
91 #define IExternalConnection_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
92 #define IExternalConnection_AddRef(p)             ICOM_CALL (AddRef,p)
93 #define IExternalConnection_Release(p)            ICOM_CALL (Release,p)
94 /*** IExternalConnection methods ***/
95 #define IExternalConnection_AddConnection(p,a,b)       ICOM_CALL8(AddConnection,p,a,b)
96 #define IExternalConnection_ReleaseConnection(p,a,b,c) ICOM_CALL8(ReleaseConnection,p,a,b,c)
97
98
99 HRESULT WINAPI CoDisconnectObject(LPUNKNOWN lpUnk, DWORD reserved);
100
101
102 /*****************************************************************************
103  * IMessageFilter interface
104  */
105 typedef enum tagCALLTYPE
106 {
107     CALLTYPE_TOPLEVEL             = 1,
108     CALLTYPE_NESTED               = 2,
109     CALLTYPE_ASYNC                = 3,
110     CALLTYPE_TOPLEVEL_CALLPENDING = 4,
111     CALLTYPE_ASYNC_CALLPENDING    = 5
112 } CALLTYPE;
113
114 typedef enum tagSERVERCALL
115 {
116     SERVERCALL_ISHANDLED  = 0,
117     SERVERCALL_REJECTED   = 1,
118     SERVERCALL_RETRYLATER = 2
119 } SERVERCALL;
120
121 typedef enum tagPENDINGTYPE
122 {
123     PENDINGTYPE_TOPLEVEL = 1,
124     PENDINGTYPE_NESTED   = 2
125 } PENDINGTYPE;
126
127 typedef enum tagPENDINGMSG
128 {
129     PENDINGMSG_CANCELCALL     = 0,
130     PENDINGMSG_WAITNOPROCESS  = 1,
131     PENDINGMSG_WAITDEFPROCESS = 2
132 } PENDINGMSG;
133
134 typedef struct tagINTERFACEINFO
135 {
136     IUnknown* pUnk;
137     IID iid;
138     WORD wMethod;
139 } INTERFACEINFO,*LPINTERFACEINFO;
140
141 #define ICOM_INTERFACE IMessageFilter
142 #define IMessageFilter_METHODS \
143     ICOM_METHOD4(DWORD,HandleInComingCall, DWORD,dwCallType, HTASK,htaskCaller, DWORD,dwTickCount, LPINTERFACEINFO,lpInterfaceInfo) \
144     ICOM_METHOD3(DWORD,RetryRejectedCall,  HTASK,htaskCallee, DWORD,dwTickCount, DWORD,dwRejectType) \
145     ICOM_METHOD3(DWORD,MessagePending,     HTASK,htaskCallee, DWORD,dwTickCount, DWORD,dwRejectType)
146 #define IMessageFilter_IMETHODS \
147     IUnknown_IMETHODS \
148     IMessageFilter_METHODS
149 ICOM_DEFINE(IMessageFilter,IUnknown)
150 #undef ICOM_INTERFACE
151
152 /*** IUnknown methods ***/
153 #define IMessageFilter_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
154 #define IMessageFilter_AddRef(p)             ICOM_CALL (AddRef,p)
155 #define IMessageFilter_Release(p)            ICOM_CALL (Release,p)
156 /*** IMessageFilter methods ***/
157 #define IMessageFilter_HandleInComingCall(p,a,b,c,d) ICOM_CALL4(HandleInComingCall,p,a,b,c,d)
158 #define IMessageFilter_RetryRejectedCall(p,a,b,c)    ICOM_CALL3(RetryRejectedCall,p,a,b,c)
159 #define IMessageFilter_MessagePending(p,a,b,c)       ICOM_CALL3(MessagePending,p,a,b,c)
160
161
162 HRESULT WINAPI CoRegisterMessageFilter16(LPMESSAGEFILTER lpMessageFilter,LPMESSAGEFILTER *lplpMessageFilter);
163 HRESULT WINAPI CoRegisterMessageFilter(LPMESSAGEFILTER lpMessageFilter,LPMESSAGEFILTER *lplpMessageFilter);
164
165
166 /*****************************************************************************
167  * IServerSecurity interface
168  */
169 #define ICOM_INTERFACE IServerSecurity
170 #define IServerSecurity_METHODS \
171     ICOM_METHOD7(HRESULT,QueryBlanket,     DWORD*,pAuthnSvc, DWORD*,pAuthzSvc, OLECHAR**,pServerPrincName, DWORD*,pAuthnLevel, DWORD*,pImpLevel, void**,pPrivs, DWORD*,pCapabilities) \
172     ICOM_METHOD (HRESULT,ImpersonateClient) \
173     ICOM_METHOD (HRESULT,RevertToSelf) \
174     ICOM_METHOD (BOOL,   IsImpersonating)
175 #define IServerSecurity_IMETHODS \
176     IUnknown_IMETHODS \
177     IServerSecurity_METHODS
178 ICOM_DEFINE(IServerSecurity,IUnknown)
179 #undef ICOM_INTERFACE
180
181 /*** IUnknown methods ***/
182 #define IServerSecurity_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
183 #define IServerSecurity_AddRef(p)             ICOM_CALL (AddRef,p)
184 #define IServerSecurity_Release(p)            ICOM_CALL (Release,p)
185 /*** IServerSecurity methods ***/
186 #define IServerSecurity_QueryBlanket(p,a,b,c,d,e,f,g) ICOM_CALL7(QueryBlanket,p,a,b,c,d,e,f,g)
187 #define IServerSecurity_ImpersonateClient(p)          ICOM_CALL (ImpersonateClient,p)
188 #define IServerSecurity_RevertToSelf(p)               ICOM_CALL (RevertToSelf,p)
189 #define IServerSecurity_IsImpersonating(p)            ICOM_CALL (IsImpersonating,p)
190
191
192 /*****************************************************************************
193  * Additional client API
194  */
195
196 /* FIXME: not implemented */
197 HRESULT WINAPI CoCopyProxy(IUnknown* pProxy, IUnknown** ppCopy);
198
199 /* FIXME: not implemented */
200 HRESULT WINAPI CoQueryProxyBlanket(IUnknown* pProxy, DWORD* pwAuthnSvc, DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, RPC_AUTH_IDENTITY_HANDLE* pAuthInfo, DWORD* pCapabilites);
201
202 /* FIXME: not implemented */
203 HRESULT WINAPI CoSetProxyBlanket(IUnknown* pProxy, DWORD dwAuthnSvc, DWORD dwAuthzSvc, OLECHAR* pServerPrincName, DWORD dwAuthnLevel, DWORD dwImpLevel, RPC_AUTH_IDENTITY_HANDLE pAuthInfo, DWORD dwCapabilities);
204
205
206 /*****************************************************************************
207  * Additional server API
208  */
209
210 /* FIXME: not implemented */
211 ULONG WINAPI CoAddRefServerProcess(void);
212
213 /* FIXME: not implemented */
214 HRESULT WINAPI CoImpersonateClient(void);
215
216 /* FIXME: not implemented */
217 HRESULT WINAPI CoQueryClientBlanket(DWORD* pAuthnSvc, DWORD* pAuthzSvc, OLECHAR16** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, RPC_AUTHZ_HANDLE* pPrivs, DWORD* pCapabilities);
218
219 /* FIXME: not implemented */
220 HRESULT WINAPI CoReleaseServerProcess(void);
221
222 /* FIXME: not implemented */
223 HRESULT WINAPI CoRevertToSelf(void);
224
225 /* FIXME: not implemented */
226 HRESULT WINAPI CoSuspendClassObjects(void);
227
228
229 /*****************************************************************************
230  * Additional API
231  */
232
233 /* FIXME: not implemented */
234 HRESULT WINAPI CoGetCallContext(REFIID riid, void** ppInterface);
235
236 /* FIXME: not implemented */
237 HRESULT WINAPI CoGetPSClsid(REFIID riid, CLSID* pClsid);
238
239 /* FIXME: not implemented */
240 HRESULT WINAPI CoInitializeSecurity(PSECURITY_DESCRIPTOR pSecDesc, LONG cAuthSvc, SOLE_AUTHENTICATION_SERVICE* asAuthSvc, void* pReserved1, DWORD dwAuthnLevel, DWORD dwImpLevel, void* pReserved2, DWORD dwCapabilities, void* pReserved3);
241
242 /* FIXME: not implemented */
243 BOOL WINAPI CoIsHandlerConnected(LPUNKNOWN pUnk);
244
245 /* FIXME: not implemented */
246 HRESULT WINAPI CoQueryAuthenticationServices(DWORD* pcAuthSvc, SOLE_AUTHENTICATION_SERVICE** asAuthSvc);
247
248 /* FIXME: not implemented */
249 HRESULT WINAPI CoRegisterPSClsid(REFIID riid, REFCLSID rclsid);
250
251 /* FIXME: not implemented */
252 HRESULT WINAPI CoResumeClassObjects(void);
253
254 #ifdef __cplusplus
255 } /* extern "C" */
256 #endif /* defined(__cplusplus) */
257
258 #endif /* __WINE_WINE_OBJ_CLIENTSERVER_H */