1c2c66affSColin Finck /* 2c2c66affSColin Finck * Copyright (C) 1998-1999 Francois Gouget 3c2c66affSColin Finck * 4c2c66affSColin Finck * This library is free software; you can redistribute it and/or 5c2c66affSColin Finck * modify it under the terms of the GNU Lesser General Public 6c2c66affSColin Finck * License as published by the Free Software Foundation; either 7c2c66affSColin Finck * version 2.1 of the License, or (at your option) any later version. 8c2c66affSColin Finck * 9c2c66affSColin Finck * This library is distributed in the hope that it will be useful, 10c2c66affSColin Finck * but WITHOUT ANY WARRANTY; without even the implied warranty of 11c2c66affSColin Finck * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12c2c66affSColin Finck * Lesser General Public License for more details. 13c2c66affSColin Finck * 14c2c66affSColin Finck * You should have received a copy of the GNU Lesser General Public 15c2c66affSColin Finck * License along with this library; if not, write to the Free Software 16c2c66affSColin Finck * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17c2c66affSColin Finck */ 18c2c66affSColin Finck 19c2c66affSColin Finck #include <rpc.h> 20c2c66affSColin Finck #include <rpcndr.h> 21c2c66affSColin Finck 22c2c66affSColin Finck #ifndef _OBJBASE_H_ 23c2c66affSColin Finck #define _OBJBASE_H_ 24c2c66affSColin Finck 25c2c66affSColin Finck /***************************************************************************** 26c2c66affSColin Finck * Macros to define a COM interface 27c2c66affSColin Finck */ 28c2c66affSColin Finck /* 29c2c66affSColin Finck * The goal of the following set of definitions is to provide a way to use the same 30c2c66affSColin Finck * header file definitions to provide both a C interface and a C++ object oriented 31c2c66affSColin Finck * interface to COM interfaces. The type of interface is selected automatically 32c2c66affSColin Finck * depending on the language but it is always possible to get the C interface in C++ 33c2c66affSColin Finck * by defining CINTERFACE. 34c2c66affSColin Finck * 35c2c66affSColin Finck * It is based on the following assumptions: 36c2c66affSColin Finck * - all COM interfaces derive from IUnknown, this should not be a problem. 37c2c66affSColin Finck * - the header file only defines the interface, the actual fields are defined 38c2c66affSColin Finck * separately in the C file implementing the interface. 39c2c66affSColin Finck * 40c2c66affSColin Finck * The natural approach to this problem would be to make sure we get a C++ class and 41c2c66affSColin Finck * virtual methods in C++ and a structure with a table of pointer to functions in C. 42c2c66affSColin Finck * Unfortunately the layout of the virtual table is compiler specific, the layout of 43c2c66affSColin Finck * g++ virtual tables is not the same as that of an egcs virtual table which is not the 44c2c66affSColin Finck * same as that generated by Visual C++. There are workarounds to make the virtual tables 45c2c66affSColin Finck * compatible via padding but unfortunately the one which is imposed to the WINE emulator 46c2c66affSColin Finck * by the Windows binaries, i.e. the Visual C++ one, is the most compact of all. 47c2c66affSColin Finck * 48c2c66affSColin Finck * So the solution I finally adopted does not use virtual tables. Instead I use inline 49c2c66affSColin Finck * non virtual methods that dereference the method pointer themselves and perform the call. 50c2c66affSColin Finck * 51c2c66affSColin Finck * Let's take Direct3D as an example: 52c2c66affSColin Finck * 53c2c66affSColin Finck * #define INTERFACE IDirect3D 54c2c66affSColin Finck * DECLARE_INTERFACE_(IDirect3D,IUnknown) 55c2c66affSColin Finck * { 56c2c66affSColin Finck * // *** IUnknown methods *** // 57c2c66affSColin Finck * STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID, void**) PURE; 58c2c66affSColin Finck * STDMETHOD_(ULONG,AddRef)(THIS) PURE; 59c2c66affSColin Finck * STDMETHOD_(ULONG,Release)(THIS) PURE; 60c2c66affSColin Finck * // *** IDirect3D methods *** // 61c2c66affSColin Finck * STDMETHOD(Initialize)(THIS_ REFIID) PURE; 62c2c66affSColin Finck * STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK, LPVOID) PURE; 63c2c66affSColin Finck * STDMETHOD(CreateLight)(THIS_ LPDIRECT3DLIGHT *, IUnknown *) PURE; 64c2c66affSColin Finck * STDMETHOD(CreateMaterial)(THIS_ LPDIRECT3DMATERIAL *, IUnknown *) PURE; 65c2c66affSColin Finck * STDMETHOD(CreateViewport)(THIS_ LPDIRECT3DVIEWPORT *, IUnknown *) PURE; 66c2c66affSColin Finck * STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT) PURE; 67c2c66affSColin Finck * }; 68c2c66affSColin Finck * #undef INTERFACE 69c2c66affSColin Finck * 70c2c66affSColin Finck * #ifdef COBJMACROS 71c2c66affSColin Finck * // *** IUnknown methods *** // 72c2c66affSColin Finck * #define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) 73c2c66affSColin Finck * #define IDirect3D_AddRef(p) (p)->lpVtbl->AddRef(p) 74c2c66affSColin Finck * #define IDirect3D_Release(p) (p)->lpVtbl->Release(p) 75c2c66affSColin Finck * // *** IDirect3D methods *** // 76c2c66affSColin Finck * #define IDirect3D_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) 77c2c66affSColin Finck * #define IDirect3D_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevice(p,a,b) 78c2c66affSColin Finck * #define IDirect3D_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b) 79c2c66affSColin Finck * #define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b) 80c2c66affSColin Finck * #define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b) 81c2c66affSColin Finck * #define IDirect3D_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b) 82c2c66affSColin Finck * #endif 83c2c66affSColin Finck * 84c2c66affSColin Finck * Comments: 85c2c66affSColin Finck * - The INTERFACE macro is used in the STDMETHOD macros to define the type of the 'this' 86c2c66affSColin Finck * pointer. Defining this macro here saves us the trouble of having to repeat the interface 87c2c66affSColin Finck * name everywhere. Note however that because of the way macros work, a macro like STDMETHOD 88c2c66affSColin Finck * cannot use 'INTERFACE##_VTABLE' because this would give 'INTERFACE_VTABLE' and not 89c2c66affSColin Finck * 'IDirect3D_VTABLE'. 90c2c66affSColin Finck * - The DECLARE_INTERFACE declares all the structures necessary for the interface. We have to 91c2c66affSColin Finck * explicitly use the interface name for macro expansion reasons again. It defines the list of 92c2c66affSColin Finck * methods that are inheritable from this interface. It must be written manually (rather than 93c2c66affSColin Finck * using a macro to generate the equivalent code) to avoid macro recursion (which compilers 94c2c66affSColin Finck * don't like). It must start with the methods definition of the parent interface so that 95c2c66affSColin Finck * method inheritance works properly. 96c2c66affSColin Finck * - The 'undef INTERFACE' is here to remind you that using INTERFACE in the following macros 97c2c66affSColin Finck * will not work. 98c2c66affSColin Finck * - Finally the set of 'IDirect3D_Xxx' macros is a standard set of macros defined to ease access 99c2c66affSColin Finck * to the interface methods in C. Unfortunately I don't see any way to avoid having to duplicate 100c2c66affSColin Finck * the inherited method definitions there. This time I could have used a trick to use only one 101c2c66affSColin Finck * macro whatever the number of parameters but I preferred to have it work the same way as above. 102c2c66affSColin Finck * - You probably have noticed that we don't define the fields we need to actually implement this 103c2c66affSColin Finck * interface: reference count, pointer to other resources and miscellaneous fields. That's 104c2c66affSColin Finck * because these interfaces are just that: interfaces. They may be implemented more than once, in 105c2c66affSColin Finck * different contexts and sometimes not even in Wine. Thus it would not make sense to impose 106c2c66affSColin Finck * that the interface contains some specific fields. 107c2c66affSColin Finck * 108c2c66affSColin Finck * 109c2c66affSColin Finck * In C this gives: 110c2c66affSColin Finck * typedef struct IDirect3DVtbl IDirect3DVtbl; 111c2c66affSColin Finck * struct IDirect3D { 112c2c66affSColin Finck * IDirect3DVtbl* lpVtbl; 113c2c66affSColin Finck * }; 114c2c66affSColin Finck * struct IDirect3DVtbl { 115c2c66affSColin Finck * HRESULT (*QueryInterface)(IDirect3D* me, REFIID riid, LPVOID* ppvObj); 116c2c66affSColin Finck * ULONG (*AddRef)(IDirect3D* me); 117c2c66affSColin Finck * ULONG (*Release)(IDirect3D* me); 118c2c66affSColin Finck * HRESULT (*Initialize)(IDirect3D* me, REFIID a); 119c2c66affSColin Finck * HRESULT (*EnumDevices)(IDirect3D* me, LPD3DENUMDEVICESCALLBACK a, LPVOID b); 120c2c66affSColin Finck * HRESULT (*CreateLight)(IDirect3D* me, LPDIRECT3DLIGHT* a, IUnknown* b); 121c2c66affSColin Finck * HRESULT (*CreateMaterial)(IDirect3D* me, LPDIRECT3DMATERIAL* a, IUnknown* b); 122c2c66affSColin Finck * HRESULT (*CreateViewport)(IDirect3D* me, LPDIRECT3DVIEWPORT* a, IUnknown* b); 123c2c66affSColin Finck * HRESULT (*FindDevice)(IDirect3D* me, LPD3DFINDDEVICESEARCH a, LPD3DFINDDEVICERESULT b); 124c2c66affSColin Finck * }; 125c2c66affSColin Finck * 126c2c66affSColin Finck * #ifdef COBJMACROS 127c2c66affSColin Finck * // *** IUnknown methods *** // 128c2c66affSColin Finck * #define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) 129c2c66affSColin Finck * #define IDirect3D_AddRef(p) (p)->lpVtbl->AddRef(p) 130c2c66affSColin Finck * #define IDirect3D_Release(p) (p)->lpVtbl->Release(p) 131c2c66affSColin Finck * // *** IDirect3D methods *** // 132c2c66affSColin Finck * #define IDirect3D_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) 133c2c66affSColin Finck * #define IDirect3D_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevice(p,a,b) 134c2c66affSColin Finck * #define IDirect3D_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b) 135c2c66affSColin Finck * #define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b) 136c2c66affSColin Finck * #define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b) 137c2c66affSColin Finck * #define IDirect3D_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b) 138c2c66affSColin Finck * #endif 139c2c66affSColin Finck * 140c2c66affSColin Finck * Comments: 141c2c66affSColin Finck * - IDirect3D only contains a pointer to the IDirect3D virtual/jump table. This is the only thing 142c2c66affSColin Finck * the user needs to know to use the interface. Of course the structure we will define to 143c2c66affSColin Finck * implement this interface will have more fields but the first one will match this pointer. 144c2c66affSColin Finck * - The code generated by DECLARE_INTERFACE defines both the structure representing the interface and 145c2c66affSColin Finck * the structure for the jump table. 146c2c66affSColin Finck * - Each method is declared as a pointer to function field in the jump table. The implementation 147c2c66affSColin Finck * will fill this jump table with appropriate values, probably using a static variable, and 148c2c66affSColin Finck * initialize the lpVtbl field to point to this variable. 149c2c66affSColin Finck * - The IDirect3D_Xxx macros then just derefence the lpVtbl pointer and use the function pointer 150c2c66affSColin Finck * corresponding to the macro name. This emulates the behavior of a virtual table and should be 151c2c66affSColin Finck * just as fast. 152c2c66affSColin Finck * - This C code should be quite compatible with the Windows headers both for code that uses COM 153c2c66affSColin Finck * interfaces and for code implementing a COM interface. 154c2c66affSColin Finck * 155c2c66affSColin Finck * 156c2c66affSColin Finck * And in C++ (with gcc's g++): 157c2c66affSColin Finck * 158c2c66affSColin Finck * typedef struct IDirect3D: public IUnknown { 159c2c66affSColin Finck * virtual HRESULT Initialize(REFIID a) = 0; 160c2c66affSColin Finck * virtual HRESULT EnumDevices(LPD3DENUMDEVICESCALLBACK a, LPVOID b) = 0; 161c2c66affSColin Finck * virtual HRESULT CreateLight(LPDIRECT3DLIGHT* a, IUnknown* b) = 0; 162c2c66affSColin Finck * virtual HRESULT CreateMaterial(LPDIRECT3DMATERIAL* a, IUnknown* b) = 0; 163c2c66affSColin Finck * virtual HRESULT CreateViewport(LPDIRECT3DVIEWPORT* a, IUnknown* b) = 0; 164c2c66affSColin Finck * virtual HRESULT FindDevice(LPD3DFINDDEVICESEARCH a, LPD3DFINDDEVICERESULT b) = 0; 165c2c66affSColin Finck * }; 166c2c66affSColin Finck * 167c2c66affSColin Finck * Comments: 168c2c66affSColin Finck * - Of course in C++ we use inheritance so that we don't have to duplicate the method definitions. 169c2c66affSColin Finck * - Finally there is no IDirect3D_Xxx macro. These are not needed in C++ unless the CINTERFACE 170c2c66affSColin Finck * macro is defined in which case we would not be here. 171c2c66affSColin Finck */ 172c2c66affSColin Finck 173c2c66affSColin Finck #if defined(__cplusplus) && !defined(CINTERFACE) 174c2c66affSColin Finck 175c2c66affSColin Finck /* C++ interface */ 176c2c66affSColin Finck 177c2c66affSColin Finck #define STDMETHOD(method) virtual HRESULT STDMETHODCALLTYPE method 178c2c66affSColin Finck #define STDMETHOD_(type,method) virtual type STDMETHODCALLTYPE method 179c2c66affSColin Finck #define STDMETHODV(method) virtual HRESULT STDMETHODVCALLTYPE method 180c2c66affSColin Finck #define STDMETHODV_(type,method) virtual type STDMETHODVCALLTYPE method 181c2c66affSColin Finck 182c2c66affSColin Finck #define PURE = 0 183c2c66affSColin Finck #define THIS_ 184c2c66affSColin Finck #define THIS void 185c2c66affSColin Finck 186c2c66affSColin Finck #define interface struct 187c2c66affSColin Finck #define DECLARE_INTERFACE(iface) interface DECLSPEC_NOVTABLE iface 188c2c66affSColin Finck #define DECLARE_INTERFACE_(iface,ibase) interface DECLSPEC_NOVTABLE iface : public ibase 189c2c66affSColin Finck #define DECLARE_INTERFACE_IID_(iface, ibase, iid) interface DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE iface : public ibase 190c2c66affSColin Finck 191c2c66affSColin Finck #define BEGIN_INTERFACE 192c2c66affSColin Finck #define END_INTERFACE 193c2c66affSColin Finck 194c2c66affSColin Finck #else /* __cplusplus && !CINTERFACE */ 195c2c66affSColin Finck 196c2c66affSColin Finck /* C interface */ 197c2c66affSColin Finck 198c2c66affSColin Finck #define STDMETHOD(method) HRESULT (STDMETHODCALLTYPE *method) 199c2c66affSColin Finck #define STDMETHOD_(type,method) type (STDMETHODCALLTYPE *method) 200c2c66affSColin Finck #define STDMETHODV(method) HRESULT (STDMETHODVCALLTYPE *method) 201c2c66affSColin Finck #define STDMETHODV_(type,method) type (STDMETHODVCALLTYPE *method) 202c2c66affSColin Finck 203c2c66affSColin Finck #define PURE 204c2c66affSColin Finck #define THIS_ INTERFACE *This, 205c2c66affSColin Finck #define THIS INTERFACE *This 206c2c66affSColin Finck 207c2c66affSColin Finck #define interface struct 208c2c66affSColin Finck 209c2c66affSColin Finck #ifdef __WINESRC__ 210c2c66affSColin Finck #define CONST_VTABLE 211c2c66affSColin Finck #endif 212c2c66affSColin Finck 213c2c66affSColin Finck #ifdef CONST_VTABLE 214c2c66affSColin Finck #undef CONST_VTBL 215c2c66affSColin Finck #define CONST_VTBL const 216c2c66affSColin Finck #define DECLARE_INTERFACE(iface) \ 217c2c66affSColin Finck typedef interface iface { const struct iface##Vtbl *lpVtbl; } iface; \ 218c2c66affSColin Finck typedef struct iface##Vtbl iface##Vtbl; \ 219c2c66affSColin Finck struct iface##Vtbl 220c2c66affSColin Finck #else 221c2c66affSColin Finck #undef CONST_VTBL 222c2c66affSColin Finck #define CONST_VTBL 223c2c66affSColin Finck #define DECLARE_INTERFACE(iface) \ 224c2c66affSColin Finck typedef interface iface { struct iface##Vtbl *lpVtbl; } iface; \ 225c2c66affSColin Finck typedef struct iface##Vtbl iface##Vtbl; \ 226c2c66affSColin Finck struct iface##Vtbl 227c2c66affSColin Finck #endif 228c2c66affSColin Finck #define DECLARE_INTERFACE_(iface,ibase) DECLARE_INTERFACE(iface) 229c2c66affSColin Finck #define DECLARE_INTERFACE_IID_(iface, ibase, iid) DECLARE_INTERFACE_(iface, ibase) 230c2c66affSColin Finck 231c2c66affSColin Finck #define BEGIN_INTERFACE 232c2c66affSColin Finck #define END_INTERFACE 233c2c66affSColin Finck 234c2c66affSColin Finck #endif /* __cplusplus && !CINTERFACE */ 235c2c66affSColin Finck 236c2c66affSColin Finck #ifndef __IRpcStubBuffer_FWD_DEFINED__ 237c2c66affSColin Finck #define __IRpcStubBuffer_FWD_DEFINED__ 238c2c66affSColin Finck typedef interface IRpcStubBuffer IRpcStubBuffer; 239c2c66affSColin Finck #endif 240c2c66affSColin Finck #ifndef __IRpcChannelBuffer_FWD_DEFINED__ 241c2c66affSColin Finck #define __IRpcChannelBuffer_FWD_DEFINED__ 242c2c66affSColin Finck typedef interface IRpcChannelBuffer IRpcChannelBuffer; 243c2c66affSColin Finck #endif 244c2c66affSColin Finck 245c2c66affSColin Finck #ifndef RC_INVOKED 246c2c66affSColin Finck /* For compatibility only, at least for now */ 247c2c66affSColin Finck #include <stdlib.h> 248c2c66affSColin Finck #endif 249c2c66affSColin Finck 250c2c66affSColin Finck #include <wtypes.h> 251c2c66affSColin Finck #include <unknwn.h> 252c2c66affSColin Finck #include <objidl.h> 253c2c66affSColin Finck 254c2c66affSColin Finck #include <guiddef.h> 255c2c66affSColin Finck #ifndef INITGUID 256c2c66affSColin Finck #include <cguid.h> 257c2c66affSColin Finck #endif 258c2c66affSColin Finck 259c2c66affSColin Finck #ifdef __cplusplus 260c2c66affSColin Finck extern "C" { 261c2c66affSColin Finck #endif 262c2c66affSColin Finck 263c2c66affSColin Finck #ifndef NONAMELESSSTRUCT 264c2c66affSColin Finck #define LISet32(li, v) ((li).HighPart = (v) < 0 ? -1 : 0, (li).LowPart = (v)) 265c2c66affSColin Finck #define ULISet32(li, v) ((li).HighPart = 0, (li).LowPart = (v)) 266c2c66affSColin Finck #else 267c2c66affSColin Finck #define LISet32(li, v) ((li).u.HighPart = (v) < 0 ? -1 : 0, (li).u.LowPart = (v)) 268c2c66affSColin Finck #define ULISet32(li, v) ((li).u.HighPart = 0, (li).u.LowPart = (v)) 269c2c66affSColin Finck #endif 270c2c66affSColin Finck 271c2c66affSColin Finck /***************************************************************************** 272c2c66affSColin Finck * Standard API 273c2c66affSColin Finck */ 274c2c66affSColin Finck DWORD WINAPI CoBuildVersion(void); 275c2c66affSColin Finck 276c2c66affSColin Finck typedef enum tagCOINIT 277c2c66affSColin Finck { 278c2c66affSColin Finck COINIT_APARTMENTTHREADED = 0x2, /* Apartment model */ 279c2c66affSColin Finck COINIT_MULTITHREADED = 0x0, /* OLE calls objects on any thread */ 280c2c66affSColin Finck COINIT_DISABLE_OLE1DDE = 0x4, /* Don't use DDE for Ole1 support */ 281c2c66affSColin Finck COINIT_SPEED_OVER_MEMORY = 0x8 /* Trade memory for speed */ 282c2c66affSColin Finck } COINIT; 283c2c66affSColin Finck 284c2c66affSColin Finck _Check_return_ HRESULT WINAPI CoInitialize(_In_opt_ LPVOID lpReserved); 285c2c66affSColin Finck 286c2c66affSColin Finck _Check_return_ 287c2c66affSColin Finck HRESULT 288c2c66affSColin Finck WINAPI 289c2c66affSColin Finck CoInitializeEx( 290c2c66affSColin Finck _In_opt_ LPVOID lpReserved, 291c2c66affSColin Finck _In_ DWORD dwCoInit); 292c2c66affSColin Finck 293c2c66affSColin Finck void WINAPI CoUninitialize(void); 294c2c66affSColin Finck DWORD WINAPI CoGetCurrentProcess(void); 295c2c66affSColin Finck HRESULT WINAPI CoGetCurrentLogicalThreadId(_Out_ GUID *id); 296c2c66affSColin Finck HRESULT WINAPI CoGetApartmentType(_Out_ APTTYPE *type, _Out_ APTTYPEQUALIFIER *qualifier); 297c2c66affSColin Finck 298c2c66affSColin Finck HINSTANCE WINAPI CoLoadLibrary(_In_ LPOLESTR lpszLibName, _In_ BOOL bAutoFree); 299c2c66affSColin Finck void WINAPI CoFreeAllLibraries(void); 300c2c66affSColin Finck void WINAPI CoFreeLibrary(_In_ HINSTANCE hLibrary); 301c2c66affSColin Finck void WINAPI CoFreeUnusedLibraries(void); 302c2c66affSColin Finck 303c2c66affSColin Finck void 304c2c66affSColin Finck WINAPI 305c2c66affSColin Finck CoFreeUnusedLibrariesEx( 306c2c66affSColin Finck _In_ DWORD dwUnloadDelay, 307c2c66affSColin Finck _In_ DWORD dwReserved); 308c2c66affSColin Finck 309c2c66affSColin Finck _Check_return_ 310c2c66affSColin Finck HRESULT 311c2c66affSColin Finck WINAPI 312c2c66affSColin Finck CoCreateInstance( 313c2c66affSColin Finck _In_ REFCLSID rclsid, 314c2c66affSColin Finck _In_opt_ LPUNKNOWN pUnkOuter, 315c2c66affSColin Finck _In_ DWORD dwClsContext, 316c2c66affSColin Finck _In_ REFIID iid, 317c2c66affSColin Finck _Outptr_ _At_(*ppv, _Post_readable_size_(_Inexpressible_(varies))) LPVOID *ppv); 318c2c66affSColin Finck 319c2c66affSColin Finck _Check_return_ 320c2c66affSColin Finck HRESULT 321c2c66affSColin Finck WINAPI 322c2c66affSColin Finck CoCreateInstanceEx( 323c2c66affSColin Finck _In_ REFCLSID rclsid, 324c2c66affSColin Finck _In_opt_ LPUNKNOWN pUnkOuter, 325c2c66affSColin Finck _In_ DWORD dwClsContext, 326c2c66affSColin Finck _In_opt_ COSERVERINFO *pServerInfo, 327c2c66affSColin Finck _In_ ULONG cmq, 328c2c66affSColin Finck _Inout_updates_(cmq) MULTI_QI *pResults); 329c2c66affSColin Finck 330c2c66affSColin Finck _Check_return_ 331c2c66affSColin Finck HRESULT 332c2c66affSColin Finck WINAPI 333c2c66affSColin Finck CoGetInstanceFromFile( 334c2c66affSColin Finck _In_opt_ COSERVERINFO *pServerInfo, 335c2c66affSColin Finck _In_opt_ CLSID *pClsid, 336c2c66affSColin Finck _In_opt_ IUnknown *punkOuter, 337c2c66affSColin Finck _In_ DWORD dwClsCtx, 338c2c66affSColin Finck _In_ DWORD grfMode, 339c2c66affSColin Finck _In_ _Null_terminated_ OLECHAR *pwszName, 340c2c66affSColin Finck _In_ DWORD dwCount, 341c2c66affSColin Finck _Inout_updates_(dwCount) MULTI_QI *pResults); 342c2c66affSColin Finck 343c2c66affSColin Finck _Check_return_ 344c2c66affSColin Finck HRESULT 345c2c66affSColin Finck WINAPI 346c2c66affSColin Finck CoGetInstanceFromIStorage( 347c2c66affSColin Finck _In_opt_ COSERVERINFO *pServerInfo, 348c2c66affSColin Finck _In_opt_ CLSID *pClsid, 349c2c66affSColin Finck _In_opt_ IUnknown *punkOuter, 350c2c66affSColin Finck _In_ DWORD dwClsCtx, 351c2c66affSColin Finck _In_ IStorage *pstg, 352c2c66affSColin Finck _In_ DWORD dwCount, 353c2c66affSColin Finck _Inout_updates_(dwCount) MULTI_QI *pResults); 354c2c66affSColin Finck 355c2c66affSColin Finck _Check_return_ 356c2c66affSColin Finck HRESULT 357c2c66affSColin Finck WINAPI 358c2c66affSColin Finck CoGetMalloc( 359c2c66affSColin Finck _In_ DWORD dwMemContext, 360c2c66affSColin Finck _Outptr_ LPMALLOC *lpMalloc); 361c2c66affSColin Finck 362c2c66affSColin Finck _Ret_opt_ 363c2c66affSColin Finck _Post_writable_byte_size_(size) 364c2c66affSColin Finck __drv_allocatesMem(Mem) 365c2c66affSColin Finck _Check_return_ 366c2c66affSColin Finck LPVOID 367c2c66affSColin Finck WINAPI 368c2c66affSColin Finck CoTaskMemAlloc(_In_ SIZE_T size) __WINE_ALLOC_SIZE(1); 369c2c66affSColin Finck 370c2c66affSColin Finck void 371c2c66affSColin Finck WINAPI 372c2c66affSColin Finck CoTaskMemFree( 373c2c66affSColin Finck _In_opt_ __drv_freesMem(Mem) _Post_invalid_ LPVOID ptr); 374c2c66affSColin Finck 375c2c66affSColin Finck _Ret_opt_ 376c2c66affSColin Finck _Post_writable_byte_size_(size) 377c2c66affSColin Finck _When_(size > 0, __drv_allocatesMem(Mem) _Check_return_) 378c2c66affSColin Finck LPVOID 379c2c66affSColin Finck WINAPI 380c2c66affSColin Finck CoTaskMemRealloc( 381c2c66affSColin Finck _In_opt_ __drv_freesMem(Mem) _Post_invalid_ LPVOID ptr, 382c2c66affSColin Finck _In_ SIZE_T size); 383c2c66affSColin Finck 384c2c66affSColin Finck HRESULT WINAPI CoRegisterMallocSpy(_In_ LPMALLOCSPY pMallocSpy); 385c2c66affSColin Finck HRESULT WINAPI CoRevokeMallocSpy(void); 386c2c66affSColin Finck 387c2c66affSColin Finck _Check_return_ HRESULT WINAPI CoGetContextToken(_Out_ ULONG_PTR *token); 388c2c66affSColin Finck 389c2c66affSColin Finck /* class registration flags; passed to CoRegisterClassObject */ 390c2c66affSColin Finck typedef enum tagREGCLS 391c2c66affSColin Finck { 392c2c66affSColin Finck REGCLS_SINGLEUSE = 0, 393c2c66affSColin Finck REGCLS_MULTIPLEUSE = 1, 394c2c66affSColin Finck REGCLS_MULTI_SEPARATE = 2, 395c2c66affSColin Finck REGCLS_SUSPENDED = 4, 396c2c66affSColin Finck REGCLS_SURROGATE = 8 397c2c66affSColin Finck } REGCLS; 398c2c66affSColin Finck 399c2c66affSColin Finck _Check_return_ 400c2c66affSColin Finck HRESULT 401c2c66affSColin Finck WINAPI 402c2c66affSColin Finck CoGetClassObject( 403c2c66affSColin Finck _In_ REFCLSID rclsid, 404c2c66affSColin Finck _In_ DWORD dwClsContext, 405c2c66affSColin Finck _In_opt_ COSERVERINFO *pServerInfo, 406c2c66affSColin Finck _In_ REFIID iid, 407c2c66affSColin Finck _Outptr_ LPVOID *ppv); 408c2c66affSColin Finck 409c2c66affSColin Finck _Check_return_ 410c2c66affSColin Finck HRESULT 411c2c66affSColin Finck WINAPI 412c2c66affSColin Finck CoRegisterClassObject( 413c2c66affSColin Finck _In_ REFCLSID rclsid, 414c2c66affSColin Finck _In_ LPUNKNOWN pUnk, 415c2c66affSColin Finck _In_ DWORD dwClsContext, 416c2c66affSColin Finck _In_ DWORD flags, 417c2c66affSColin Finck _Out_ LPDWORD lpdwRegister); 418c2c66affSColin Finck 419c2c66affSColin Finck _Check_return_ 420c2c66affSColin Finck HRESULT 421c2c66affSColin Finck WINAPI 422c2c66affSColin Finck CoRevokeClassObject( 423c2c66affSColin Finck _In_ DWORD dwRegister); 424c2c66affSColin Finck 425c2c66affSColin Finck _Check_return_ 426c2c66affSColin Finck HRESULT 427c2c66affSColin Finck WINAPI 428c2c66affSColin Finck CoGetPSClsid( 429c2c66affSColin Finck _In_ REFIID riid, 430c2c66affSColin Finck _Out_ CLSID *pclsid); 431c2c66affSColin Finck 432c2c66affSColin Finck _Check_return_ 433c2c66affSColin Finck HRESULT 434c2c66affSColin Finck WINAPI 435c2c66affSColin Finck CoRegisterPSClsid( 436c2c66affSColin Finck _In_ REFIID riid, 437c2c66affSColin Finck _In_ REFCLSID rclsid); 438c2c66affSColin Finck 439c2c66affSColin Finck _Check_return_ HRESULT WINAPI CoRegisterSurrogate(_In_ LPSURROGATE pSurrogate); 440c2c66affSColin Finck _Check_return_ HRESULT WINAPI CoSuspendClassObjects(void); 441c2c66affSColin Finck _Check_return_ HRESULT WINAPI CoResumeClassObjects(void); 442c2c66affSColin Finck ULONG WINAPI CoAddRefServerProcess(void); 443c2c66affSColin Finck ULONG WINAPI CoReleaseServerProcess(void); 444c2c66affSColin Finck 445c2c66affSColin Finck /* marshalling */ 446c2c66affSColin Finck 447c2c66affSColin Finck _Check_return_ 448c2c66affSColin Finck HRESULT 449c2c66affSColin Finck WINAPI 450c2c66affSColin Finck CoCreateFreeThreadedMarshaler( 451c2c66affSColin Finck _In_opt_ LPUNKNOWN punkOuter, 452c2c66affSColin Finck _Outptr_ LPUNKNOWN *ppunkMarshal); 453c2c66affSColin Finck 454c2c66affSColin Finck _Check_return_ 455c2c66affSColin Finck HRESULT 456c2c66affSColin Finck WINAPI 457c2c66affSColin Finck CoGetInterfaceAndReleaseStream( 458c2c66affSColin Finck _In_ LPSTREAM pStm, 459c2c66affSColin Finck _In_ REFIID iid, 460c2c66affSColin Finck _Outptr_ LPVOID *ppv); 461c2c66affSColin Finck 462c2c66affSColin Finck _Check_return_ 463c2c66affSColin Finck HRESULT 464c2c66affSColin Finck WINAPI 465c2c66affSColin Finck CoGetMarshalSizeMax( 466c2c66affSColin Finck _Out_ ULONG *pulSize, 467c2c66affSColin Finck _In_ REFIID riid, 468c2c66affSColin Finck _In_ LPUNKNOWN pUnk, 469c2c66affSColin Finck _In_ DWORD dwDestContext, 470c2c66affSColin Finck _In_opt_ LPVOID pvDestContext, 471c2c66affSColin Finck _In_ DWORD mshlflags); 472c2c66affSColin Finck 473c2c66affSColin Finck _Check_return_ 474c2c66affSColin Finck HRESULT 475c2c66affSColin Finck WINAPI 476c2c66affSColin Finck CoGetStandardMarshal( 477c2c66affSColin Finck _In_ REFIID riid, 478c2c66affSColin Finck _In_ LPUNKNOWN pUnk, 479c2c66affSColin Finck _In_ DWORD dwDestContext, 480c2c66affSColin Finck _In_opt_ LPVOID pvDestContext, 481c2c66affSColin Finck _In_ DWORD mshlflags, 482c2c66affSColin Finck _Outptr_ LPMARSHAL *ppMarshal); 483c2c66affSColin Finck 484c2c66affSColin Finck HRESULT WINAPI CoMarshalHresult(_In_ LPSTREAM pstm, _In_ HRESULT hresult); 485c2c66affSColin Finck 486c2c66affSColin Finck _Check_return_ 487c2c66affSColin Finck HRESULT 488c2c66affSColin Finck WINAPI 489c2c66affSColin Finck CoMarshalInterface( 490c2c66affSColin Finck _In_ LPSTREAM pStm, 491c2c66affSColin Finck _In_ REFIID riid, 492c2c66affSColin Finck _In_ LPUNKNOWN pUnk, 493c2c66affSColin Finck _In_ DWORD dwDestContext, 494c2c66affSColin Finck _In_opt_ LPVOID pvDestContext, 495c2c66affSColin Finck _In_ DWORD mshlflags); 496c2c66affSColin Finck 497c2c66affSColin Finck _Check_return_ 498c2c66affSColin Finck HRESULT 499c2c66affSColin Finck WINAPI 500c2c66affSColin Finck CoMarshalInterThreadInterfaceInStream( 501c2c66affSColin Finck _In_ REFIID riid, 502c2c66affSColin Finck _In_ LPUNKNOWN pUnk, 503c2c66affSColin Finck _Outptr_ LPSTREAM *ppStm); 504c2c66affSColin Finck 505c2c66affSColin Finck _Check_return_ HRESULT WINAPI CoReleaseMarshalData(_In_ LPSTREAM pStm); 506c2c66affSColin Finck 507c2c66affSColin Finck _Check_return_ 508c2c66affSColin Finck HRESULT 509c2c66affSColin Finck WINAPI 510c2c66affSColin Finck CoDisconnectObject( 511c2c66affSColin Finck _In_ LPUNKNOWN lpUnk, 512c2c66affSColin Finck _In_ DWORD reserved); 513c2c66affSColin Finck 514c2c66affSColin Finck HRESULT WINAPI CoUnmarshalHresult(_In_ LPSTREAM pstm, _Out_ HRESULT *phresult); 515c2c66affSColin Finck 516c2c66affSColin Finck _Check_return_ 517c2c66affSColin Finck HRESULT 518c2c66affSColin Finck WINAPI 519c2c66affSColin Finck CoUnmarshalInterface( 520c2c66affSColin Finck _In_ LPSTREAM pStm, 521c2c66affSColin Finck _In_ REFIID riid, 522c2c66affSColin Finck _Outptr_ LPVOID *ppv); 523c2c66affSColin Finck 524c2c66affSColin Finck _Check_return_ 525c2c66affSColin Finck HRESULT 526c2c66affSColin Finck WINAPI 527c2c66affSColin Finck CoLockObjectExternal( 528c2c66affSColin Finck _In_ LPUNKNOWN pUnk, 529c2c66affSColin Finck _In_ BOOL fLock, 530c2c66affSColin Finck _In_ BOOL fLastUnlockReleases); 531c2c66affSColin Finck 532c2c66affSColin Finck BOOL WINAPI CoIsHandlerConnected(_In_ LPUNKNOWN pUnk); 533c2c66affSColin Finck 534c2c66affSColin Finck /* security */ 535c2c66affSColin Finck 536c2c66affSColin Finck _Check_return_ 537c2c66affSColin Finck HRESULT 538c2c66affSColin Finck WINAPI 539c2c66affSColin Finck CoInitializeSecurity( 540c2c66affSColin Finck _In_opt_ PSECURITY_DESCRIPTOR pSecDesc, 541c2c66affSColin Finck _In_ LONG cAuthSvc, 542c2c66affSColin Finck _In_reads_opt_(cAuthSvc) SOLE_AUTHENTICATION_SERVICE *asAuthSvc, 543c2c66affSColin Finck _In_opt_ void *pReserved1, 544c2c66affSColin Finck _In_ DWORD dwAuthnLevel, 545c2c66affSColin Finck _In_ DWORD dwImpLevel, 546c2c66affSColin Finck _In_opt_ void *pReserved2, 547c2c66affSColin Finck _In_ DWORD dwCapabilities, 548c2c66affSColin Finck _In_opt_ void *pReserved3); 549c2c66affSColin Finck 550c2c66affSColin Finck _Check_return_ 551c2c66affSColin Finck HRESULT 552c2c66affSColin Finck WINAPI 553c2c66affSColin Finck CoGetCallContext( 554c2c66affSColin Finck _In_ REFIID riid, 555c2c66affSColin Finck _Outptr_ void **ppInterface); 556c2c66affSColin Finck 557c2c66affSColin Finck _Check_return_ 558c2c66affSColin Finck HRESULT 559c2c66affSColin Finck WINAPI 560c2c66affSColin Finck CoSwitchCallContext( 561c2c66affSColin Finck _In_opt_ IUnknown *pContext, 562c2c66affSColin Finck _Outptr_ IUnknown **ppOldContext); 563c2c66affSColin Finck 564c2c66affSColin Finck _Check_return_ 565c2c66affSColin Finck HRESULT 566c2c66affSColin Finck WINAPI 567c2c66affSColin Finck CoQueryAuthenticationServices( 568c2c66affSColin Finck _Out_ DWORD *pcAuthSvc, 569c2c66affSColin Finck _Outptr_result_buffer_(*pcAuthSvc) SOLE_AUTHENTICATION_SERVICE **asAuthSvc); 570c2c66affSColin Finck 571c2c66affSColin Finck _Check_return_ 572c2c66affSColin Finck HRESULT 573c2c66affSColin Finck WINAPI 574c2c66affSColin Finck CoQueryProxyBlanket( 575c2c66affSColin Finck _In_ IUnknown *pProxy, 576c2c66affSColin Finck _Out_opt_ DWORD *pwAuthnSvc, 577c2c66affSColin Finck _Out_opt_ DWORD *pAuthzSvc, 578c2c66affSColin Finck _Outptr_opt_ OLECHAR **pServerPrincName, 579c2c66affSColin Finck _Out_opt_ DWORD *pAuthnLevel, 580c2c66affSColin Finck _Out_opt_ DWORD *pImpLevel, 581c2c66affSColin Finck _Out_opt_ RPC_AUTH_IDENTITY_HANDLE *pAuthInfo, 582c2c66affSColin Finck _Out_opt_ DWORD *pCapabilities); 583c2c66affSColin Finck 584c2c66affSColin Finck _Check_return_ 585c2c66affSColin Finck HRESULT 586c2c66affSColin Finck WINAPI 587c2c66affSColin Finck CoSetProxyBlanket( 588c2c66affSColin Finck _In_ IUnknown *pProxy, 589c2c66affSColin Finck _In_ DWORD dwAuthnSvc, 590c2c66affSColin Finck _In_ DWORD dwAuthzSvc, 591c2c66affSColin Finck _In_opt_ OLECHAR *pServerPrincName, 592c2c66affSColin Finck _In_ DWORD dwAuthnLevel, 593c2c66affSColin Finck _In_ DWORD dwImpLevel, 594c2c66affSColin Finck _In_opt_ RPC_AUTH_IDENTITY_HANDLE pAuthInfo, 595c2c66affSColin Finck _In_ DWORD dwCapabilities); 596c2c66affSColin Finck 597c2c66affSColin Finck _Check_return_ 598c2c66affSColin Finck HRESULT 599c2c66affSColin Finck WINAPI CoCopyProxy( 600c2c66affSColin Finck _In_ IUnknown *pProxy, 601c2c66affSColin Finck _Outptr_ IUnknown **ppCopy); 602c2c66affSColin Finck 603c2c66affSColin Finck _Check_return_ HRESULT WINAPI CoImpersonateClient(void); 604c2c66affSColin Finck 605c2c66affSColin Finck _Check_return_ 606c2c66affSColin Finck HRESULT 607c2c66affSColin Finck WINAPI 608c2c66affSColin Finck CoQueryClientBlanket( 609c2c66affSColin Finck _Out_opt_ DWORD *pAuthnSvc, 610c2c66affSColin Finck _Out_opt_ DWORD *pAuthzSvc, 611c2c66affSColin Finck _Outptr_opt_ OLECHAR **pServerPrincName, 612c2c66affSColin Finck _Out_opt_ DWORD *pAuthnLevel, 613c2c66affSColin Finck _Out_opt_ DWORD *pImpLevel, 614c2c66affSColin Finck _Outptr_opt_ RPC_AUTHZ_HANDLE *pPrivs, 615c2c66affSColin Finck _Inout_opt_ DWORD *pCapabilities); 616c2c66affSColin Finck 617c2c66affSColin Finck _Check_return_ HRESULT WINAPI CoRevertToSelf(void); 618c2c66affSColin Finck 619c2c66affSColin Finck /* misc */ 620c2c66affSColin Finck 621c2c66affSColin Finck _Check_return_ 622c2c66affSColin Finck HRESULT 623c2c66affSColin Finck WINAPI 624c2c66affSColin Finck CoGetTreatAsClass( 625c2c66affSColin Finck _In_ REFCLSID clsidOld, 626c2c66affSColin Finck _Out_ LPCLSID pClsidNew); 627c2c66affSColin Finck 628c2c66affSColin Finck _Check_return_ 629c2c66affSColin Finck HRESULT 630c2c66affSColin Finck WINAPI 631c2c66affSColin Finck CoTreatAsClass( 632c2c66affSColin Finck _In_ REFCLSID clsidOld, 633c2c66affSColin Finck _In_ REFCLSID clsidNew); 634c2c66affSColin Finck 635c2c66affSColin Finck HRESULT 636c2c66affSColin Finck WINAPI 637c2c66affSColin Finck CoAllowSetForegroundWindow( 638c2c66affSColin Finck _In_ IUnknown *pUnk, 639c2c66affSColin Finck _In_opt_ LPVOID lpvReserved); 640c2c66affSColin Finck 641c2c66affSColin Finck _Check_return_ 642c2c66affSColin Finck HRESULT 643c2c66affSColin Finck WINAPI 644c2c66affSColin Finck CoGetObjectContext( 645c2c66affSColin Finck _In_ REFIID riid, 646c2c66affSColin Finck _Outptr_ LPVOID *ppv); 647c2c66affSColin Finck 648c2c66affSColin Finck _Check_return_ 649c2c66affSColin Finck HRESULT 650c2c66affSColin Finck WINAPI 651c2c66affSColin Finck CoRegisterInitializeSpy( 652c2c66affSColin Finck _In_ IInitializeSpy *spy, 653c2c66affSColin Finck _Out_ ULARGE_INTEGER *cookie); 654c2c66affSColin Finck 655c2c66affSColin Finck _Check_return_ 656c2c66affSColin Finck HRESULT 657c2c66affSColin Finck WINAPI 658c2c66affSColin Finck CoRevokeInitializeSpy( 659c2c66affSColin Finck _In_ ULARGE_INTEGER cookie); 660c2c66affSColin Finck 661c2c66affSColin Finck _Check_return_ HRESULT WINAPI CoCreateGuid(_Out_ GUID *pguid); 662c2c66affSColin Finck BOOL WINAPI CoIsOle1Class(_In_ REFCLSID rclsid); 663c2c66affSColin Finck 664c2c66affSColin Finck BOOL 665c2c66affSColin Finck WINAPI 666c2c66affSColin Finck CoDosDateTimeToFileTime( 667c2c66affSColin Finck _In_ WORD nDosDate, 668c2c66affSColin Finck _In_ WORD nDosTime, 669c2c66affSColin Finck _Out_ FILETIME *lpFileTime); 670c2c66affSColin Finck 671c2c66affSColin Finck BOOL 672c2c66affSColin Finck WINAPI 673c2c66affSColin Finck CoFileTimeToDosDateTime( 674c2c66affSColin Finck _In_ FILETIME *lpFileTime, 675c2c66affSColin Finck _Out_ WORD *lpDosDate, 676c2c66affSColin Finck _Out_ WORD *lpDosTime); 677c2c66affSColin Finck 678c2c66affSColin Finck HRESULT WINAPI CoFileTimeNow(_Out_ FILETIME *lpFileTime); 679c2c66affSColin Finck 680c2c66affSColin Finck _Check_return_ 681c2c66affSColin Finck HRESULT 682c2c66affSColin Finck WINAPI 683c2c66affSColin Finck CoRegisterMessageFilter( 684c2c66affSColin Finck _In_opt_ LPMESSAGEFILTER lpMessageFilter, 685c2c66affSColin Finck _Outptr_opt_result_maybenull_ LPMESSAGEFILTER *lplpMessageFilter); 686c2c66affSColin Finck 687c2c66affSColin Finck HRESULT 688c2c66affSColin Finck WINAPI 689c2c66affSColin Finck CoRegisterChannelHook( 690c2c66affSColin Finck _In_ REFGUID ExtensionGuid, 691c2c66affSColin Finck _In_ IChannelHook *pChannelHook); 692c2c66affSColin Finck 693c2c66affSColin Finck typedef enum tagCOWAIT_FLAGS 694c2c66affSColin Finck { 695*87608521SMark Jansen COWAIT_DEFAULT = 0x00000000, 696c2c66affSColin Finck COWAIT_WAITALL = 0x00000001, 697c2c66affSColin Finck COWAIT_ALERTABLE = 0x00000002, 698c2c66affSColin Finck COWAIT_INPUTAVAILABLE = 0x00000004 699c2c66affSColin Finck } COWAIT_FLAGS; 700c2c66affSColin Finck 701c2c66affSColin Finck _Check_return_ 702c2c66affSColin Finck HRESULT 703c2c66affSColin Finck WINAPI 704c2c66affSColin Finck CoWaitForMultipleHandles( 705c2c66affSColin Finck _In_ DWORD dwFlags, 706c2c66affSColin Finck _In_ DWORD dwTimeout, 707c2c66affSColin Finck _In_ ULONG cHandles, 708c2c66affSColin Finck _In_reads_(cHandles) LPHANDLE pHandles, 709c2c66affSColin Finck _Out_ LPDWORD lpdwindex); 710c2c66affSColin Finck 711c2c66affSColin Finck /***************************************************************************** 712c2c66affSColin Finck * GUID API 713c2c66affSColin Finck */ 714c2c66affSColin Finck 715c2c66affSColin Finck _Check_return_ 716c2c66affSColin Finck HRESULT 717c2c66affSColin Finck WINAPI 718c2c66affSColin Finck StringFromCLSID( 719c2c66affSColin Finck _In_ REFCLSID id, 720c2c66affSColin Finck _Outptr_ LPOLESTR*); 721c2c66affSColin Finck 722c2c66affSColin Finck _Check_return_ 723c2c66affSColin Finck HRESULT 724c2c66affSColin Finck WINAPI 725c2c66affSColin Finck CLSIDFromString( 726c2c66affSColin Finck _In_ LPCOLESTR, 727c2c66affSColin Finck _Out_ LPCLSID); 728c2c66affSColin Finck 729c2c66affSColin Finck _Check_return_ 730c2c66affSColin Finck HRESULT 731c2c66affSColin Finck WINAPI 732c2c66affSColin Finck CLSIDFromProgID( 733c2c66affSColin Finck _In_ LPCOLESTR progid, 734c2c66affSColin Finck _Out_ LPCLSID riid); 735c2c66affSColin Finck 736c2c66affSColin Finck _Check_return_ 737c2c66affSColin Finck HRESULT 738c2c66affSColin Finck WINAPI 739c2c66affSColin Finck ProgIDFromCLSID( 740c2c66affSColin Finck _In_ REFCLSID clsid, 741c2c66affSColin Finck _Outptr_ LPOLESTR *lplpszProgID); 742c2c66affSColin Finck 743c2c66affSColin Finck _Check_return_ 744c2c66affSColin Finck INT 745c2c66affSColin Finck WINAPI 746c2c66affSColin Finck StringFromGUID2( 747c2c66affSColin Finck _In_ REFGUID id, 748c2c66affSColin Finck _Out_writes_to_(cmax, return) LPOLESTR str, 749c2c66affSColin Finck _In_ INT cmax); 750c2c66affSColin Finck 751c2c66affSColin Finck _Check_return_ 752c2c66affSColin Finck HRESULT 753c2c66affSColin Finck WINAPI 754c2c66affSColin Finck IIDFromString( 755c2c66affSColin Finck _In_ LPCOLESTR lpsz, 756c2c66affSColin Finck _Out_ LPIID lpiid); 757c2c66affSColin Finck 758c2c66affSColin Finck /***************************************************************************** 759c2c66affSColin Finck * COM Server dll - exports 760c2c66affSColin Finck */ 761c2c66affSColin Finck 762c2c66affSColin Finck _Check_return_ 763c2c66affSColin Finck HRESULT 764c2c66affSColin Finck WINAPI 765c2c66affSColin Finck DllGetClassObject( 766c2c66affSColin Finck _In_ REFCLSID rclsid, 767c2c66affSColin Finck _In_ REFIID riid, 768c2c66affSColin Finck _Outptr_ LPVOID *ppv) DECLSPEC_HIDDEN; 769c2c66affSColin Finck 770c2c66affSColin Finck HRESULT WINAPI DllCanUnloadNow(void) DECLSPEC_HIDDEN; 771c2c66affSColin Finck 772c2c66affSColin Finck /* shouldn't be here, but is nice for type checking */ 773c2c66affSColin Finck #ifdef __WINESRC__ 774c2c66affSColin Finck HRESULT WINAPI DllRegisterServer(void) DECLSPEC_HIDDEN; 775c2c66affSColin Finck HRESULT WINAPI DllUnregisterServer(void) DECLSPEC_HIDDEN; 776c2c66affSColin Finck #endif 777c2c66affSColin Finck 778c2c66affSColin Finck 779c2c66affSColin Finck /***************************************************************************** 780c2c66affSColin Finck * Data Object 781c2c66affSColin Finck */ 782c2c66affSColin Finck 783c2c66affSColin Finck HRESULT 784c2c66affSColin Finck WINAPI 785c2c66affSColin Finck CreateDataAdviseHolder( 786c2c66affSColin Finck _Outptr_ LPDATAADVISEHOLDER *ppDAHolder); 787c2c66affSColin Finck 788c2c66affSColin Finck HRESULT 789c2c66affSColin Finck WINAPI 790c2c66affSColin Finck CreateDataCache( 791c2c66affSColin Finck _In_opt_ LPUNKNOWN pUnkOuter, 792c2c66affSColin Finck _In_ REFCLSID rclsid, 793c2c66affSColin Finck _In_ REFIID iid, 794c2c66affSColin Finck _Out_ LPVOID *ppv); 795c2c66affSColin Finck 796c2c66affSColin Finck /***************************************************************************** 797c2c66affSColin Finck * Moniker API 798c2c66affSColin Finck */ 799c2c66affSColin Finck 800c2c66affSColin Finck _Check_return_ 801c2c66affSColin Finck HRESULT 802c2c66affSColin Finck WINAPI 803c2c66affSColin Finck BindMoniker( 804c2c66affSColin Finck _In_ LPMONIKER pmk, 805c2c66affSColin Finck _In_ DWORD grfOpt, 806c2c66affSColin Finck _In_ REFIID iidResult, 807c2c66affSColin Finck _Outptr_ LPVOID *ppvResult); 808c2c66affSColin Finck 809c2c66affSColin Finck _Check_return_ 810c2c66affSColin Finck HRESULT 811c2c66affSColin Finck WINAPI 812c2c66affSColin Finck CoGetObject( 813c2c66affSColin Finck _In_ LPCWSTR pszName, 814c2c66affSColin Finck _In_opt_ BIND_OPTS *pBindOptions, 815c2c66affSColin Finck _In_ REFIID riid, 816c2c66affSColin Finck _Outptr_ void **ppv); 817c2c66affSColin Finck 818c2c66affSColin Finck _Check_return_ HRESULT WINAPI CreateAntiMoniker(_Outptr_ LPMONIKER *ppmk); 819c2c66affSColin Finck 820c2c66affSColin Finck _Check_return_ 821c2c66affSColin Finck HRESULT 822c2c66affSColin Finck WINAPI 823c2c66affSColin Finck CreateBindCtx( 824c2c66affSColin Finck _In_ DWORD reserved, 825c2c66affSColin Finck _Outptr_ LPBC *ppbc); 826c2c66affSColin Finck 827c2c66affSColin Finck _Check_return_ 828c2c66affSColin Finck HRESULT 829c2c66affSColin Finck WINAPI 830c2c66affSColin Finck CreateClassMoniker( 831c2c66affSColin Finck _In_ REFCLSID rclsid, 832c2c66affSColin Finck _Outptr_ LPMONIKER *ppmk); 833c2c66affSColin Finck 834c2c66affSColin Finck _Check_return_ 835c2c66affSColin Finck HRESULT 836c2c66affSColin Finck WINAPI 837c2c66affSColin Finck CreateFileMoniker( 838c2c66affSColin Finck _In_ LPCOLESTR lpszPathName, 839c2c66affSColin Finck _Outptr_ LPMONIKER *ppmk); 840c2c66affSColin Finck 841c2c66affSColin Finck _Check_return_ 842c2c66affSColin Finck HRESULT 843c2c66affSColin Finck WINAPI 844c2c66affSColin Finck CreateGenericComposite( 845c2c66affSColin Finck _In_opt_ LPMONIKER pmkFirst, 846c2c66affSColin Finck _In_opt_ LPMONIKER pmkRest, 847c2c66affSColin Finck _Outptr_ LPMONIKER *ppmkComposite); 848c2c66affSColin Finck 849c2c66affSColin Finck _Check_return_ 850c2c66affSColin Finck HRESULT 851c2c66affSColin Finck WINAPI 852c2c66affSColin Finck CreateItemMoniker( 853c2c66affSColin Finck _In_ LPCOLESTR lpszDelim, 854c2c66affSColin Finck _In_ LPCOLESTR lpszItem, 855c2c66affSColin Finck _Outptr_ LPMONIKER *ppmk); 856c2c66affSColin Finck 857c2c66affSColin Finck _Check_return_ 858c2c66affSColin Finck HRESULT 859c2c66affSColin Finck WINAPI 860c2c66affSColin Finck CreateObjrefMoniker( 861c2c66affSColin Finck _In_opt_ LPUNKNOWN punk, 862c2c66affSColin Finck _Outptr_ LPMONIKER *ppmk); 863c2c66affSColin Finck 864c2c66affSColin Finck _Check_return_ 865c2c66affSColin Finck HRESULT 866c2c66affSColin Finck WINAPI 867c2c66affSColin Finck CreatePointerMoniker( 868c2c66affSColin Finck _In_opt_ LPUNKNOWN punk, 869c2c66affSColin Finck _Outptr_ LPMONIKER *ppmk); 870c2c66affSColin Finck 871c2c66affSColin Finck _Check_return_ 872c2c66affSColin Finck HRESULT 873c2c66affSColin Finck WINAPI 874c2c66affSColin Finck GetClassFile( 875c2c66affSColin Finck _In_ LPCOLESTR filePathName, 876c2c66affSColin Finck _Out_ CLSID *pclsid); 877c2c66affSColin Finck 878c2c66affSColin Finck _Check_return_ 879c2c66affSColin Finck HRESULT 880c2c66affSColin Finck WINAPI 881c2c66affSColin Finck GetRunningObjectTable( 882c2c66affSColin Finck _In_ DWORD reserved, 883c2c66affSColin Finck _Outptr_ LPRUNNINGOBJECTTABLE *pprot); 884c2c66affSColin Finck 885c2c66affSColin Finck _Check_return_ 886c2c66affSColin Finck HRESULT 887c2c66affSColin Finck WINAPI 888c2c66affSColin Finck MkParseDisplayName( 889c2c66affSColin Finck _In_ LPBC pbc, 890c2c66affSColin Finck _In_ LPCOLESTR szUserName, 891c2c66affSColin Finck _Out_ ULONG *pchEaten, 892c2c66affSColin Finck _Outptr_ LPMONIKER *ppmk); 893c2c66affSColin Finck 894c2c66affSColin Finck _Check_return_ 895c2c66affSColin Finck HRESULT 896c2c66affSColin Finck WINAPI 897c2c66affSColin Finck MonikerCommonPrefixWith( 898c2c66affSColin Finck _In_ IMoniker *pmkThis, 899c2c66affSColin Finck _In_ IMoniker *pmkOther, 900c2c66affSColin Finck _Outptr_ IMoniker **ppmkCommon); 901c2c66affSColin Finck 902c2c66affSColin Finck _Check_return_ 903c2c66affSColin Finck HRESULT 904c2c66affSColin Finck WINAPI 905c2c66affSColin Finck MonikerRelativePathTo( 906c2c66affSColin Finck _In_ LPMONIKER pmkSrc, 907c2c66affSColin Finck _In_ LPMONIKER pmkDest, 908c2c66affSColin Finck _Outptr_ LPMONIKER *ppmkRelPath, 909c2c66affSColin Finck _In_ BOOL dwReserved); 910c2c66affSColin Finck 911c2c66affSColin Finck /***************************************************************************** 912c2c66affSColin Finck * Storage API 913c2c66affSColin Finck */ 914c2c66affSColin Finck #define STGM_DIRECT 0x00000000 915c2c66affSColin Finck #define STGM_TRANSACTED 0x00010000 916c2c66affSColin Finck #define STGM_SIMPLE 0x08000000 917c2c66affSColin Finck #define STGM_READ 0x00000000 918c2c66affSColin Finck #define STGM_WRITE 0x00000001 919c2c66affSColin Finck #define STGM_READWRITE 0x00000002 920c2c66affSColin Finck #define STGM_SHARE_DENY_NONE 0x00000040 921c2c66affSColin Finck #define STGM_SHARE_DENY_READ 0x00000030 922c2c66affSColin Finck #define STGM_SHARE_DENY_WRITE 0x00000020 923c2c66affSColin Finck #define STGM_SHARE_EXCLUSIVE 0x00000010 924c2c66affSColin Finck #define STGM_PRIORITY 0x00040000 925c2c66affSColin Finck #define STGM_DELETEONRELEASE 0x04000000 926c2c66affSColin Finck #define STGM_CREATE 0x00001000 927c2c66affSColin Finck #define STGM_CONVERT 0x00020000 928c2c66affSColin Finck #define STGM_FAILIFTHERE 0x00000000 929c2c66affSColin Finck #define STGM_NOSCRATCH 0x00100000 930c2c66affSColin Finck #define STGM_NOSNAPSHOT 0x00200000 931c2c66affSColin Finck #define STGM_DIRECT_SWMR 0x00400000 932c2c66affSColin Finck 933c2c66affSColin Finck #define STGFMT_STORAGE 0 934c2c66affSColin Finck #define STGFMT_FILE 3 935c2c66affSColin Finck #define STGFMT_ANY 4 936c2c66affSColin Finck #define STGFMT_DOCFILE 5 937c2c66affSColin Finck 938c2c66affSColin Finck typedef struct tagSTGOPTIONS 939c2c66affSColin Finck { 940c2c66affSColin Finck USHORT usVersion; 941c2c66affSColin Finck USHORT reserved; 942c2c66affSColin Finck ULONG ulSectorSize; 943c2c66affSColin Finck const WCHAR* pwcsTemplateFile; 944c2c66affSColin Finck } STGOPTIONS; 945c2c66affSColin Finck 946c2c66affSColin Finck _Check_return_ 947c2c66affSColin Finck HRESULT 948c2c66affSColin Finck WINAPI 949c2c66affSColin Finck StringFromIID( 950c2c66affSColin Finck _In_ REFIID rclsid, 951c2c66affSColin Finck _Outptr_ LPOLESTR *lplpsz); 952c2c66affSColin Finck 953c2c66affSColin Finck _Check_return_ 954c2c66affSColin Finck HRESULT 955c2c66affSColin Finck WINAPI 956c2c66affSColin Finck StgCreateDocfile( 957c2c66affSColin Finck _In_opt_ _Null_terminated_ LPCOLESTR pwcsName, 958c2c66affSColin Finck _In_ DWORD grfMode, 959c2c66affSColin Finck _Reserved_ DWORD reserved, 960c2c66affSColin Finck _Outptr_ IStorage **ppstgOpen); 961c2c66affSColin Finck 962c2c66affSColin Finck _Check_return_ 963c2c66affSColin Finck HRESULT 964c2c66affSColin Finck WINAPI 965c2c66affSColin Finck StgCreateStorageEx( 966c2c66affSColin Finck _In_opt_ _Null_terminated_ const WCHAR*, 967c2c66affSColin Finck _In_ DWORD, 968c2c66affSColin Finck _In_ DWORD, 969c2c66affSColin Finck _In_ DWORD, 970c2c66affSColin Finck _Inout_opt_ STGOPTIONS*, 971c2c66affSColin Finck _In_opt_ void*, 972c2c66affSColin Finck _In_ REFIID, 973c2c66affSColin Finck _Outptr_ void**); 974c2c66affSColin Finck 975c2c66affSColin Finck _Check_return_ 976c2c66affSColin Finck HRESULT 977c2c66affSColin Finck WINAPI 978c2c66affSColin Finck StgIsStorageFile( 979c2c66affSColin Finck _In_ _Null_terminated_ LPCOLESTR fn); 980c2c66affSColin Finck 981c2c66affSColin Finck _Check_return_ 982c2c66affSColin Finck HRESULT 983c2c66affSColin Finck WINAPI 984c2c66affSColin Finck StgIsStorageILockBytes( 985c2c66affSColin Finck _In_ ILockBytes *plkbyt); 986c2c66affSColin Finck 987c2c66affSColin Finck _Check_return_ 988c2c66affSColin Finck HRESULT 989c2c66affSColin Finck WINAPI 990c2c66affSColin Finck StgOpenStorage( 991c2c66affSColin Finck _In_opt_ _Null_terminated_ const OLECHAR *pwcsName, 992c2c66affSColin Finck _In_opt_ IStorage *pstgPriority, 993c2c66affSColin Finck _In_ DWORD grfMode, 994c2c66affSColin Finck _In_opt_z_ SNB snbExclude, 995c2c66affSColin Finck _In_ DWORD reserved, 996c2c66affSColin Finck _Outptr_ IStorage **ppstgOpen); 997c2c66affSColin Finck 998c2c66affSColin Finck _Check_return_ 999c2c66affSColin Finck HRESULT 1000c2c66affSColin Finck WINAPI 1001c2c66affSColin Finck StgOpenStorageEx( 1002c2c66affSColin Finck _In_ _Null_terminated_ const WCHAR *pwcwName, 1003c2c66affSColin Finck _In_ DWORD grfMode, 1004c2c66affSColin Finck _In_ DWORD stgfmt, 1005c2c66affSColin Finck _In_ DWORD grfAttrs, 1006c2c66affSColin Finck _Inout_opt_ STGOPTIONS *pStgOptions, 1007c2c66affSColin Finck _In_opt_ void *reserved, 1008c2c66affSColin Finck _In_ REFIID riid, 1009c2c66affSColin Finck _Outptr_ void **ppObjectOpen); 1010c2c66affSColin Finck 1011c2c66affSColin Finck _Check_return_ 1012c2c66affSColin Finck HRESULT 1013c2c66affSColin Finck WINAPI 1014c2c66affSColin Finck StgCreateDocfileOnILockBytes( 1015c2c66affSColin Finck _In_ ILockBytes *plkbyt, 1016c2c66affSColin Finck _In_ DWORD grfMode, 1017c2c66affSColin Finck _In_ DWORD reserved, 1018c2c66affSColin Finck _Outptr_ IStorage **ppstgOpen); 1019c2c66affSColin Finck 1020c2c66affSColin Finck _Check_return_ 1021c2c66affSColin Finck HRESULT 1022c2c66affSColin Finck WINAPI 1023c2c66affSColin Finck StgOpenStorageOnILockBytes( 1024c2c66affSColin Finck _In_ ILockBytes *plkbyt, 1025c2c66affSColin Finck _In_opt_ IStorage *pstgPriority, 1026c2c66affSColin Finck _In_ DWORD grfMode, 1027c2c66affSColin Finck _In_opt_z_ SNB snbExclude, 1028c2c66affSColin Finck _Reserved_ DWORD reserved, 1029c2c66affSColin Finck _Outptr_ IStorage **ppstgOpen); 1030c2c66affSColin Finck 1031c2c66affSColin Finck _Check_return_ 1032c2c66affSColin Finck HRESULT 1033c2c66affSColin Finck WINAPI 1034c2c66affSColin Finck StgSetTimes( 1035c2c66affSColin Finck _In_ _Null_terminated_ OLECHAR const *lpszName, 1036c2c66affSColin Finck _In_opt_ FILETIME const *pctime, 1037c2c66affSColin Finck _In_opt_ FILETIME const *patime, 1038c2c66affSColin Finck _In_opt_ FILETIME const *pmtime); 1039c2c66affSColin Finck 1040c2c66affSColin Finck #ifdef __cplusplus 1041c2c66affSColin Finck } 1042c2c66affSColin Finck #endif 1043c2c66affSColin Finck 1044c2c66affSColin Finck #ifndef __WINESRC__ 1045c2c66affSColin Finck # include <urlmon.h> 1046c2c66affSColin Finck #endif 1047c2c66affSColin Finck #include <propidl.h> 1048c2c66affSColin Finck 1049c2c66affSColin Finck #ifndef __WINESRC__ 1050c2c66affSColin Finck 1051c2c66affSColin Finck #define FARSTRUCT 1052c2c66affSColin Finck #define HUGEP 1053c2c66affSColin Finck 1054c2c66affSColin Finck #define WINOLEAPI STDAPI 1055c2c66affSColin Finck #define WINOLEAPI_(type) STDAPI_(type) 1056c2c66affSColin Finck 1057c2c66affSColin Finck #endif /* __WINESRC__ */ 1058c2c66affSColin Finck 1059c2c66affSColin Finck #endif /* _OBJBASE_H_ */ 1060