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