3 * @copy 2012 MinGW.org project
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice (including the next
13 * paragraph) shall be included in all copies or substantial portions of the
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
26 #pragma GCC system_header
28 #include <sdkddkver.h>
30 #if defined(__RPC_WIN64__)
40 #define ___RPC_ENTRY__ RPCRTAPI RPC_STATUS RPC_ENTRY
41 #define RPC_ASYNC_VERSION_1_0 sizeof(RPC_ASYNC_STATE)
43 typedef enum _RPC_NOTIFICATION_TYPES {
44 RpcNotificationTypeNone,
45 RpcNotificationTypeEvent,
46 RpcNotificationTypeApc,
47 RpcNotificationTypeIoc,
48 RpcNotificationTypeHwnd,
49 RpcNotificationTypeCallback
50 } RPC_NOTIFICATION_TYPES;
52 typedef enum _RPC_ASYNC_EVENT {
57 #if (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
62 #define RPC_CALL_ATTRIBUTES_VERSION 1
63 #define RPC_QUERY_SERVER_PRINCIPAL_NAME 2
64 #define RPC_QUERY_CLIENT_PRINCIPAL_NAME 4
66 struct _RPC_ASYNC_STATE;
68 typedef void RPC_ENTRY RPCNOTIFICATION_ROUTINE (
69 struct _RPC_ASYNC_STATE *pAsync,
73 typedef RPCNOTIFICATION_ROUTINE *PFN_RPCNOTIFICATION_ROUTINE;
75 typedef union _RPC_ASYNC_NOTIFICATION_INFO {
77 PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
81 #if !defined(RPC_NO_WINDOWS_H) || defined (_WINBASE_H)
84 DWORD dwNumberOfBytesTransferred;
85 DWORD_PTR dwCompletionKey;
86 LPOVERLAPPED lpOverlapped;
90 #if !defined(RPC_NO_WINDOWS_H)
99 PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
100 } RPC_ASYNC_NOTIFICATION_INFO, *PRPC_ASYNC_NOTIFICATION_INFO;
102 typedef struct _RPC_ASYNC_STATE {
104 unsigned long Signature;
110 } RPC_ASYNC_STATE, *PRPC_ASYNC_STATE;
112 #define RPC_C_NOTIFY_ON_SEND_COMPLETE 0x1
113 #define RPC_C_INFINITE_TIMEOUT INFINITE
114 #define RpcAsyncGetCallHandle(pAsync) (((PRPC_ASYNC_STATE) pAsync)->RuntimeInfo)
116 ___RPC_ENTRY__ RpcAsyncInitializeHandle(PRPC_ASYNC_STATE, unsigned int);
117 ___RPC_ENTRY__ RpcAsyncGetCallStatus(PRPC_ASYNC_STATE);
118 ___RPC_ENTRY__ RpcAsyncCompleteCall(PRPC_ASYNC_STATE, void *);
119 ___RPC_ENTRY__ RpcAsyncAbortCall(PRPC_ASYNC_STATE, unsigned long);
120 ___RPC_ENTRY__ RpcAsyncCancelCall(PRPC_ASYNC_STATE, BOOL);
122 #if (_WIN32_WINNT >= _WIN32_WINNT_WINXP)
124 #if !defined(RPC_NO_WINDOWS_H) || defined(_WINBASE_H)
125 typedef enum tagExtendedErrorParamTypes {
133 } ExtendedErrorParamTypes;
135 #define MaxNumberOfEEInfoParams 4
136 #define RPC_EEINFO_VERSION 1
138 typedef struct tagBinaryParam {
143 typedef struct tagRPC_EE_INFO_PARAM {
144 ExtendedErrorParamTypes;
147 LPWSTR UnicodeString;
155 #define EEInfoPreviousRecordsMission 1
156 #define EEInfoNextRecordsMissing 2
157 #define EEInfoUseFileTime 4
158 #define EEInfoGCCOM 11
160 typedef struct tagRPC_EXTENDED_ERROR_INFO {
165 SYSTEMTIME SystemTime;
168 ULONG GeneratingComponent;
170 USHORT DetectionLocation;
172 int NumberOfParameters;
173 RPC_EE_INFO_PARAM Parameters[MaxNumberOfEEInfoParams];
174 } RPC_EXTENDED_ERROR_INFO;
176 typedef struct tagRPC_ERROR_ENUM_HANDLE {
180 } RPC_ERROR_ENUM_HANDLE;
182 ___RPC_ENTRY__ RpcErrorStartEnumeration(RPC_ERROR_ENUM_HANDLE *);
183 ___RPC_ENTRY__ RpcErrorGetNextRecord(RPC_ERROR_ENUM_HANDLE *, BOOL, RPC_EXTENDED_ERROR_INFO *);
184 ___RPC_ENTRY__ RpcErrorEndEnumeration(RPC_ERROR_ENUM_HANDLE *);
185 ___RPC_ENTRY__ RpcErrorResetEnumeration(RPC_ERROR_ENUM_HANDLE *);
186 ___RPC_ENTRY__ RpcErrorGetNumberOfRecords(RPC_ERROR_ENUM_HANDLE *, int *);
187 ___RPC_ENTRY__ RpcErrorSaveErrorInfo(RPC_ERROR_ENUM_HANDLE *, PVOID *, size_t *);
188 ___RPC_ENTRY__ RpcErrorLoadErrorInfo(PVOID, size_t, RPC_ERROR_ENUM_HANDLE *);
189 ___RPC_ENTRY__ RpcErrorAddRecord(RPC_EXTENDED_ERROR_INFO *);
190 ___RPC_ENTRY__ RpcErrorClearInformation(void);
192 #endif /* !defined(RPC_NO_WINDOWS_H) || defined(_WINBASE_H) */
194 ___RPC_ENTRY__ RpcAsyncCleanupThread(DWORD);
195 ___RPC_ENTRY__ RpcGetAuthorizationContextForClient(RPC_BINDING_HANDLE, PVOID, PLARGE_INTEGER, LUID, DWORD, PVOID, PVOID);
196 ___RPC_ENTRY__ RpcFreeAuthorizationContext(PVOID *);
197 ___RPC_ENTRY__ RpcSsContextLockExclusive(RPC_BINDING_HANDLE, PVOID);
198 ___RPC_ENTRY__ RpcSsContextLockShared(RPC_BINDING_HANDLE, PVOID);
200 typedef struct tagRPC_CALL_ATTRIBUTES_V1_W {
201 unsigned int Version;
203 unsigned long ServerPrincipalNameBufferLength;
204 unsigned short *ServerPrincipalName;
205 unsigned long ClientPrincipalNameBufferLength;
206 unsigned short *ClientPrincipalName;
207 unsigned long AuthenticationLevel;
208 unsigned long AuthenticationService;
210 } RPC_CALL_ATTRIBUTES_V1_W;
212 typedef struct tagRPC_CALL_ATTRIBUTES_V1_A {
213 unsigned int Version;
215 unsigned long ServerPrincipalNameBufferLength;
216 unsigned char *ServerPrincipalName;
217 unsigned long ClientPrincipalNameBufferLength;
218 unsigned char *ClientPrincipalName;
219 unsigned long AuthenticationLevel;
220 unsigned long AuthenticationService;
222 } RPC_CALL_ATTRIBUTES_V1_A;
224 ___RPC_ENTRY__ RpcServerInqCallAttributesW(RPC_BINDING_HANDLE, void *);
225 ___RPC_ENTRY__ RpcServerInqCallAttributesA(RPC_BINDING_HANDLE, void *);
226 #define RPC_CALL_ATTRIBUTES_V1 __AW(RPC_CALL_ATTRIBUTES_V1_)
227 #define RpcServerInqCallAttributes __AW(RpcServerInqCallAttributes)
229 #if !(_WIN32_WINNT >= _WIN32_WINNT_VISTA)
230 typedef RPC_CALL_ATTRIBUTES_V1 RPC_CALL_ATTRIBUTES;
233 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WINXP) */
235 #if (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
237 #define RPC_CALL_STATUS_CANCELLED 0x01
238 #define RPC_CALL_STATUS_DISCONNECTED 0x02
240 typedef enum tagRpcCallType {
247 typedef enum tagRpcCallClientLocality {
251 rcclClientUnknownLocality
252 } RpcCallClientLocality;
254 typedef enum tagRpcLocalAddressFormat {
258 } RpcLocalAddressFormat;
260 typedef struct _RPC_CALL_LOCAL_ADDRESS_V1 {
261 unsigned int Version;
263 unsigned long BufferSize;
264 RpcLocalAddressFormat AddressFormat;
265 } RPC_CALL_LOCAL_ADDRESS_V1, *PRPC_CALL_LOCAL_ADDRESS_V1;
267 typedef struct tagRPC_CALL_ATTRIBUTES_V2_W {
268 unsigned int Version;
270 unsigned long ServerPrincipalNameBufferLength;
271 unsigned short *ServerPrincipalName;
272 unsigned long ClientPrincipalNameBufferLength;
273 unsigned short *ClientPrincipalName;
274 unsigned long AuthenticationLevel;
275 unsigned long AuthenticationService;
277 BOOL KernelModeCaller;
278 unsigned long ProtocolSequence;
279 RpcCallClientLocality IsClientLocal;
281 unsigned long CallStatus;
282 RpcCallType CallType;
283 RPC_CALL_LOCAL_ADDRESS_V1 *CallLocalAddress;
284 unsigned short OpNum;
286 } RPC_CALL_ATTRIBUTES_V2_W;
288 typedef struct tagRPC_CALL_ATTRIBUTES_V2_A {
289 unsigned int Version;
291 unsigned long ServerPrincipalNameBufferLength;
292 unsigned char *ServerPrincipalName;
293 unsigned long ClientPrincipalNameBufferLength;
294 unsigned char *ClientPrincipalName;
295 unsigned long AuthenticationLevel;
296 unsigned long AuthenticationService;
298 BOOL KernelModeCaller;
299 unsigned long ProtocolSequence;
300 unsigned long IsClientLocal;
302 unsigned long CallStatus;
303 RpcCallType CallType;
304 RPC_CALL_LOCAL_ADDRESS_V1 *CallLocalAddress;
305 unsigned short OpNum;
307 } RPC_CALL_ATTRIBUTES_V2_A;
309 #define RPC_CALL_ATTRIBUTES_V2 __AW(RPC_CALL_ATTRIBUTES_V2_)
311 #define RPC_CALL_ATTRIBUTES_VERSION 2
312 #define RPC_QUERY_SERVER_PRINCIPAL_NAME 0x02
313 #define RPC_QUERY_CLIENT_PRINCIPAL_NAME 0x04
314 #define RPC_QUERY_CALL_LOCAL_ADDRESS 0x08
315 #define RPC_QUERY_CLIENT_PID 0x10
316 #define RPC_QUERY_IS_CLIENT_LOCAL 0x20
317 #define RPC_QUERY_NO_AUTH_REQUIRED 0x40
319 typedef RPC_CALL_ATTRIBUTES_V2 RPC_CALL_ATTRIBUTES;
321 typedef enum _RPC_NOTIFICATIONS {
322 RpcNotificationCallNone = 0,
323 RpcNotificationClientDisconnect = 1,
324 RpcNotificationCallCancel = 2
327 #define RpcNotificationCallStatusChange RpcNotificationClientDisconnect
329 ___RPC_ENTRY__ RpcServerSubscribeForNotification(RPC_BINDING_HANDLE, RPC_NOTIFICATIONS, RPC_NOTIFICATION_TYPES, RPC_ASYNC_NOTIFICATION_INFO *);
330 ___RPC_ENTRY__ RpcServerUnsubscribeForNotification(RPC_BINDING_HANDLE, RPC_NOTIFICATIONS, unsigned long *);
331 ___RPC_ENTRY__ RpcBindingBind(PRPC_ASYNC_STATE, RPC_BINDING_HANDLE, RPC_IF_HANDLE);
332 ___RPC_ENTRY__ RpcBindingUnbind(RPC_BINDING_HANDLE);
334 #if !defined(RPC_NO_WINDOWS_H) || defined(_WINBASE_H)
335 #define RPC_DE_USE_CURRENT_EEINFO 1
336 ___RPC_ENTRY__ RpcDiagnoseError(RPC_BINDING_HANDLE, RPC_IF_HANDLE, RPC_STATUS, RPC_ERROR_ENUM_HANDLE *, ULONG, HWND);
337 #endif /* !defined(RPC_NO_WINDOWS_H) || defined(_WINBASE_H) */
339 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_VISTA) */
341 #if (_WIN32_WINNT >= _WIN32_WINNT_WS03)
342 #define EEInfoGCFRS 12
343 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WS03) */
345 #undef ___RPC_ENTRY__
351 #if defined(__RPC_WIN64__)
355 #endif /* !_RPCASYNC_H */