387 lines
13 KiB
C
387 lines
13 KiB
C
|
/*
|
||
|
* rpcasync.h RPC asynchronous functions
|
||
|
*
|
||
|
* =========================================================================
|
||
|
*
|
||
|
* Open Watcom Project
|
||
|
*
|
||
|
* Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
|
||
|
*
|
||
|
* This file is automatically generated. Do not edit directly.
|
||
|
*
|
||
|
* =========================================================================
|
||
|
*/
|
||
|
|
||
|
#ifndef __RPCASYNC_H__
|
||
|
#define __RPCASYNC_H__
|
||
|
|
||
|
#ifndef _ENABLE_AUTODEPEND
|
||
|
#pragma read_only_file;
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/* RPC asynchronous state flags */
|
||
|
#define RPC_C_NOTIFY_ON_SEND_COMPLETE 0x00000001L
|
||
|
#define RPC_C_INFINITE_TIMEOUT INFINITE
|
||
|
|
||
|
/* RPC extender error information constants */
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
#define MaxNumberOfEEInfoParams 4
|
||
|
#define RPC_EEINFO_VERSION 1
|
||
|
#endif
|
||
|
|
||
|
/* RPC extended error information flags */
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
#define EEInfoPreviousRecordsMissing 1
|
||
|
#define EEInfoNextRecordsMissing 2
|
||
|
#define EEInfoUseFileTime 4
|
||
|
#define EEInfoGCCOM 11
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x05020000)
|
||
|
#define EEInfoGCFRS 12
|
||
|
#endif
|
||
|
|
||
|
/* RPC call attributes version number */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
#define RPC_CALL_ATTRIBUTES_VERSION 2
|
||
|
#elif (NTDDI_VERSION >= 0x05010000)
|
||
|
#define RPC_CALL_ATTRIBUTES_VERSION 1
|
||
|
#endif
|
||
|
|
||
|
/* RPC call attributes flags */
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
#define RPC_QUERY_SERVER_PRINCIPAL_NAME 0x00000002L
|
||
|
#define RPC_QUERY_CLIENT_PRINCIPAL_NAME 0x00000004L
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
#define RPC_QUERY_CALL_LOCAL_ADDRESS 0x00000008L
|
||
|
#define RPC_QUERY_CLIENT_PID 0x00000010L
|
||
|
#define RPC_QUERY_IS_CLIENT_LOCAL 0x00000020L
|
||
|
#define RPC_QUERY_NO_AUTH_REQUIRED 0x00000040L
|
||
|
#endif
|
||
|
|
||
|
/* RPC call status flags */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
#define RPC_CALL_STATUS_CANCELLED 0x00000001L
|
||
|
#define RPC_CALL_STATUS_DISCONNECTED 0x00000002L
|
||
|
#endif
|
||
|
|
||
|
/* RpcDiagnoseError() flags */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
#define RPC_DE_USE_CURRENT_EEINFO 0x00000001L
|
||
|
#endif
|
||
|
|
||
|
/* RPC notification types */
|
||
|
typedef enum _RPC_NOTIFICATION_TYPES {
|
||
|
RpcNotificationTypeNone,
|
||
|
RpcNotificationTypeEvent,
|
||
|
RpcNotificationTypeApc,
|
||
|
RpcNotificationTypeIoc,
|
||
|
RpcNotificationTypeHwnd,
|
||
|
RpcNotificationTypeCallback
|
||
|
} RPC_NOTIFICATION_TYPES;
|
||
|
|
||
|
/* RPC asynchronous events */
|
||
|
typedef enum _RPC_ASYNC_EVENT {
|
||
|
RpcCallComplete,
|
||
|
RpcSendComplete,
|
||
|
RpcReceiveComplete,
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
RpcClientDisconnect,
|
||
|
RpcClientCancel
|
||
|
#else
|
||
|
RpcClientDisconnect
|
||
|
#endif
|
||
|
} RPC_ASYNC_EVENT;
|
||
|
|
||
|
/* RPC notification routine */
|
||
|
struct _RPC_ASYNC_STATE;
|
||
|
typedef void (RPC_ENTRY RPCNOTIFICATION_ROUTINE)( struct _RPC_ASYNC_STATE *, void *, RPC_ASYNC_EVENT );
|
||
|
typedef RPCNOTIFICATION_ROUTINE *PFN_RPCNOTIFICATION_ROUTINE;
|
||
|
|
||
|
/* RPC asynchronous notification information */
|
||
|
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;
|
||
|
typedef RPC_ASYNC_NOTIFICATION_INFO *PRPC_ASYNC_NOTIFICATION_INFO;
|
||
|
|
||
|
/* RPC asynchronous state */
|
||
|
typedef struct _RPC_ASYNC_STATE {
|
||
|
unsigned int Size;
|
||
|
unsigned long Signature;
|
||
|
long Lock;
|
||
|
unsigned long Flags;
|
||
|
void *StubInfo;
|
||
|
void *UserInfo;
|
||
|
void *RuntimeInfo;
|
||
|
RPC_ASYNC_EVENT Event;
|
||
|
RPC_NOTIFICATION_TYPES NotificationType;
|
||
|
RPC_ASYNC_NOTIFICATION_INFO u;
|
||
|
LONG_PTR Reserved[4];
|
||
|
} RPC_ASYNC_STATE;
|
||
|
typedef RPC_ASYNC_STATE *PRPC_ASYNC_STATE;
|
||
|
|
||
|
/* Extended error parameter types */
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
typedef enum tagExtendedErrorParamTypes {
|
||
|
eeptAnsiString = 1,
|
||
|
eeptUnicodeString = 2,
|
||
|
eeptLongVal = 3,
|
||
|
eeptShortVal = 4,
|
||
|
eeptPointerVal = 5,
|
||
|
eeptNone = 6,
|
||
|
eeptBinary = 7
|
||
|
} ExtendedErrorParamTypes;
|
||
|
#endif
|
||
|
|
||
|
/* Binary parameter */
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
typedef struct tagBinaryParam {
|
||
|
void *Buffer;
|
||
|
short Size;
|
||
|
} BinaryParam;
|
||
|
#endif
|
||
|
|
||
|
/* RPC extended error information parameter */
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
typedef struct tagRPC_EE_INFO_PARAM {
|
||
|
ExtendedErrorParamTypes ParameterType;
|
||
|
union {
|
||
|
LPSTR AnsiString;
|
||
|
LPWSTR UnicodeString;
|
||
|
long LVal;
|
||
|
short SVal;
|
||
|
ULONGLONG PVal;
|
||
|
BinaryParam BVal;
|
||
|
} u;
|
||
|
} RPC_EE_INFO_PARAM;
|
||
|
#endif
|
||
|
|
||
|
/* RPC extended error information */
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
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;
|
||
|
#endif
|
||
|
|
||
|
/* RPC error enumeration handle */
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
typedef struct tagRPC_ERROR_ENUM_HANDLE {
|
||
|
ULONG Signature;
|
||
|
void *CurrentPos;
|
||
|
void *Head;
|
||
|
} RPC_ERROR_ENUM_HANDLE;
|
||
|
#endif
|
||
|
|
||
|
/* RPC local address format */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef enum tagRpcLocalAddressFormat {
|
||
|
rlafInvalid = 0,
|
||
|
rlafIPv4 = 1,
|
||
|
rlafIPv6 = 2
|
||
|
} RpcLocalAddressFormat;
|
||
|
#endif
|
||
|
|
||
|
/* RPC call local address */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef struct _RPC_CALL_LOCAL_ADDRESS_V1 {
|
||
|
unsigned int Version;
|
||
|
void *Buffer;
|
||
|
unsigned long BufferSize;
|
||
|
RpcLocalAddressFormat AddressFormat;
|
||
|
} RPC_CALL_LOCAL_ADDRESS_V1;
|
||
|
typedef RPC_CALL_LOCAL_ADDRESS_V1 *PRPC_CALL_LOCAL_ADDRESS_V1;
|
||
|
#endif
|
||
|
|
||
|
/* RPC call attributes (version 1) */
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
typedef struct tagRPC_CALL_ATTRIBUTES_V1_A {
|
||
|
unsigned int Version;
|
||
|
unsigned long Flags;
|
||
|
unsigned long ServerPrincipalNameBufferLength;
|
||
|
unsigned char *ServerPrincipalName;
|
||
|
unsigned long ClientPrincipalNameBufferLength;
|
||
|
unsigned char *ClientPrincipalName;
|
||
|
unsigned long AuthenticationLevel;
|
||
|
unsigned long AuthenticationService;
|
||
|
BOOL NullSession;
|
||
|
} RPC_CALL_ATTRIBUTES_V1_A;
|
||
|
typedef struct tagRPC_CALL_ATTRIBUTES_V1_W {
|
||
|
unsigned int Version;
|
||
|
unsigned long Flags;
|
||
|
unsigned long ServerPrincipalNameBufferLength;
|
||
|
unsigned short *ServerPrincipalName;
|
||
|
unsigned long ClientPrincipalNameBufferLength;
|
||
|
unsigned short *ClientPrincipalName;
|
||
|
unsigned long AuthenticationLevel;
|
||
|
unsigned long AuthenticationService;
|
||
|
BOOL NullSession;
|
||
|
} RPC_CALL_ATTRIBUTES_V1_W;
|
||
|
#ifdef UNICODE
|
||
|
typedef RPC_CALL_ATTRIBUTES_V1_W RPC_CALL_ATTRIBUTES_V1;
|
||
|
#else
|
||
|
typedef RPC_CALL_ATTRIBUTES_V1_A RPC_CALL_ATTRIBUTES_V1;
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/* RPC call types */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef enum tagRpcCallType {
|
||
|
rtcInvalid = 0,
|
||
|
rtcNormal = 1,
|
||
|
rtcTraining = 2,
|
||
|
rtcGuaranteed = 3
|
||
|
} RpcCallType;
|
||
|
#endif
|
||
|
|
||
|
/* RPC call client locality */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef enum tagRpcCallClientLocality {
|
||
|
rcclInvalid = 0,
|
||
|
rcclLocal = 1,
|
||
|
rcclRemote = 2,
|
||
|
rcclClientUnknownLocality = 3
|
||
|
} RpcCallClientLocality;
|
||
|
#endif
|
||
|
|
||
|
/* RPC call attributes (version 2) */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef struct tagRPC_CALL_ATTRIBUTES_V2_A {
|
||
|
unsigned int Version;
|
||
|
unsigned long Flags;
|
||
|
unsigned long ServerPrincipalNameBufferLength;
|
||
|
unsigned char *ServerPrincipalName;
|
||
|
unsigned long ClientPrincipalNameBufferLength;
|
||
|
unsigned char *ClientPrincipalName;
|
||
|
unsigned long AuthenticationLevel;
|
||
|
unsigned long AuthenticationService;
|
||
|
BOOL NullSession;
|
||
|
BOOL KernelModeCaller;
|
||
|
unsigned long ProtocolSequence;
|
||
|
RpcCallClientLocality IsClientLocal;
|
||
|
HANDLE ClientPID;
|
||
|
unsigned long CallStatus;
|
||
|
RpcCallType CallType;
|
||
|
RPC_CALL_LOCAL_ADDRESS_V1 *CallLocalAddress;
|
||
|
unsigned short OpNum;
|
||
|
UUID InterfaceUuid;
|
||
|
} RPC_CALL_ATTRIBUTES_V2_A;
|
||
|
typedef struct tagRPC_CALL_ATTRIBUTES_V2_W {
|
||
|
unsigned int Version;
|
||
|
unsigned long Flags;
|
||
|
unsigned long ServerPrincipalNameBufferLength;
|
||
|
unsigned short *ServerPrincipalName;
|
||
|
unsigned long ClientPrincipalNameBufferLength;
|
||
|
unsigned short *ClientPrincipalName;
|
||
|
unsigned long AuthenticationLevel;
|
||
|
unsigned long AuthenticationService;
|
||
|
BOOL NullSession;
|
||
|
BOOL KernelModeCaller;
|
||
|
unsigned long ProtocolSequence;
|
||
|
RpcCallClientLocality IsClientLocal;
|
||
|
HANDLE ClientPID;
|
||
|
unsigned long CallStatus;
|
||
|
RpcCallType CallType;
|
||
|
RPC_CALL_LOCAL_ADDRESS_V1 *CallLocalAddress;
|
||
|
unsigned short OpNum;
|
||
|
UUID InterfaceUuid;
|
||
|
} RPC_CALL_ATTRIBUTES_V2_W;
|
||
|
#ifdef UNICODE
|
||
|
typedef RPC_CALL_ATTRIBUTES_V2_W RPC_CALL_ATTRIBUTES_V2;
|
||
|
#else
|
||
|
typedef RPC_CALL_ATTRIBUTES_V2_A RPC_CALL_ATTRIBUTES_V2;
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/* RPC notifications */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef enum _RPC_NOTIFICATIONS {
|
||
|
RpcNotificationCallNone = 0,
|
||
|
RpcNotificationClientDisconnect = 1,
|
||
|
RpcNotificationCallCancel = 2,
|
||
|
RpcNotificationCallStatusChange = RpcNotificationClientDisconnect
|
||
|
} RPC_NOTIFICATIONS;
|
||
|
#endif
|
||
|
|
||
|
/* Functions in RPCRT4.DLL */
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcAsyncAbortCall( PRPC_ASYNC_STATE, unsigned long );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcAsyncSetHandle( PRPC_MESSAGE, PRPC_ASYNC_STATE );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncAbortCall( PRPC_ASYNC_STATE, unsigned long );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCancelCall( PRPC_ASYNC_STATE, BOOL );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCompleteCall( PRPC_ASYNC_STATE, void * );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncGetCallStatus( PRPC_ASYNC_STATE );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncInitializeHandle( PRPC_ASYNC_STATE, unsigned int );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncRegisterInfo( PRPC_ASYNC_STATE );
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
RPCRTAPI int RPC_ENTRY I_RpcExceptionFilter( unsigned long );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorAddRecord( RPC_EXTENDED_ERROR_INFO * );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorClearInformation( void );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorEndEnumeration( RPC_ERROR_ENUM_HANDLE * );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorGetNextRecord( RPC_ERROR_ENUM_HANDLE *, BOOL, RPC_EXTENDED_ERROR_INFO * );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorGetNumberOfRecords( RPC_ERROR_ENUM_HANDLE *, int * );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorLoadErrorInfo( PVOID, size_t, RPC_ERROR_ENUM_HANDLE * );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorResetEnumeration( RPC_ERROR_ENUM_HANDLE * );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorSaveErrorInfo( RPC_ERROR_ENUM_HANDLE *, PVOID *, size_t * );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorStartEnumeration( RPC_ERROR_ENUM_HANDLE * );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcFreeAuthorizationContext( PVOID * );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcGetAuthorizationContextForClient( RPC_BINDING_HANDLE, BOOL, PVOID, PLARGE_INTEGER, LUID, DWORD, PVOID, PVOID * );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerInqCallAttributesA( RPC_BINDING_HANDLE, void * );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerInqCallAttributesW( RPC_BINDING_HANDLE, void * );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcSsContextLockExclusive( RPC_BINDING_HANDLE, PVOID );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcSsContextLockShared( RPC_BINDING_HANDLE, PVOID );
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingBind( PRPC_ASYNC_STATE, RPC_BINDING_HANDLE, RPC_IF_HANDLE );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingUnbind( RPC_BINDING_HANDLE );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerSubscribeForNotification( RPC_BINDING_HANDLE, RPC_NOTIFICATIONS, RPC_NOTIFICATION_TYPES, RPC_ASYNC_NOTIFICATION_INFO * );
|
||
|
RPCRTAPI RPC_STATUS RPC_ENTRY RpcServerUnsubscribeForNotification( RPC_BINDING_HANDLE, RPC_NOTIFICATIONS, unsigned long * );
|
||
|
#endif
|
||
|
|
||
|
/* Functions implemented as macros */
|
||
|
#define RpcAsyncGetCallHandle( x ) (((PRPC_ASYNC_STATE)x)->RuntimeInfo)
|
||
|
|
||
|
/* Map generic function names to the appropriate ANSI or Unicode version. */
|
||
|
#ifdef UNICODE
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
#define RpcServerInqCallAttributes RpcServerInqCallAttributesW
|
||
|
#else
|
||
|
#define RpcServerInqCallAttributes RpcServerInqCallAttributesA
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
} /* extern "C" */
|
||
|
#endif
|
||
|
|
||
|
#endif /* __RPCASYNC_H__ */
|