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