diff --git a/reactos/include/psdk/rpc.h b/reactos/include/psdk/rpc.h index 27e1c6273d4..9ffc414cb4b 100644 --- a/reactos/include/psdk/rpc.h +++ b/reactos/include/psdk/rpc.h @@ -91,6 +91,9 @@ typedef long RPC_STATUS; #define RPCNSAPI #endif +#ifndef RPC_NO_WINDOWS_H +#include +#endif #ifdef __RPC_MAC__ #include diff --git a/reactos/include/psdk/rpcasync.h b/reactos/include/psdk/rpcasync.h new file mode 100644 index 00000000000..6b5f77bdc2a --- /dev/null +++ b/reactos/include/psdk/rpcasync.h @@ -0,0 +1,189 @@ +/* + * 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 diff --git a/reactos/include/psdk/winbase.h b/reactos/include/psdk/winbase.h index 5fecc919b7e..1c44f18f77b 100644 --- a/reactos/include/psdk/winbase.h +++ b/reactos/include/psdk/winbase.h @@ -1614,6 +1614,7 @@ DWORD WINAPI GetTickCount(VOID); #if (_WIN32_WINNT >= 0x0600) ULONGLONG WINAPI GetTickCount64(VOID); #endif +DWORD WINAPI GetThreadId(HANDLE); DWORD WINAPI GetTimeZoneInformation(LPTIME_ZONE_INFORMATION); BOOL WINAPI GetTokenInformation(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,DWORD,PDWORD); BOOL WINAPI GetUserNameA (LPSTR,PDWORD);