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