| 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 |