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