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