1 | /**
|
---|
2 | * This file has no copyright assigned and is placed in the Public Domain.
|
---|
3 | * This file is part of the mingw-w64 runtime package.
|
---|
4 | * No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
---|
5 | */
|
---|
6 | #ifndef __RPCASYNC_H__
|
---|
7 | #define __RPCASYNC_H__
|
---|
8 |
|
---|
9 | #include <_mingw_unicode.h>
|
---|
10 | #ifdef __RPC_WIN64__
|
---|
11 | #include <pshpack8.h>
|
---|
12 | #endif
|
---|
13 |
|
---|
14 | #ifdef __cplusplus
|
---|
15 | extern "C" {
|
---|
16 | #endif
|
---|
17 |
|
---|
18 | #define RPC_ASYNC_VERSION_1_0 sizeof(RPC_ASYNC_STATE)
|
---|
19 |
|
---|
20 | typedef enum _RPC_NOTIFICATION_TYPES {
|
---|
21 | RpcNotificationTypeNone,RpcNotificationTypeEvent,RpcNotificationTypeApc,RpcNotificationTypeIoc,RpcNotificationTypeHwnd,
|
---|
22 | RpcNotificationTypeCallback
|
---|
23 | } RPC_NOTIFICATION_TYPES;
|
---|
24 |
|
---|
25 | typedef enum _RPC_ASYNC_EVENT {
|
---|
26 | RpcCallComplete,RpcSendComplete,RpcReceiveComplete
|
---|
27 | } RPC_ASYNC_EVENT;
|
---|
28 |
|
---|
29 | struct _RPC_ASYNC_STATE;
|
---|
30 |
|
---|
31 | typedef void RPC_ENTRY RPCNOTIFICATION_ROUTINE(struct _RPC_ASYNC_STATE *pAsync,void *Context,RPC_ASYNC_EVENT Event);
|
---|
32 | typedef RPCNOTIFICATION_ROUTINE *PFN_RPCNOTIFICATION_ROUTINE;
|
---|
33 |
|
---|
34 | typedef struct _RPC_ASYNC_STATE {
|
---|
35 | unsigned int Size;
|
---|
36 | unsigned __LONG32 Signature;
|
---|
37 | __LONG32 Lock;
|
---|
38 | unsigned __LONG32 Flags;
|
---|
39 | void *StubInfo;
|
---|
40 | void *UserInfo;
|
---|
41 | void *RuntimeInfo;
|
---|
42 | RPC_ASYNC_EVENT Event;
|
---|
43 | RPC_NOTIFICATION_TYPES NotificationType;
|
---|
44 | union {
|
---|
45 | struct {
|
---|
46 | PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
|
---|
47 | HANDLE hThread;
|
---|
48 | } APC;
|
---|
49 | struct {
|
---|
50 | HANDLE hIOPort;
|
---|
51 | DWORD dwNumberOfBytesTransferred;
|
---|
52 | DWORD_PTR dwCompletionKey;
|
---|
53 | LPOVERLAPPED lpOverlapped;
|
---|
54 | } IOC;
|
---|
55 | struct {
|
---|
56 | HWND hWnd;
|
---|
57 | UINT Msg;
|
---|
58 | } HWND;
|
---|
59 | HANDLE hEvent;
|
---|
60 | PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
|
---|
61 | } u;
|
---|
62 | LONG_PTR Reserved[4];
|
---|
63 | } RPC_ASYNC_STATE,*PRPC_ASYNC_STATE;
|
---|
64 |
|
---|
65 | #define RPC_C_NOTIFY_ON_SEND_COMPLETE 0x1
|
---|
66 | #define RPC_C_INFINITE_TIMEOUT INFINITE
|
---|
67 |
|
---|
68 | #define RpcAsyncGetCallHandle(pAsync) (((PRPC_ASYNC_STATE) pAsync)->RuntimeInfo)
|
---|
69 |
|
---|
70 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncInitializeHandle(PRPC_ASYNC_STATE pAsync,unsigned int Size);
|
---|
71 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncRegisterInfo(PRPC_ASYNC_STATE pAsync);
|
---|
72 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncGetCallStatus(PRPC_ASYNC_STATE pAsync);
|
---|
73 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCompleteCall(PRPC_ASYNC_STATE pAsync,void *Reply);
|
---|
74 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncAbortCall(PRPC_ASYNC_STATE pAsync,unsigned __LONG32 ExceptionCode);
|
---|
75 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCancelCall(PRPC_ASYNC_STATE pAsync,WINBOOL fAbort);
|
---|
76 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCleanupThread(DWORD dwTimeout);
|
---|
77 |
|
---|
78 | typedef enum tagExtendedErrorParamTypes {
|
---|
79 | eeptAnsiString = 1,eeptUnicodeString,eeptLongVal,eeptShortVal,eeptPointerVal,eeptNone,eeptBinary
|
---|
80 | } ExtendedErrorParamTypes;
|
---|
81 |
|
---|
82 | #define MaxNumberOfEEInfoParams 4
|
---|
83 | #define RPC_EEINFO_VERSION 1
|
---|
84 |
|
---|
85 | typedef struct tagBinaryParam {
|
---|
86 | void *Buffer;
|
---|
87 | short Size;
|
---|
88 | } BinaryParam;
|
---|
89 |
|
---|
90 | typedef struct tagRPC_EE_INFO_PARAM {
|
---|
91 | ExtendedErrorParamTypes ParameterType;
|
---|
92 | union {
|
---|
93 | LPSTR AnsiString;
|
---|
94 | LPWSTR UnicodeString;
|
---|
95 | __LONG32 LVal;
|
---|
96 | short SVal;
|
---|
97 | ULONGLONG PVal;
|
---|
98 | BinaryParam BVal;
|
---|
99 | } u;
|
---|
100 | } RPC_EE_INFO_PARAM;
|
---|
101 |
|
---|
102 | #define EEInfoPreviousRecordsMissing 1
|
---|
103 | #define EEInfoNextRecordsMissing 2
|
---|
104 | #define EEInfoUseFileTime 4
|
---|
105 |
|
---|
106 | #define EEInfoGCCOM 11
|
---|
107 | #define EEInfoGCFRS 12
|
---|
108 |
|
---|
109 | typedef struct tagRPC_EXTENDED_ERROR_INFO {
|
---|
110 | ULONG Version;
|
---|
111 | LPWSTR ComputerName;
|
---|
112 | ULONG ProcessID;
|
---|
113 | union {
|
---|
114 | SYSTEMTIME SystemTime;
|
---|
115 | FILETIME FileTime;
|
---|
116 | } u;
|
---|
117 | ULONG GeneratingComponent;
|
---|
118 | ULONG Status;
|
---|
119 | USHORT DetectionLocation;
|
---|
120 | USHORT Flags;
|
---|
121 | int NumberOfParameters;
|
---|
122 | RPC_EE_INFO_PARAM Parameters[MaxNumberOfEEInfoParams];
|
---|
123 | } RPC_EXTENDED_ERROR_INFO;
|
---|
124 |
|
---|
125 | typedef struct tagRPC_ERROR_ENUM_HANDLE {
|
---|
126 | ULONG Signature;
|
---|
127 | void *CurrentPos;
|
---|
128 | void *Head;
|
---|
129 | } RPC_ERROR_ENUM_HANDLE;
|
---|
130 |
|
---|
131 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorStartEnumeration(RPC_ERROR_ENUM_HANDLE *EnumHandle);
|
---|
132 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorGetNextRecord(RPC_ERROR_ENUM_HANDLE *EnumHandle,WINBOOL CopyStrings,RPC_EXTENDED_ERROR_INFO *ErrorInfo);
|
---|
133 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorEndEnumeration(RPC_ERROR_ENUM_HANDLE *EnumHandle);
|
---|
134 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorResetEnumeration(RPC_ERROR_ENUM_HANDLE *EnumHandle);
|
---|
135 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorGetNumberOfRecords(RPC_ERROR_ENUM_HANDLE *EnumHandle,int *Records);
|
---|
136 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorSaveErrorInfo(RPC_ERROR_ENUM_HANDLE *EnumHandle,PVOID *ErrorBlob,size_t *BlobSize);
|
---|
137 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorLoadErrorInfo(PVOID ErrorBlob,size_t BlobSize,RPC_ERROR_ENUM_HANDLE *EnumHandle);
|
---|
138 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorAddRecord(RPC_EXTENDED_ERROR_INFO *ErrorInfo);
|
---|
139 | RPCRTAPI void RPC_ENTRY RpcErrorClearInformation(void);
|
---|
140 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcGetAuthorizationContextForClient(RPC_BINDING_HANDLE ClientBinding,WINBOOL ImpersonateOnReturn,PVOID Reserved1,PLARGE_INTEGER pExpirationTime,LUID Reserved2,DWORD Reserved3,PVOID Reserved4,PVOID *pAuthzClientContext);
|
---|
141 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcFreeAuthorizationContext(PVOID *pAuthzClientContext);
|
---|
142 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcSsContextLockExclusive(RPC_BINDING_HANDLE ServerBindingHandle,PVOID UserContext);
|
---|
143 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcSsContextLockShared(RPC_BINDING_HANDLE ServerBindingHandle,PVOID UserContext);
|
---|
144 |
|
---|
145 | #define RPC_CALL_ATTRIBUTES_VERSION (1)
|
---|
146 | #define RPC_QUERY_SERVER_PRINCIPAL_NAME (2)
|
---|
147 | #define RPC_QUERY_CLIENT_PRINCIPAL_NAME (4)
|
---|
148 |
|
---|
149 | typedef struct tagRPC_CALL_ATTRIBUTES_V1_W {
|
---|
150 | unsigned int Version;
|
---|
151 | unsigned __LONG32 Flags;
|
---|
152 | unsigned __LONG32 ServerPrincipalNameBufferLength;
|
---|
153 | unsigned short *ServerPrincipalName;
|
---|
154 | unsigned __LONG32 ClientPrincipalNameBufferLength;
|
---|
155 | unsigned short *ClientPrincipalName;
|
---|
156 | unsigned __LONG32 AuthenticationLevel;
|
---|
157 | unsigned __LONG32 AuthenticationService;
|
---|
158 | WINBOOL NullSession;
|
---|
159 | } RPC_CALL_ATTRIBUTES_V1_W;
|
---|
160 |
|
---|
161 | typedef struct tagRPC_CALL_ATTRIBUTES_V1_A {
|
---|
162 | unsigned int Version;
|
---|
163 | unsigned __LONG32 Flags;
|
---|
164 | unsigned __LONG32 ServerPrincipalNameBufferLength;
|
---|
165 | unsigned char *ServerPrincipalName;
|
---|
166 | unsigned __LONG32 ClientPrincipalNameBufferLength;
|
---|
167 | unsigned char *ClientPrincipalName;
|
---|
168 | unsigned __LONG32 AuthenticationLevel;
|
---|
169 | unsigned __LONG32 AuthenticationService;
|
---|
170 | WINBOOL NullSession;
|
---|
171 | } RPC_CALL_ATTRIBUTES_V1_A;
|
---|
172 |
|
---|
173 | #define RPC_CALL_ATTRIBUTES_V1 __MINGW_NAME_UAW(RPC_CALL_ATTRIBUTES_V1)
|
---|
174 | #define RpcServerInqCallAttributes __MINGW_NAME_AW(RpcServerInqCallAttributes)
|
---|
175 |
|
---|
176 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerInqCallAttributesW(RPC_BINDING_HANDLE ClientBinding,void *RpcCallAttributes);
|
---|
177 | RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerInqCallAttributesA(RPC_BINDING_HANDLE ClientBinding,void *RpcCallAttributes);
|
---|
178 |
|
---|
179 | typedef RPC_CALL_ATTRIBUTES_V1 RPC_CALL_ATTRIBUTES;
|
---|
180 |
|
---|
181 | RPC_STATUS RPC_ENTRY I_RpcAsyncSetHandle(PRPC_MESSAGE Message,PRPC_ASYNC_STATE pAsync);
|
---|
182 | RPC_STATUS RPC_ENTRY I_RpcAsyncAbortCall(PRPC_ASYNC_STATE pAsync,unsigned __LONG32 ExceptionCode);
|
---|
183 | int RPC_ENTRY I_RpcExceptionFilter(unsigned __LONG32 ExceptionCode);
|
---|
184 |
|
---|
185 | typedef union _RPC_ASYNC_NOTIFICATION_INFO {
|
---|
186 | struct {
|
---|
187 | PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
|
---|
188 | HANDLE hThread;
|
---|
189 | } APC;
|
---|
190 | struct {
|
---|
191 | HANDLE hIOPort;
|
---|
192 | DWORD dwNumberOfBytesTransferred;
|
---|
193 | DWORD_PTR dwCompletionKey;
|
---|
194 | LPOVERLAPPED lpOverlapped;
|
---|
195 | } IOC;
|
---|
196 | struct {
|
---|
197 | HWND hWnd;
|
---|
198 | UINT Msg;
|
---|
199 | } HWND;
|
---|
200 | HANDLE hEvent;
|
---|
201 | PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
|
---|
202 | } RPC_ASYNC_NOTIFICATION_INFO, *PRPC_ASYNC_NOTIFICATION_INFO;
|
---|
203 |
|
---|
204 | RPC_STATUS RPC_ENTRY RpcBindingBind(
|
---|
205 | PRPC_ASYNC_STATE pAsync,
|
---|
206 | RPC_BINDING_HANDLE Binding,
|
---|
207 | RPC_IF_HANDLE IfSpec
|
---|
208 | );
|
---|
209 |
|
---|
210 | RPC_STATUS RPC_ENTRY RpcBindingUnbind(
|
---|
211 | RPC_BINDING_HANDLE Binding
|
---|
212 | );
|
---|
213 |
|
---|
214 | typedef enum _RpcCallType {
|
---|
215 | rctInvalid,
|
---|
216 | rctNormal,
|
---|
217 | rctTraining,
|
---|
218 | rctGuaranteed
|
---|
219 | } RpcCallType;
|
---|
220 |
|
---|
221 | typedef enum _RpcLocalAddressFormat {
|
---|
222 | rlafInvalid,
|
---|
223 | rlafIPv4,
|
---|
224 | rlafIPv6
|
---|
225 | } RpcLocalAddressFormat;
|
---|
226 |
|
---|
227 | typedef enum _RPC_NOTIFICATIONS {
|
---|
228 | RpcNotificationCallNone = 0,
|
---|
229 | RpcNotificationClientDisconnect = 1,
|
---|
230 | RpcNotificationCallCancel = 2
|
---|
231 | } RPC_NOTIFICATIONS;
|
---|
232 |
|
---|
233 | typedef enum _RpcCallClientLocality {
|
---|
234 | rcclInvalid,
|
---|
235 | rcclLocal,
|
---|
236 | rcclRemote,
|
---|
237 | rcclClientUnknownLocality
|
---|
238 | } RpcCallClientLocality;
|
---|
239 |
|
---|
240 | RPC_STATUS RPC_ENTRY RpcServerSubscribeForNotification(
|
---|
241 | RPC_BINDING_HANDLE Binding,
|
---|
242 | DWORD Notification,
|
---|
243 | RPC_NOTIFICATION_TYPES NotificationType,
|
---|
244 | RPC_ASYNC_NOTIFICATION_INFO *NotificationInfo
|
---|
245 | );
|
---|
246 |
|
---|
247 | RPC_STATUS RPC_ENTRY RpcServerUnsubscribeForNotification(
|
---|
248 | RPC_BINDING_HANDLE Binding,
|
---|
249 | RPC_NOTIFICATIONS Notification,
|
---|
250 | unsigned __LONG32 *NotificationsQueued
|
---|
251 | );
|
---|
252 |
|
---|
253 | #if (_WIN32_WINNT >= 0x0600)
|
---|
254 |
|
---|
255 | typedef struct tagRPC_CALL_LOCAL_ADDRESS_V1_A {
|
---|
256 | unsigned int Version;
|
---|
257 | void *Buffer;
|
---|
258 | unsigned __LONG32 BufferSize;
|
---|
259 | RpcLocalAddressFormat AddressFormat;
|
---|
260 | } RPC_CALL_LOCAL_ADDRESS_V1_A, RPC_CALL_LOCAL_ADDRESS_A;
|
---|
261 |
|
---|
262 | typedef struct tagRPC_CALL_LOCAL_ADDRESS_V1_W {
|
---|
263 | unsigned int Version;
|
---|
264 | void *Buffer;
|
---|
265 | unsigned __LONG32 BufferSize;
|
---|
266 | RpcLocalAddressFormat AddressFormat;
|
---|
267 | } RPC_CALL_LOCAL_ADDRESS_V1_W, RPC_CALL_LOCAL_ADDRESS_W;
|
---|
268 |
|
---|
269 | #define RPC_CALL_LOCAL_ADDRESS_V1 __MINGW_NAME_AW(RPC_CALL_LOCAL_ADDRESS_V1_)
|
---|
270 | #define RPC_CALL_LOCAL_ADDRESS __MINGW_NAME_AW(RPC_CALL_LOCAL_ADDRESS_)
|
---|
271 |
|
---|
272 | typedef struct tagRPC_CALL_ATTRIBUTES_V2A {
|
---|
273 | unsigned int Version;
|
---|
274 | unsigned __LONG32 Flags;
|
---|
275 | unsigned __LONG32 ServerPrincipalNameBufferLength;
|
---|
276 | unsigned short *ServerPrincipalName;
|
---|
277 | unsigned __LONG32 ClientPrincipalNameBufferLength;
|
---|
278 | unsigned short *ClientPrincipalName;
|
---|
279 | unsigned __LONG32 AuthenticationLevel;
|
---|
280 | unsigned __LONG32 AuthenticationService;
|
---|
281 | WINBOOL NullSession;
|
---|
282 | WINBOOL KernelMode;
|
---|
283 | unsigned __LONG32 ProtocolSequence;
|
---|
284 | RpcCallClientLocality IsClientLocal;
|
---|
285 | HANDLE ClientPID;
|
---|
286 | unsigned __LONG32 CallStatus;
|
---|
287 | RpcCallType CallType;
|
---|
288 | RPC_CALL_LOCAL_ADDRESS_A *CallLocalAddress;
|
---|
289 | unsigned short OpNum;
|
---|
290 | UUID InterfaceUuid;
|
---|
291 | } RPC_CALL_ATTRIBUTES_V2_A, RPC_CALL_ATTRIBUTES_A;
|
---|
292 |
|
---|
293 | typedef struct tagRPC_CALL_ATTRIBUTES_V2W {
|
---|
294 | unsigned int Version;
|
---|
295 | unsigned __LONG32 Flags;
|
---|
296 | unsigned __LONG32 ServerPrincipalNameBufferLength;
|
---|
297 | unsigned short *ServerPrincipalName;
|
---|
298 | unsigned __LONG32 ClientPrincipalNameBufferLength;
|
---|
299 | unsigned short *ClientPrincipalName;
|
---|
300 | unsigned __LONG32 AuthenticationLevel;
|
---|
301 | unsigned __LONG32 AuthenticationService;
|
---|
302 | WINBOOL NullSession;
|
---|
303 | WINBOOL KernelMode;
|
---|
304 | unsigned __LONG32 ProtocolSequence;
|
---|
305 | RpcCallClientLocality IsClientLocal;
|
---|
306 | HANDLE ClientPID;
|
---|
307 | unsigned __LONG32 CallStatus;
|
---|
308 | RpcCallType CallType;
|
---|
309 | RPC_CALL_LOCAL_ADDRESS_W *CallLocalAddress;
|
---|
310 | unsigned short OpNum;
|
---|
311 | UUID InterfaceUuid;
|
---|
312 | } RPC_CALL_ATTRIBUTES_V2_W, RPC_CALL_ATTRIBUTES_W;
|
---|
313 |
|
---|
314 | #define RPC_CALL_ATTRIBUTES_V2 __MINGW_NAME_AW(RPC_CALL_ATTRIBUTES_V2_)
|
---|
315 |
|
---|
316 | RPC_STATUS RPC_ENTRY RpcDiagnoseError(
|
---|
317 | RPC_BINDING_HANDLE BindingHandle,
|
---|
318 | RPC_IF_HANDLE IfSpec,
|
---|
319 | RPC_STATUS RpcStatus,
|
---|
320 | RPC_ERROR_ENUM_HANDLE *EnumHandle,
|
---|
321 | ULONG Options,
|
---|
322 | HWND ParentWindow
|
---|
323 | );
|
---|
324 | #endif /*(_WIN32_WINNT >= 0x0600)*/
|
---|
325 |
|
---|
326 | #ifdef __cplusplus
|
---|
327 | }
|
---|
328 | #endif
|
---|
329 |
|
---|
330 | #ifdef __RPC_WIN64__
|
---|
331 | #include <poppack.h>
|
---|
332 | #endif
|
---|
333 | #endif
|
---|