|  | /** | 
|  | * This file has no copyright assigned and is placed in the Public Domain. | 
|  | * This file is part of the mingw-w64 runtime package. | 
|  | * No warranty is given; refer to the file DISCLAIMER.PD within this package. | 
|  | */ | 
|  | #ifndef __RPCASYNC_H__ | 
|  | #define __RPCASYNC_H__ | 
|  |  | 
|  | #include <_mingw_unicode.h> | 
|  | #ifdef __RPC_WIN64__ | 
|  | #include <pshpack8.h> | 
|  | #endif | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | #define RPC_ASYNC_VERSION_1_0 sizeof(RPC_ASYNC_STATE) | 
|  |  | 
|  | typedef enum _RPC_NOTIFICATION_TYPES { | 
|  | RpcNotificationTypeNone,RpcNotificationTypeEvent,RpcNotificationTypeApc,RpcNotificationTypeIoc,RpcNotificationTypeHwnd, | 
|  | RpcNotificationTypeCallback | 
|  | } RPC_NOTIFICATION_TYPES; | 
|  |  | 
|  | typedef enum _RPC_ASYNC_EVENT { | 
|  | RpcCallComplete,RpcSendComplete,RpcReceiveComplete | 
|  | } RPC_ASYNC_EVENT; | 
|  |  | 
|  | struct _RPC_ASYNC_STATE; | 
|  |  | 
|  | typedef void RPC_ENTRY RPCNOTIFICATION_ROUTINE(struct _RPC_ASYNC_STATE *pAsync,void *Context,RPC_ASYNC_EVENT Event); | 
|  | typedef RPCNOTIFICATION_ROUTINE *PFN_RPCNOTIFICATION_ROUTINE; | 
|  |  | 
|  | typedef struct _RPC_ASYNC_STATE { | 
|  | unsigned int Size; | 
|  | unsigned __LONG32 Signature; | 
|  | __LONG32 Lock; | 
|  | unsigned __LONG32 Flags; | 
|  | void *StubInfo; | 
|  | void *UserInfo; | 
|  | void *RuntimeInfo; | 
|  | RPC_ASYNC_EVENT Event; | 
|  | RPC_NOTIFICATION_TYPES NotificationType; | 
|  | union { | 
|  | struct { | 
|  | PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine; | 
|  | HANDLE hThread; | 
|  | } APC; | 
|  | struct { | 
|  | HANDLE hIOPort; | 
|  | DWORD dwNumberOfBytesTransferred; | 
|  | DWORD_PTR dwCompletionKey; | 
|  | LPOVERLAPPED lpOverlapped; | 
|  | } IOC; | 
|  | struct { | 
|  | HWND hWnd; | 
|  | UINT Msg; | 
|  | } HWND; | 
|  | HANDLE hEvent; | 
|  | PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine; | 
|  | } u; | 
|  | LONG_PTR Reserved[4]; | 
|  | } RPC_ASYNC_STATE,*PRPC_ASYNC_STATE; | 
|  |  | 
|  | #define RPC_C_NOTIFY_ON_SEND_COMPLETE 0x1 | 
|  | #define RPC_C_INFINITE_TIMEOUT INFINITE | 
|  |  | 
|  | #define RpcAsyncGetCallHandle(pAsync) (((PRPC_ASYNC_STATE) pAsync)->RuntimeInfo) | 
|  |  | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncInitializeHandle(PRPC_ASYNC_STATE pAsync,unsigned int Size); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncRegisterInfo(PRPC_ASYNC_STATE pAsync); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncGetCallStatus(PRPC_ASYNC_STATE pAsync); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCompleteCall(PRPC_ASYNC_STATE pAsync,void *Reply); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncAbortCall(PRPC_ASYNC_STATE pAsync,unsigned __LONG32 ExceptionCode); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCancelCall(PRPC_ASYNC_STATE pAsync,WINBOOL fAbort); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCleanupThread(DWORD dwTimeout); | 
|  |  | 
|  | typedef enum tagExtendedErrorParamTypes { | 
|  | eeptAnsiString = 1,eeptUnicodeString,eeptLongVal,eeptShortVal,eeptPointerVal,eeptNone,eeptBinary | 
|  | } ExtendedErrorParamTypes; | 
|  |  | 
|  | #define MaxNumberOfEEInfoParams 4 | 
|  | #define RPC_EEINFO_VERSION 1 | 
|  |  | 
|  | typedef struct tagBinaryParam { | 
|  | void *Buffer; | 
|  | short Size; | 
|  | } BinaryParam; | 
|  |  | 
|  | typedef struct tagRPC_EE_INFO_PARAM { | 
|  | ExtendedErrorParamTypes ParameterType; | 
|  | union { | 
|  | LPSTR AnsiString; | 
|  | LPWSTR UnicodeString; | 
|  | __LONG32 LVal; | 
|  | short SVal; | 
|  | ULONGLONG PVal; | 
|  | BinaryParam BVal; | 
|  | } u; | 
|  | } RPC_EE_INFO_PARAM; | 
|  |  | 
|  | #define EEInfoPreviousRecordsMissing 1 | 
|  | #define EEInfoNextRecordsMissing 2 | 
|  | #define EEInfoUseFileTime 4 | 
|  |  | 
|  | #define EEInfoGCCOM 11 | 
|  | #define EEInfoGCFRS 12 | 
|  |  | 
|  | typedef struct tagRPC_EXTENDED_ERROR_INFO { | 
|  | ULONG Version; | 
|  | LPWSTR ComputerName; | 
|  | ULONG ProcessID; | 
|  | union { | 
|  | SYSTEMTIME SystemTime; | 
|  | FILETIME FileTime; | 
|  | } u; | 
|  | ULONG GeneratingComponent; | 
|  | ULONG Status; | 
|  | USHORT DetectionLocation; | 
|  | USHORT Flags; | 
|  | int NumberOfParameters; | 
|  | RPC_EE_INFO_PARAM Parameters[MaxNumberOfEEInfoParams]; | 
|  | } RPC_EXTENDED_ERROR_INFO; | 
|  |  | 
|  | typedef struct tagRPC_ERROR_ENUM_HANDLE { | 
|  | ULONG Signature; | 
|  | void *CurrentPos; | 
|  | void *Head; | 
|  | } RPC_ERROR_ENUM_HANDLE; | 
|  |  | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorStartEnumeration(RPC_ERROR_ENUM_HANDLE *EnumHandle); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorGetNextRecord(RPC_ERROR_ENUM_HANDLE *EnumHandle,WINBOOL CopyStrings,RPC_EXTENDED_ERROR_INFO *ErrorInfo); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorEndEnumeration(RPC_ERROR_ENUM_HANDLE *EnumHandle); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorResetEnumeration(RPC_ERROR_ENUM_HANDLE *EnumHandle); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorGetNumberOfRecords(RPC_ERROR_ENUM_HANDLE *EnumHandle,int *Records); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorSaveErrorInfo(RPC_ERROR_ENUM_HANDLE *EnumHandle,PVOID *ErrorBlob,size_t *BlobSize); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorLoadErrorInfo(PVOID ErrorBlob,size_t BlobSize,RPC_ERROR_ENUM_HANDLE *EnumHandle); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorAddRecord(RPC_EXTENDED_ERROR_INFO *ErrorInfo); | 
|  | RPCRTAPI void RPC_ENTRY RpcErrorClearInformation(void); | 
|  | 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); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcFreeAuthorizationContext(PVOID *pAuthzClientContext); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcSsContextLockExclusive(RPC_BINDING_HANDLE ServerBindingHandle,PVOID UserContext); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcSsContextLockShared(RPC_BINDING_HANDLE ServerBindingHandle,PVOID UserContext); | 
|  |  | 
|  | #define RPC_CALL_ATTRIBUTES_VERSION (1) | 
|  | #define RPC_QUERY_SERVER_PRINCIPAL_NAME (2) | 
|  | #define RPC_QUERY_CLIENT_PRINCIPAL_NAME (4) | 
|  |  | 
|  | typedef struct tagRPC_CALL_ATTRIBUTES_V1_W { | 
|  | unsigned int Version; | 
|  | unsigned __LONG32 Flags; | 
|  | unsigned __LONG32 ServerPrincipalNameBufferLength; | 
|  | unsigned short *ServerPrincipalName; | 
|  | unsigned __LONG32 ClientPrincipalNameBufferLength; | 
|  | unsigned short *ClientPrincipalName; | 
|  | unsigned __LONG32 AuthenticationLevel; | 
|  | unsigned __LONG32 AuthenticationService; | 
|  | WINBOOL NullSession; | 
|  | } RPC_CALL_ATTRIBUTES_V1_W; | 
|  |  | 
|  | typedef struct tagRPC_CALL_ATTRIBUTES_V1_A { | 
|  | unsigned int Version; | 
|  | unsigned __LONG32 Flags; | 
|  | unsigned __LONG32 ServerPrincipalNameBufferLength; | 
|  | unsigned char *ServerPrincipalName; | 
|  | unsigned __LONG32 ClientPrincipalNameBufferLength; | 
|  | unsigned char *ClientPrincipalName; | 
|  | unsigned __LONG32 AuthenticationLevel; | 
|  | unsigned __LONG32 AuthenticationService; | 
|  | WINBOOL NullSession; | 
|  | } RPC_CALL_ATTRIBUTES_V1_A; | 
|  |  | 
|  | #define RPC_CALL_ATTRIBUTES_V1 __MINGW_NAME_UAW(RPC_CALL_ATTRIBUTES_V1) | 
|  | #define RpcServerInqCallAttributes __MINGW_NAME_AW(RpcServerInqCallAttributes) | 
|  |  | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerInqCallAttributesW(RPC_BINDING_HANDLE ClientBinding,void *RpcCallAttributes); | 
|  | RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerInqCallAttributesA(RPC_BINDING_HANDLE ClientBinding,void *RpcCallAttributes); | 
|  |  | 
|  | typedef RPC_CALL_ATTRIBUTES_V1 RPC_CALL_ATTRIBUTES; | 
|  |  | 
|  | RPC_STATUS RPC_ENTRY I_RpcAsyncSetHandle(PRPC_MESSAGE Message,PRPC_ASYNC_STATE pAsync); | 
|  | RPC_STATUS RPC_ENTRY I_RpcAsyncAbortCall(PRPC_ASYNC_STATE pAsync,unsigned __LONG32 ExceptionCode); | 
|  | int RPC_ENTRY I_RpcExceptionFilter(unsigned __LONG32 ExceptionCode); | 
|  |  | 
|  | typedef union _RPC_ASYNC_NOTIFICATION_INFO { | 
|  | struct { | 
|  | PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine; | 
|  | HANDLE                      hThread; | 
|  | } APC; | 
|  | struct { | 
|  | HANDLE       hIOPort; | 
|  | DWORD        dwNumberOfBytesTransferred; | 
|  | DWORD_PTR    dwCompletionKey; | 
|  | LPOVERLAPPED lpOverlapped; | 
|  | } IOC; | 
|  | struct { | 
|  | HWND hWnd; | 
|  | UINT Msg; | 
|  | } HWND; | 
|  | HANDLE                      hEvent; | 
|  | PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine; | 
|  | } RPC_ASYNC_NOTIFICATION_INFO, *PRPC_ASYNC_NOTIFICATION_INFO; | 
|  |  | 
|  | RPC_STATUS RPC_ENTRY RpcBindingBind( | 
|  | PRPC_ASYNC_STATE pAsync, | 
|  | RPC_BINDING_HANDLE Binding, | 
|  | RPC_IF_HANDLE IfSpec | 
|  | ); | 
|  |  | 
|  | RPC_STATUS RPC_ENTRY RpcBindingUnbind( | 
|  | RPC_BINDING_HANDLE Binding | 
|  | ); | 
|  |  | 
|  | typedef enum _RpcCallType { | 
|  | rctInvalid, | 
|  | rctNormal, | 
|  | rctTraining, | 
|  | rctGuaranteed | 
|  | } RpcCallType; | 
|  |  | 
|  | typedef enum _RpcLocalAddressFormat { | 
|  | rlafInvalid, | 
|  | rlafIPv4, | 
|  | rlafIPv6 | 
|  | } RpcLocalAddressFormat; | 
|  |  | 
|  | typedef enum _RPC_NOTIFICATIONS { | 
|  | RpcNotificationCallNone           = 0, | 
|  | RpcNotificationClientDisconnect   = 1, | 
|  | RpcNotificationCallCancel         = 2 | 
|  | } RPC_NOTIFICATIONS; | 
|  |  | 
|  | typedef enum _RpcCallClientLocality { | 
|  | rcclInvalid, | 
|  | rcclLocal, | 
|  | rcclRemote, | 
|  | rcclClientUnknownLocality | 
|  | } RpcCallClientLocality; | 
|  |  | 
|  | RPC_STATUS RPC_ENTRY RpcServerSubscribeForNotification( | 
|  | RPC_BINDING_HANDLE Binding, | 
|  | DWORD Notification, | 
|  | RPC_NOTIFICATION_TYPES NotificationType, | 
|  | RPC_ASYNC_NOTIFICATION_INFO *NotificationInfo | 
|  | ); | 
|  |  | 
|  | RPC_STATUS RPC_ENTRY RpcServerUnsubscribeForNotification( | 
|  | RPC_BINDING_HANDLE Binding, | 
|  | RPC_NOTIFICATIONS Notification, | 
|  | unsigned __LONG32 *NotificationsQueued | 
|  | ); | 
|  |  | 
|  | #if (_WIN32_WINNT >= 0x0600) | 
|  |  | 
|  | typedef struct tagRPC_CALL_LOCAL_ADDRESS_V1_A { | 
|  | unsigned int          Version; | 
|  | void                  *Buffer; | 
|  | unsigned __LONG32     BufferSize; | 
|  | RpcLocalAddressFormat AddressFormat; | 
|  | } RPC_CALL_LOCAL_ADDRESS_V1_A, RPC_CALL_LOCAL_ADDRESS_A; | 
|  |  | 
|  | typedef struct tagRPC_CALL_LOCAL_ADDRESS_V1_W { | 
|  | unsigned int          Version; | 
|  | void                  *Buffer; | 
|  | unsigned __LONG32     BufferSize; | 
|  | RpcLocalAddressFormat AddressFormat; | 
|  | } RPC_CALL_LOCAL_ADDRESS_V1_W, RPC_CALL_LOCAL_ADDRESS_W; | 
|  |  | 
|  | #define RPC_CALL_LOCAL_ADDRESS_V1 __MINGW_NAME_AW(RPC_CALL_LOCAL_ADDRESS_V1_) | 
|  | #define RPC_CALL_LOCAL_ADDRESS __MINGW_NAME_AW(RPC_CALL_LOCAL_ADDRESS_) | 
|  |  | 
|  | typedef struct tagRPC_CALL_ATTRIBUTES_V2A { | 
|  | unsigned int           Version; | 
|  | unsigned __LONG32      Flags; | 
|  | unsigned __LONG32      ServerPrincipalNameBufferLength; | 
|  | unsigned short         *ServerPrincipalName; | 
|  | unsigned __LONG32      ClientPrincipalNameBufferLength; | 
|  | unsigned short         *ClientPrincipalName; | 
|  | unsigned __LONG32      AuthenticationLevel; | 
|  | unsigned __LONG32      AuthenticationService; | 
|  | WINBOOL                NullSession; | 
|  | WINBOOL                KernelMode; | 
|  | unsigned __LONG32      ProtocolSequence; | 
|  | RpcCallClientLocality  IsClientLocal; | 
|  | HANDLE                 ClientPID; | 
|  | unsigned __LONG32      CallStatus; | 
|  | RpcCallType            CallType; | 
|  | RPC_CALL_LOCAL_ADDRESS_A *CallLocalAddress; | 
|  | unsigned short         OpNum; | 
|  | UUID                   InterfaceUuid; | 
|  | } RPC_CALL_ATTRIBUTES_V2_A, RPC_CALL_ATTRIBUTES_A; | 
|  |  | 
|  | typedef struct tagRPC_CALL_ATTRIBUTES_V2W { | 
|  | unsigned int           Version; | 
|  | unsigned __LONG32      Flags; | 
|  | unsigned __LONG32      ServerPrincipalNameBufferLength; | 
|  | unsigned short         *ServerPrincipalName; | 
|  | unsigned __LONG32      ClientPrincipalNameBufferLength; | 
|  | unsigned short         *ClientPrincipalName; | 
|  | unsigned __LONG32      AuthenticationLevel; | 
|  | unsigned __LONG32      AuthenticationService; | 
|  | WINBOOL                NullSession; | 
|  | WINBOOL                KernelMode; | 
|  | unsigned __LONG32      ProtocolSequence; | 
|  | RpcCallClientLocality  IsClientLocal; | 
|  | HANDLE                 ClientPID; | 
|  | unsigned __LONG32      CallStatus; | 
|  | RpcCallType            CallType; | 
|  | RPC_CALL_LOCAL_ADDRESS_W *CallLocalAddress; | 
|  | unsigned short         OpNum; | 
|  | UUID                   InterfaceUuid; | 
|  | } RPC_CALL_ATTRIBUTES_V2_W, RPC_CALL_ATTRIBUTES_W; | 
|  |  | 
|  | #define RPC_CALL_ATTRIBUTES_V2 __MINGW_NAME_AW(RPC_CALL_ATTRIBUTES_V2_) | 
|  |  | 
|  | RPC_STATUS RPC_ENTRY RpcDiagnoseError( | 
|  | RPC_BINDING_HANDLE BindingHandle, | 
|  | RPC_IF_HANDLE IfSpec, | 
|  | RPC_STATUS RpcStatus, | 
|  | RPC_ERROR_ENUM_HANDLE *EnumHandle, | 
|  | ULONG Options, | 
|  | HWND ParentWindow | 
|  | ); | 
|  | #endif /*(_WIN32_WINNT >= 0x0600)*/ | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  |  | 
|  | #ifdef __RPC_WIN64__ | 
|  | #include <poppack.h> | 
|  | #endif | 
|  | #endif |