[1166] | 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
|
---|