| /* |
| * Copyright (C) 2007 Francois Gouget |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| #ifndef __WINE_RPCASYNC_H |
| #define __WINE_RPCASYNC_H |
| |
| #ifdef RPC_NO_WINDOWS_H |
| # include <windef.h> |
| #endif |
| |
| #ifdef __RPC_WIN64__ |
| # include <pshpack8.h> |
| #endif |
| |
| typedef struct tagRPC_ERROR_ENUM_HANDLE |
| { |
| ULONG Signature; |
| void* CurrentPos; |
| void* Head; |
| } RPC_ERROR_ENUM_HANDLE; |
| |
| 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; |
| LONG LVal; |
| short SVal; |
| ULONGLONG PVal; |
| BinaryParam BVal; |
| } u; |
| } RPC_EE_INFO_PARAM; |
| |
| #define EEInfoPreviousRecordsMissing 0x1 |
| #define EEInfoNextRecordsMissing 0x2 |
| #define EEInfoUseFileTime 0x4 |
| |
| #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; |
| |
| #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, |
| RpcClientDisconnect, |
| RpcClientCancel, |
| } RPC_ASYNC_EVENT; |
| |
| struct _RPC_ASYNC_STATE; |
| |
| typedef void RPC_ENTRY RPCNOTIFICATION_ROUTINE(struct _RPC_ASYNC_STATE *,void *,RPC_ASYNC_EVENT); |
| typedef RPCNOTIFICATION_ROUTINE *PFN_RPCNOTIFICATION_ROUTINE; |
| |
| 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; |
| |
| #define RPC_C_NOTIFY_ON_SEND_COMPLETE 0x1 |
| #define RPC_C_INFINITE_TIMEOUT INFINITE |
| |
| typedef struct _RPC_ASYNC_STATE |
| { |
| unsigned int Size; |
| ULONG Signature; |
| LONG Lock; |
| ULONG 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, *PRPC_ASYNC_STATE; |
| |
| #define RpcAsyncGetCallHandle(async) (((PRPC_ASYNC_STATE)async)->RuntimeInfo) |
| |
| #ifdef __RPC_WIN64__ |
| # include <poppack.h> |
| #endif |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncInitializeHandle(PRPC_ASYNC_STATE,unsigned int); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncRegisterInfo(PRPC_ASYNC_STATE); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncGetCallStatus(PRPC_ASYNC_STATE); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCompleteCall(PRPC_ASYNC_STATE,void *); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncAbortCall(PRPC_ASYNC_STATE,ULONG); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCancelCall(PRPC_ASYNC_STATE,BOOL); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCleanupThread(DWORD); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorStartEnumeration(RPC_ERROR_ENUM_HANDLE*); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorGetNextRecord(RPC_ERROR_ENUM_HANDLE*,BOOL,RPC_EXTENDED_ERROR_INFO*); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorEndEnumeration(RPC_ERROR_ENUM_HANDLE*); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorResetEnumeration(RPC_ERROR_ENUM_HANDLE*); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorGetNumberOfRecords(RPC_ERROR_ENUM_HANDLE*,int*); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorSaveErrorInfo(RPC_ERROR_ENUM_HANDLE*,PVOID*,SIZE_T*); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorLoadErrorInfo(PVOID,SIZE_T,RPC_ERROR_ENUM_HANDLE*); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorAddRecord(RPC_EXTENDED_ERROR_INFO*); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorClearInformation(void); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcGetAuthorizationContextForClient(RPC_BINDING_HANDLE,BOOL,LPVOID,PLARGE_INTEGER,LUID,DWORD,PVOID,PVOID*); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcFreeAuthorizationContext(PVOID*); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcSsContextLockExclusive(RPC_BINDING_HANDLE,PVOID); |
| RPCRTAPI RPC_STATUS RPC_ENTRY RpcSsContextLockShared(RPC_BINDING_HANDLE,PVOID); |
| |
| RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcAsyncSetHandle(PRPC_MESSAGE,PRPC_ASYNC_STATE); |
| RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcAsyncAbortCall(PRPC_ASYNC_STATE,ULONG); |
| RPCRTAPI int RPC_ENTRY I_RpcExceptionFilter(ULONG); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif |