ObjBase.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:30k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //+---------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright (c) Microsoft Corporation. All rights reserved.
  5. //
  6. //  File:       objbase.h
  7. //
  8. //  Contents:   Component object model defintions.
  9. //
  10. //----------------------------------------------------------------------------
  11. #include <rpc.h>
  12. #include <rpcndr.h>
  13. #if !defined( _OBJBASE_H_ )
  14. #define _OBJBASE_H_
  15. #if _MSC_VER > 1000
  16. #pragma once
  17. #endif
  18. #include <pshpack8.h>
  19. #ifdef _MAC
  20. #ifndef _WLM_NOFORCE_LIBS
  21. #ifdef _WLMDLL
  22.         #ifdef _DEBUG
  23.                 #pragma comment(lib, "oledlgd.lib")
  24.                 #pragma comment(lib, "msvcoled.lib")
  25.         #else
  26.                 #pragma comment(lib, "oledlg.lib")
  27.                 #pragma comment(lib, "msvcole.lib")
  28.         #endif
  29. #else
  30.         #ifdef _DEBUG
  31.                 #pragma comment(lib, "wlmoled.lib")
  32.                 #pragma comment(lib, "ole2uid.lib")
  33.         #else
  34.                 #pragma comment(lib, "wlmole.lib")
  35.                 #pragma comment(lib, "ole2ui.lib")
  36.         #endif
  37.         #pragma data_seg(".drectve")
  38.         static char _gszWlmOLEUIResourceDirective[] = "/macres:ole2ui.rsc";
  39.         #pragma data_seg()
  40. #endif
  41. #pragma comment(lib, "uuid.lib")
  42. #ifdef _DEBUG
  43.     #pragma comment(lib, "ole2d.lib")
  44.     #pragma comment(lib, "ole2autd.lib")
  45. #else
  46.     #pragma comment(lib, "ole2.lib")
  47.     #pragma comment(lib, "ole2auto.lib")
  48. #endif
  49. #endif // !_WLM_NOFORCE_LIBS
  50. #endif // _MAC
  51. #ifdef _OLE32_
  52. #define WINOLEAPI        STDAPI
  53. #define WINOLEAPI_(type) STDAPI_(type)
  54. #else
  55. #ifdef _68K_
  56. #ifndef REQUIRESAPPLEPASCAL
  57. #define WINOLEAPI        EXTERN_C DECLSPEC_IMPORT HRESULT PASCAL
  58. #define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT type PASCAL
  59. #else
  60. #define WINOLEAPI        EXTERN_C DECLSPEC_IMPORT PASCAL HRESULT
  61. #define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT PASCAL type
  62. #endif
  63. #else
  64. #define WINOLEAPI        EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
  65. #define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
  66. #endif
  67. #endif
  68. /****** Interface Declaration ***********************************************/
  69. /*
  70.  *      These are macros for declaring interfaces.  They exist so that
  71.  *      a single definition of the interface is simulataneously a proper
  72.  *      declaration of the interface structures (C++ abstract classes)
  73.  *      for both C and C++.
  74.  *
  75.  *      DECLARE_INTERFACE(iface) is used to declare an interface that does
  76.  *      not derive from a base interface.
  77.  *      DECLARE_INTERFACE_(iface, baseiface) is used to declare an interface
  78.  *      that does derive from a base interface.
  79.  *
  80.  *      By default if the source file has a .c extension the C version of
  81.  *      the interface declaratations will be expanded; if it has a .cpp
  82.  *      extension the C++ version will be expanded. if you want to force
  83.  *      the C version expansion even though the source file has a .cpp
  84.  *      extension, then define the macro "CINTERFACE".
  85.  *      eg.     cl -DCINTERFACE file.cpp
  86.  *
  87.  *      Example Interface declaration:
  88.  *
  89.  *          #undef  INTERFACE
  90.  *          #define INTERFACE   IClassFactory
  91.  *
  92.  *          DECLARE_INTERFACE_(IClassFactory, IUnknown)
  93.  *          {
  94.  *              // *** IUnknown methods ***
  95.  *              STDMETHOD(QueryInterface) (THIS_
  96.  *                                        REFIID riid,
  97.  *                                        LPVOID FAR* ppvObj) PURE;
  98.  *              STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  99.  *              STDMETHOD_(ULONG,Release) (THIS) PURE;
  100.  *
  101.  *              // *** IClassFactory methods ***
  102.  *              STDMETHOD(CreateInstance) (THIS_
  103.  *                                        LPUNKNOWN pUnkOuter,
  104.  *                                        REFIID riid,
  105.  *                                        LPVOID FAR* ppvObject) PURE;
  106.  *          };
  107.  *
  108.  *      Example C++ expansion:
  109.  *
  110.  *          struct FAR IClassFactory : public IUnknown
  111.  *          {
  112.  *              virtual HRESULT STDMETHODCALLTYPE QueryInterface(
  113.  *                                                  IID FAR& riid,
  114.  *                                                  LPVOID FAR* ppvObj) = 0;
  115.  *              virtual HRESULT STDMETHODCALLTYPE AddRef(void) = 0;
  116.  *              virtual HRESULT STDMETHODCALLTYPE Release(void) = 0;
  117.  *              virtual HRESULT STDMETHODCALLTYPE CreateInstance(
  118.  *                                              LPUNKNOWN pUnkOuter,
  119.  *                                              IID FAR& riid,
  120.  *                                              LPVOID FAR* ppvObject) = 0;
  121.  *          };
  122.  *
  123.  *          NOTE: Our documentation says '#define interface class' but we use
  124.  *          'struct' instead of 'class' to keep a lot of 'public:' lines
  125.  *          out of the interfaces.  The 'FAR' forces the 'this' pointers to
  126.  *          be far, which is what we need.
  127.  *
  128.  *      Example C expansion:
  129.  *
  130.  *          typedef struct IClassFactory
  131.  *          {
  132.  *              const struct IClassFactoryVtbl FAR* lpVtbl;
  133.  *          } IClassFactory;
  134.  *
  135.  *          typedef struct IClassFactoryVtbl IClassFactoryVtbl;
  136.  *
  137.  *          struct IClassFactoryVtbl
  138.  *          {
  139.  *              HRESULT (STDMETHODCALLTYPE * QueryInterface) (
  140.  *                                                  IClassFactory FAR* This,
  141.  *                                                  IID FAR* riid,
  142.  *                                                  LPVOID FAR* ppvObj) ;
  143.  *              HRESULT (STDMETHODCALLTYPE * AddRef) (IClassFactory FAR* This) ;
  144.  *              HRESULT (STDMETHODCALLTYPE * Release) (IClassFactory FAR* This) ;
  145.  *              HRESULT (STDMETHODCALLTYPE * CreateInstance) (
  146.  *                                                  IClassFactory FAR* This,
  147.  *                                                  LPUNKNOWN pUnkOuter,
  148.  *                                                  IID FAR* riid,
  149.  *                                                  LPVOID FAR* ppvObject);
  150.  *              HRESULT (STDMETHODCALLTYPE * LockServer) (
  151.  *                                                  IClassFactory FAR* This,
  152.  *                                                  BOOL fLock);
  153.  *          };
  154.  */
  155. #if defined(__cplusplus) && !defined(CINTERFACE)
  156. //#define interface               struct FAR
  157. #define interface struct
  158. #define STDMETHOD(method)       virtual HRESULT STDMETHODCALLTYPE method
  159. #define STDMETHOD_(type,method) virtual type STDMETHODCALLTYPE method
  160. #define STDMETHODV(method)       virtual HRESULT STDMETHODVCALLTYPE method
  161. #define STDMETHODV_(type,method) virtual type STDMETHODVCALLTYPE method
  162. #define PURE                    = 0
  163. #define THIS_
  164. #define THIS                    void
  165. #define DECLARE_INTERFACE(iface)    interface DECLSPEC_NOVTABLE iface
  166. #define DECLARE_INTERFACE_(iface, baseiface)    interface DECLSPEC_NOVTABLE iface : public baseiface
  167. #if !defined(BEGIN_INTERFACE)
  168. #if defined(_MPPC_)  && 
  169.     ( (defined(_MSC_VER) || defined(__SC__) || defined(__MWERKS__)) && 
  170.     !defined(NO_NULL_VTABLE_ENTRY) )
  171.    #define BEGIN_INTERFACE virtual void a() {}
  172.    #define END_INTERFACE
  173. #else
  174.    #define BEGIN_INTERFACE
  175.    #define END_INTERFACE
  176. #endif
  177. #endif
  178. #else
  179. #define interface               struct
  180. #define STDMETHOD(method)       HRESULT (STDMETHODCALLTYPE * method)
  181. #define STDMETHOD_(type,method) type (STDMETHODCALLTYPE * method)
  182. #define STDMETHODV(method)       HRESULT (STDMETHODVCALLTYPE * method)
  183. #define STDMETHODV_(type,method) type (STDMETHODVCALLTYPE * method)
  184. #if !defined(BEGIN_INTERFACE)
  185. #if defined(_MPPC_)
  186.     #define BEGIN_INTERFACE       void    *b;
  187.     #define END_INTERFACE
  188. #else
  189.     #define BEGIN_INTERFACE
  190.     #define END_INTERFACE
  191. #endif
  192. #endif
  193. #define PURE
  194. #define THIS_                   INTERFACE FAR* This,
  195. #define THIS                    INTERFACE FAR* This
  196. #ifdef CONST_VTABLE
  197. #undef CONST_VTBL
  198. #define CONST_VTBL const
  199. #define DECLARE_INTERFACE(iface)    typedef interface iface { 
  200.                                     const struct iface##Vtbl FAR* lpVtbl; 
  201.                                 } iface; 
  202.                                 typedef const struct iface##Vtbl iface##Vtbl; 
  203.                                 const struct iface##Vtbl
  204. #else
  205. #undef CONST_VTBL
  206. #define CONST_VTBL
  207. #define DECLARE_INTERFACE(iface)    typedef interface iface { 
  208.                                     struct iface##Vtbl FAR* lpVtbl; 
  209.                                 } iface; 
  210.                                 typedef struct iface##Vtbl iface##Vtbl; 
  211.                                 struct iface##Vtbl
  212. #endif
  213. #define DECLARE_INTERFACE_(iface, baseiface)    DECLARE_INTERFACE(iface)
  214. #endif
  215. /****** Additional basic types **********************************************/
  216. #ifndef FARSTRUCT
  217. #ifdef __cplusplus
  218. #define FARSTRUCT   FAR
  219. #else
  220. #define FARSTRUCT
  221. #endif  // __cplusplus
  222. #endif  // FARSTRUCT
  223. #ifndef HUGEP
  224. #if defined(_WIN32) || defined(_MPPC_)
  225. #define HUGEP
  226. #else
  227. #define HUGEP __huge
  228. #endif // WIN32
  229. #endif // HUGEP
  230. #ifdef _MAC
  231. #if !defined(OLE2ANSI)
  232. #define OLE2ANSI
  233. #endif
  234. #endif
  235. #include <stdlib.h>
  236. #define LISet32(li, v) ((li).HighPart = ((LONG) (v)) < 0 ? -1 : 0, (li).LowPart = (v))
  237. #define ULISet32(li, v) ((li).HighPart = 0, (li).LowPart = (v))
  238. #define CLSCTX_INPROC           (CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER)
  239. // With DCOM, CLSCTX_REMOTE_SERVER should be included
  240. #if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM
  241. #define CLSCTX_ALL              (CLSCTX_INPROC_SERVER| 
  242.                                  CLSCTX_INPROC_HANDLER| 
  243.                                  CLSCTX_LOCAL_SERVER| 
  244.                                  CLSCTX_REMOTE_SERVER)
  245. #define CLSCTX_SERVER           (CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER|CLSCTX_REMOTE_SERVER)
  246. #else
  247. #define CLSCTX_ALL              (CLSCTX_INPROC_SERVER| 
  248.                                  CLSCTX_INPROC_HANDLER| 
  249.                                  CLSCTX_LOCAL_SERVER )
  250. #define CLSCTX_SERVER           (CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER)
  251. #endif
  252. // class registration flags; passed to CoRegisterClassObject
  253. typedef enum tagREGCLS
  254. {
  255.     REGCLS_SINGLEUSE = 0,       // class object only generates one instance
  256.     REGCLS_MULTIPLEUSE = 1,     // same class object genereates multiple inst.
  257.                                 // and local automatically goes into inproc tbl.
  258.     REGCLS_MULTI_SEPARATE = 2,  // multiple use, but separate control over each
  259.                                 // context.
  260.     REGCLS_SUSPENDED      = 4,  // register is as suspended, will be activated
  261.                                 // when app calls CoResumeClassObjects
  262.     REGCLS_SURROGATE      = 8   // must be used when a surrogate process
  263.                                 // is registering a class object that will be
  264.                                 // loaded in the surrogate
  265. } REGCLS;
  266. // interface marshaling definitions
  267. #define MARSHALINTERFACE_MIN 500 // minimum number of bytes for interface marshl
  268. //
  269. // Common typedefs for paramaters used in Storage API's, gleamed from storage.h
  270. // Also contains Storage error codes, which should be moved into the storage
  271. // idl files.
  272. //
  273. #define CWCSTORAGENAME 32
  274. /* Storage instantiation modes */
  275. #define STGM_DIRECT             0x00000000L
  276. #define STGM_TRANSACTED         0x00010000L
  277. #define STGM_SIMPLE             0x08000000L
  278. #define STGM_READ               0x00000000L
  279. #define STGM_WRITE              0x00000001L
  280. #define STGM_READWRITE          0x00000002L
  281. #define STGM_SHARE_DENY_NONE    0x00000040L
  282. #define STGM_SHARE_DENY_READ    0x00000030L
  283. #define STGM_SHARE_DENY_WRITE   0x00000020L
  284. #define STGM_SHARE_EXCLUSIVE    0x00000010L
  285. #define STGM_PRIORITY           0x00040000L
  286. #define STGM_DELETEONRELEASE    0x04000000L
  287. #if (WINVER >= 400)
  288. #define STGM_NOSCRATCH          0x00100000L
  289. #endif /* WINVER */
  290. #define STGM_CREATE             0x00001000L
  291. #define STGM_CONVERT            0x00020000L
  292. #define STGM_FAILIFTHERE        0x00000000L
  293. #define STGM_NOSNAPSHOT         0x00200000L
  294. #if (_WIN32_WINNT >= 0x0500)
  295. #define STGM_DIRECT_SWMR        0x00400000L
  296. #endif
  297. /*  flags for internet asyncronous and layout docfile */
  298. #define ASYNC_MODE_COMPATIBILITY    0x00000001L
  299. #define ASYNC_MODE_DEFAULT          0x00000000L
  300. #define STGTY_REPEAT                0x00000100L
  301. #define STG_TOEND                   0xFFFFFFFFL
  302. #define STG_LAYOUT_SEQUENTIAL       0x00000000L
  303. #define STG_LAYOUT_INTERLEAVED      0x00000001L
  304. #define STGFMT_STORAGE          0
  305. #define STGFMT_NATIVE           1
  306. #define STGFMT_FILE             3
  307. #define STGFMT_ANY              4
  308. #define STGFMT_DOCFILE          5
  309. // This is a legacy define to allow old component to builds
  310. #define STGFMT_DOCUMENT         0
  311. /* here is where we pull in the MIDL generated headers for the interfaces */
  312. typedef interface    IRpcStubBuffer     IRpcStubBuffer;
  313. typedef interface    IRpcChannelBuffer  IRpcChannelBuffer;
  314. #include <wtypes.h>
  315. #include <unknwn.h>
  316. #include <objidl.h>
  317. #ifdef _OLE32_
  318. #ifdef _OLE32PRIV_
  319. BOOL _fastcall wIsEqualGUID(REFGUID rguid1, REFGUID rguid2);
  320. #define IsEqualGUID(rguid1, rguid2) wIsEqualGUID(rguid1, rguid2)
  321. #else
  322. #define __INLINE_ISEQUAL_GUID
  323. #endif  // _OLE32PRIV_
  324. #endif  // _OLE32_
  325. #include <guiddef.h>
  326. #ifndef INITGUID
  327. #include <cguid.h>
  328. #endif
  329. // COM initialization flags; passed to CoInitialize.
  330. typedef enum tagCOINIT
  331. {
  332.   COINIT_APARTMENTTHREADED  = 0x2,      // Apartment model
  333. #if  (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM
  334.   // These constants are only valid on Windows NT 4.0
  335.   COINIT_MULTITHREADED      = 0x0,      // OLE calls objects on any thread.
  336.   COINIT_DISABLE_OLE1DDE    = 0x4,      // Don't use DDE for Ole1 support.
  337.   COINIT_SPEED_OVER_MEMORY  = 0x8,      // Trade memory for speed.
  338. #endif // DCOM
  339. } COINIT;
  340. /****** STD Object API Prototypes *****************************************/
  341. WINOLEAPI_(DWORD) CoBuildVersion( VOID );
  342. /* init/uninit */
  343. WINOLEAPI  CoInitialize(IN LPVOID pvReserved);
  344. WINOLEAPI_(void)  CoUninitialize(void);
  345. WINOLEAPI  CoGetMalloc(IN DWORD dwMemContext, OUT LPMALLOC FAR* ppMalloc);
  346. WINOLEAPI_(DWORD) CoGetCurrentProcess(void);
  347. WINOLEAPI  CoRegisterMallocSpy(IN LPMALLOCSPY pMallocSpy);
  348. WINOLEAPI  CoRevokeMallocSpy(void);
  349. WINOLEAPI  CoCreateStandardMalloc(IN DWORD memctx, OUT IMalloc FAR* FAR* ppMalloc);
  350. #if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM
  351. WINOLEAPI  CoInitializeEx(IN LPVOID pvReserved, IN DWORD dwCoInit);
  352. WINOLEAPI  CoGetCallerTID( LPDWORD lpdwTID );
  353. #endif // DCOM
  354. #if DBG == 1
  355. WINOLEAPI_(ULONG) DebugCoGetRpcFault( void );
  356. WINOLEAPI_(void) DebugCoSetRpcFault( ULONG );
  357. #endif
  358. /* COM+ APIs */
  359. WINOLEAPI     CoGetObjectContext(IN REFIID riid, OUT LPVOID FAR* ppv);
  360. /* register/revoke/get class objects */
  361. WINOLEAPI  CoGetClassObject(IN REFCLSID rclsid, IN DWORD dwClsContext, IN LPVOID pvReserved,
  362.                     IN REFIID riid, OUT LPVOID FAR* ppv);
  363. WINOLEAPI  CoRegisterClassObject(IN REFCLSID rclsid, IN LPUNKNOWN pUnk,
  364.                     IN DWORD dwClsContext, IN DWORD flags, OUT LPDWORD lpdwRegister);
  365. WINOLEAPI  CoRevokeClassObject(IN DWORD dwRegister);
  366. WINOLEAPI  CoResumeClassObjects(void);
  367. WINOLEAPI  CoSuspendClassObjects(void);
  368. WINOLEAPI_(ULONG) CoAddRefServerProcess(void);
  369. WINOLEAPI_(ULONG) CoReleaseServerProcess(void);
  370. WINOLEAPI  CoGetPSClsid(IN REFIID riid, OUT CLSID *pClsid);
  371. WINOLEAPI  CoRegisterPSClsid(IN REFIID riid, IN REFCLSID rclsid);
  372. // Registering surrogate processes
  373. WINOLEAPI  CoRegisterSurrogate(IN LPSURROGATE pSurrogate);
  374. /* marshaling interface pointers */
  375. WINOLEAPI CoGetMarshalSizeMax(OUT ULONG *pulSize, IN REFIID riid, IN LPUNKNOWN pUnk,
  376.                     IN DWORD dwDestContext, IN LPVOID pvDestContext, IN DWORD mshlflags);
  377. WINOLEAPI CoMarshalInterface(IN LPSTREAM pStm, IN REFIID riid, IN LPUNKNOWN pUnk,
  378.                     IN DWORD dwDestContext, IN LPVOID pvDestContext, IN DWORD mshlflags);
  379. WINOLEAPI CoUnmarshalInterface(IN LPSTREAM pStm, IN REFIID riid, OUT LPVOID FAR* ppv);
  380. WINOLEAPI CoMarshalHresult(IN LPSTREAM pstm, IN HRESULT hresult);
  381. WINOLEAPI CoUnmarshalHresult(IN LPSTREAM pstm, OUT HRESULT FAR * phresult);
  382. WINOLEAPI CoReleaseMarshalData(IN LPSTREAM pStm);
  383. WINOLEAPI CoDisconnectObject(IN LPUNKNOWN pUnk, IN DWORD dwReserved);
  384. WINOLEAPI CoLockObjectExternal(IN LPUNKNOWN pUnk, IN BOOL fLock, IN BOOL fLastUnlockReleases);
  385. WINOLEAPI CoGetStandardMarshal(IN REFIID riid, IN LPUNKNOWN pUnk,
  386.                     IN DWORD dwDestContext, IN LPVOID pvDestContext, IN DWORD mshlflags,
  387.                     OUT LPMARSHAL FAR* ppMarshal);
  388. WINOLEAPI CoGetStdMarshalEx(IN LPUNKNOWN pUnkOuter, IN DWORD smexflags,
  389.                             OUT LPUNKNOWN FAR* ppUnkInner);
  390. /* flags for CoGetStdMarshalEx */
  391. typedef enum tagSTDMSHLFLAGS
  392. {
  393.     SMEXF_SERVER     = 0x01,       // server side aggregated std marshaler
  394.     SMEXF_HANDLER    = 0x02        // client side (handler) agg std marshaler
  395. } STDMSHLFLAGS;
  396. WINOLEAPI_(BOOL) CoIsHandlerConnected(IN LPUNKNOWN pUnk);
  397. // Apartment model inter-thread interface passing helpers
  398. WINOLEAPI CoMarshalInterThreadInterfaceInStream(IN REFIID riid, IN LPUNKNOWN pUnk,
  399.                     OUT LPSTREAM *ppStm);
  400. WINOLEAPI CoGetInterfaceAndReleaseStream(IN LPSTREAM pStm, IN REFIID iid,
  401.                     OUT LPVOID FAR* ppv);
  402. WINOLEAPI CoCreateFreeThreadedMarshaler(IN LPUNKNOWN  punkOuter,
  403.                     OUT LPUNKNOWN *ppunkMarshal);
  404. /* dll loading helpers; keeps track of ref counts and unloads all on exit */
  405. WINOLEAPI_(HINSTANCE) CoLoadLibrary(IN LPOLESTR lpszLibName, IN BOOL bAutoFree);
  406. WINOLEAPI_(void) CoFreeLibrary(IN HINSTANCE hInst);
  407. WINOLEAPI_(void) CoFreeAllLibraries(void);
  408. WINOLEAPI_(void) CoFreeUnusedLibraries(void);
  409. #if  (_WIN32_WINNT >= 0x0501 )
  410. WINOLEAPI_(void) CoFreeUnusedLibrariesEx(IN DWORD dwUnloadDelay, IN DWORD dwReserved);
  411. #endif
  412. #if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM
  413. /* Call Security. */
  414. WINOLEAPI CoInitializeSecurity(
  415.                     IN PSECURITY_DESCRIPTOR         pSecDesc,
  416.                     IN LONG                         cAuthSvc,
  417.                     IN SOLE_AUTHENTICATION_SERVICE *asAuthSvc,
  418.                     IN void                        *pReserved1,
  419.                     IN DWORD                        dwAuthnLevel,
  420.                     IN DWORD                        dwImpLevel,
  421.                     IN void                        *pAuthList,
  422.                     IN DWORD                        dwCapabilities,
  423.                     IN void                        *pReserved3 );
  424. WINOLEAPI CoGetCallContext( IN REFIID riid, OUT void **ppInterface );
  425. WINOLEAPI CoQueryProxyBlanket(
  426.     IN  IUnknown                  *pProxy,
  427.     OUT DWORD                     *pwAuthnSvc,
  428.     OUT DWORD                     *pAuthzSvc,
  429.     OUT OLECHAR                  **pServerPrincName,
  430.     OUT DWORD                     *pAuthnLevel,
  431.     OUT DWORD                     *pImpLevel,
  432.     OUT RPC_AUTH_IDENTITY_HANDLE  *pAuthInfo,
  433.     OUT DWORD                     *pCapabilites );
  434. WINOLEAPI CoSetProxyBlanket(
  435.     IN IUnknown                 *pProxy,
  436.     IN DWORD                     dwAuthnSvc,
  437.     IN DWORD                     dwAuthzSvc,
  438.     IN OLECHAR                  *pServerPrincName,
  439.     IN DWORD                     dwAuthnLevel,
  440.     IN DWORD                     dwImpLevel,
  441.     IN RPC_AUTH_IDENTITY_HANDLE  pAuthInfo,
  442.     IN DWORD                     dwCapabilities );
  443. WINOLEAPI CoCopyProxy(
  444.     IN  IUnknown    *pProxy,
  445.     OUT IUnknown   **ppCopy );
  446. WINOLEAPI CoQueryClientBlanket(
  447.     OUT DWORD             *pAuthnSvc,
  448.     OUT DWORD             *pAuthzSvc,
  449.     OUT OLECHAR          **pServerPrincName,
  450.     OUT DWORD             *pAuthnLevel,
  451.     OUT DWORD             *pImpLevel,
  452.     OUT RPC_AUTHZ_HANDLE  *pPrivs,
  453.     OUT DWORD             *pCapabilities );
  454. WINOLEAPI CoImpersonateClient();
  455. WINOLEAPI CoRevertToSelf();
  456. WINOLEAPI CoQueryAuthenticationServices(
  457.     OUT DWORD *pcAuthSvc,
  458.     OUT SOLE_AUTHENTICATION_SERVICE **asAuthSvc );
  459. WINOLEAPI CoSwitchCallContext( IN IUnknown *pNewObject, OUT IUnknown **ppOldObject );
  460. #define COM_RIGHTS_EXECUTE 1
  461. #define COM_RIGHTS_SAFE_FOR_SCRIPTING 2
  462. #endif // DCOM
  463. /* helper for creating instances */
  464. WINOLEAPI CoCreateInstance(IN REFCLSID rclsid, IN LPUNKNOWN pUnkOuter,
  465.                     IN DWORD dwClsContext, IN REFIID riid, OUT LPVOID FAR* ppv);
  466. #if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM
  467. WINOLEAPI CoGetInstanceFromFile(
  468.     IN COSERVERINFO *              pServerInfo,
  469.     IN CLSID       *               pClsid,
  470.     IN IUnknown    *               punkOuter, // only relevant locally
  471.     IN DWORD                       dwClsCtx,
  472.     IN DWORD                       grfMode,
  473.     IN OLECHAR *                   pwszName,
  474.     IN DWORD                       dwCount,
  475.     IN OUT MULTI_QI    *           pResults );
  476. WINOLEAPI CoGetInstanceFromIStorage(
  477.     IN COSERVERINFO *              pServerInfo,
  478.     IN CLSID       *               pClsid,
  479.     IN IUnknown    *               punkOuter, // only relevant locally
  480.     IN DWORD                       dwClsCtx,
  481.     IN struct IStorage *           pstg,
  482.     IN DWORD                       dwCount,
  483.     IN OUT MULTI_QI    *           pResults );
  484. WINOLEAPI CoCreateInstanceEx(
  485.     IN REFCLSID                    Clsid,
  486.     IN IUnknown    *               punkOuter, // only relevant locally
  487.     IN DWORD                       dwClsCtx,
  488.     IN COSERVERINFO *              pServerInfo,
  489.     IN DWORD                       dwCount,
  490.     IN OUT MULTI_QI    *           pResults );
  491. #endif // DCOM
  492. /* Call related APIs */
  493. #if (_WIN32_WINNT >= 0x0500 ) || defined(_WIN32_DCOM) // DCOM
  494. WINOLEAPI CoGetCancelObject(IN DWORD dwThreadId, IN REFIID iid, OUT void **ppUnk);
  495. WINOLEAPI CoSetCancelObject(IN IUnknown *pUnk);
  496. WINOLEAPI CoCancelCall(IN DWORD dwThreadId, IN ULONG ulTimeout);
  497. WINOLEAPI CoTestCancel();
  498. WINOLEAPI CoEnableCallCancellation(IN LPVOID pReserved);
  499. WINOLEAPI CoDisableCallCancellation(IN LPVOID pReserved);
  500. WINOLEAPI CoAllowSetForegroundWindow(IN IUnknown *pUnk, IN LPVOID lpvReserved);
  501. WINOLEAPI DcomChannelSetHResult(IN LPVOID pvReserved, IN ULONG* pulReserved, IN HRESULT appsHR);
  502. #endif
  503. /* other helpers */
  504. WINOLEAPI StringFromCLSID(IN REFCLSID rclsid, OUT LPOLESTR FAR* lplpsz);
  505. WINOLEAPI CLSIDFromString(IN LPOLESTR lpsz, OUT LPCLSID pclsid);
  506. WINOLEAPI StringFromIID(IN REFIID rclsid, OUT LPOLESTR FAR* lplpsz);
  507. WINOLEAPI IIDFromString(IN LPOLESTR lpsz, OUT LPIID lpiid);
  508. WINOLEAPI_(BOOL) CoIsOle1Class(IN REFCLSID rclsid);
  509. WINOLEAPI ProgIDFromCLSID (IN REFCLSID clsid, OUT LPOLESTR FAR* lplpszProgID);
  510. WINOLEAPI CLSIDFromProgID (IN LPCOLESTR lpszProgID, OUT LPCLSID lpclsid);
  511. WINOLEAPI CLSIDFromProgIDEx (IN LPCOLESTR lpszProgID, OUT LPCLSID lpclsid);
  512. WINOLEAPI_(int) StringFromGUID2(IN REFGUID rguid, OUT LPOLESTR lpsz, IN int cchMax);
  513. WINOLEAPI CoCreateGuid(OUT GUID FAR *pguid);
  514. WINOLEAPI_(BOOL) CoFileTimeToDosDateTime(
  515.                  IN FILETIME FAR* lpFileTime, OUT LPWORD lpDosDate, OUT LPWORD lpDosTime);
  516. WINOLEAPI_(BOOL) CoDosDateTimeToFileTime(
  517.                        IN WORD nDosDate, IN WORD nDosTime, OUT FILETIME FAR* lpFileTime);
  518. WINOLEAPI  CoFileTimeNow( OUT FILETIME FAR* lpFileTime );
  519. WINOLEAPI CoRegisterMessageFilter( IN LPMESSAGEFILTER lpMessageFilter,
  520.                                 OUT LPMESSAGEFILTER FAR* lplpMessageFilter );
  521. #if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM
  522. WINOLEAPI CoRegisterChannelHook( IN REFGUID ExtensionUuid, IN IChannelHook *pChannelHook );
  523. #endif // DCOM
  524. #if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM
  525. /* Synchronization API */
  526. WINOLEAPI CoWaitForMultipleHandles (IN DWORD dwFlags,
  527.                                     IN DWORD dwTimeout,
  528.                                     IN ULONG cHandles,
  529.                                     IN LPHANDLE pHandles,
  530.                                     OUT LPDWORD  lpdwindex);
  531. /* Flags for Synchronization API and Classes */
  532. typedef enum tagCOWAIT_FLAGS
  533. {
  534.   COWAIT_WAITALL = 1,
  535.   COWAIT_ALERTABLE = 2
  536. }COWAIT_FLAGS;
  537. #endif // DCOM
  538. /* TreatAs APIS */
  539. WINOLEAPI CoGetTreatAsClass(IN REFCLSID clsidOld, OUT LPCLSID pClsidNew);
  540. WINOLEAPI CoTreatAsClass(IN REFCLSID clsidOld, IN REFCLSID clsidNew);
  541. /* the server dlls must define their DllGetClassObject and DllCanUnloadNow
  542.  * to match these; the typedefs are located here to ensure all are changed at
  543.  * the same time.
  544.  */
  545. //#ifdef _MAC
  546. //typedef STDAPICALLTYPE HRESULT (* LPFNGETCLASSOBJECT) (REFCLSID, REFIID, LPVOID *);
  547. //#else
  548. typedef HRESULT (STDAPICALLTYPE * LPFNGETCLASSOBJECT) (REFCLSID, REFIID, LPVOID *);
  549. //#endif
  550. //#ifdef _MAC
  551. //typedef STDAPICALLTYPE HRESULT (* LPFNCANUNLOADNOW)(void);
  552. //#else
  553. typedef HRESULT (STDAPICALLTYPE * LPFNCANUNLOADNOW)(void);
  554. //#endif
  555. STDAPI  DllGetClassObject(IN REFCLSID rclsid, IN REFIID riid, OUT LPVOID FAR* ppv);
  556. STDAPI  DllCanUnloadNow(void);
  557. /****** Default Memory Allocation ******************************************/
  558. WINOLEAPI_(LPVOID) CoTaskMemAlloc(IN SIZE_T cb);
  559. WINOLEAPI_(LPVOID) CoTaskMemRealloc(IN LPVOID pv, IN SIZE_T cb);
  560. WINOLEAPI_(void)   CoTaskMemFree(IN LPVOID pv);
  561. /****** DV APIs ***********************************************************/
  562. WINOLEAPI CreateDataAdviseHolder(OUT LPDATAADVISEHOLDER FAR* ppDAHolder);
  563. WINOLEAPI CreateDataCache(IN LPUNKNOWN pUnkOuter, IN REFCLSID rclsid,
  564.                                         IN REFIID iid, OUT LPVOID FAR* ppv);
  565. /****** Storage API Prototypes ********************************************/
  566. WINOLEAPI StgCreateDocfile(IN const OLECHAR FAR* pwcsName,
  567.             IN DWORD grfMode,
  568.             IN DWORD reserved,
  569.             OUT IStorage FAR * FAR *ppstgOpen);
  570. WINOLEAPI StgCreateDocfileOnILockBytes(IN ILockBytes FAR *plkbyt,
  571.                     IN DWORD grfMode,
  572.                     IN DWORD reserved,
  573.                     OUT IStorage FAR * FAR *ppstgOpen);
  574. WINOLEAPI StgOpenStorage(IN const OLECHAR FAR* pwcsName,
  575.               IN  IStorage FAR *pstgPriority,
  576.               IN  DWORD grfMode,
  577.               IN  SNB snbExclude,
  578.               IN  DWORD reserved,
  579.               OUT IStorage FAR * FAR *ppstgOpen);
  580. WINOLEAPI StgOpenStorageOnILockBytes(IN ILockBytes FAR *plkbyt,
  581.                   IN  IStorage FAR *pstgPriority,
  582.                   IN  DWORD grfMode,
  583.                   IN  SNB snbExclude,
  584.                   IN  DWORD reserved,
  585.                   OUT IStorage FAR * FAR *ppstgOpen);
  586. WINOLEAPI StgIsStorageFile(IN const OLECHAR FAR* pwcsName);
  587. WINOLEAPI StgIsStorageILockBytes(IN ILockBytes FAR* plkbyt);
  588. WINOLEAPI StgSetTimes(IN OLECHAR const FAR* lpszName,
  589.                    IN FILETIME const FAR* pctime,
  590.                    IN FILETIME const FAR* patime,
  591.                    IN FILETIME const FAR* pmtime);
  592. WINOLEAPI StgOpenAsyncDocfileOnIFillLockBytes( IN IFillLockBytes *pflb,
  593.              IN  DWORD grfMode,
  594.              IN  DWORD asyncFlags,
  595.              OUT IStorage **ppstgOpen);
  596. WINOLEAPI StgGetIFillLockBytesOnILockBytes( IN ILockBytes *pilb,
  597.              OUT IFillLockBytes **ppflb);
  598. WINOLEAPI StgGetIFillLockBytesOnFile(IN OLECHAR const *pwcsName,
  599.              OUT IFillLockBytes **ppflb);
  600. WINOLEAPI StgOpenLayoutDocfile(IN OLECHAR const *pwcsDfName,
  601.              IN  DWORD grfMode,
  602.              IN  DWORD reserved,
  603.              OUT IStorage **ppstgOpen);
  604. // STG initialization options for StgCreateStorageEx and StgOpenStorageEx
  605. #define STGOPTIONS_VERSION 2
  606. typedef struct tagSTGOPTIONS
  607. {
  608.     USHORT usVersion;            // Versions 1 and 2 supported
  609.     USHORT reserved;             // must be 0 for padding
  610.     ULONG ulSectorSize;          // docfile header sector size (512)
  611.     const WCHAR *pwcsTemplateFile;  // version 2 or above 
  612. } STGOPTIONS;
  613. WINOLEAPI StgCreateStorageEx (IN const WCHAR* pwcsName,
  614.             IN  DWORD grfMode,
  615.             IN  DWORD stgfmt,              // enum
  616.             IN  DWORD grfAttrs,             // reserved
  617.             IN  STGOPTIONS * pStgOptions,
  618.             IN  void * reserved,
  619.             IN  REFIID riid,
  620.             OUT void ** ppObjectOpen);
  621. WINOLEAPI StgOpenStorageEx (IN const WCHAR* pwcsName,
  622.             IN  DWORD grfMode,
  623.             IN  DWORD stgfmt,              // enum
  624.             IN  DWORD grfAttrs,             // reserved
  625.             IN  STGOPTIONS * pStgOptions,
  626.             IN  void * reserved,
  627.             IN  REFIID riid,
  628.             OUT void ** ppObjectOpen);
  629. //
  630. //  Moniker APIs
  631. //
  632. WINOLEAPI  BindMoniker(IN LPMONIKER pmk, IN DWORD grfOpt, IN REFIID iidResult, OUT LPVOID FAR* ppvResult);
  633. WINOLEAPI  CoInstall(
  634.     IN  IBindCtx     * pbc,
  635.     IN  DWORD          dwFlags,
  636.     IN  uCLSSPEC     * pClassSpec,
  637.     IN  QUERYCONTEXT * pQuery,
  638.     IN  LPWSTR         pszCodeBase);
  639. WINOLEAPI  CoGetObject(IN LPCWSTR pszName, IN BIND_OPTS *pBindOptions, IN REFIID riid, OUT void **ppv);
  640. WINOLEAPI  MkParseDisplayName(IN LPBC pbc, IN LPCOLESTR szUserName,
  641.                 OUT ULONG FAR * pchEaten, OUT LPMONIKER FAR * ppmk);
  642. WINOLEAPI  MonikerRelativePathTo(IN LPMONIKER pmkSrc, IN LPMONIKER pmkDest, OUT LPMONIKER
  643.                 FAR* ppmkRelPath, IN BOOL dwReserved);
  644. WINOLEAPI  MonikerCommonPrefixWith(IN LPMONIKER pmkThis, IN LPMONIKER pmkOther,
  645.                 OUT LPMONIKER FAR* ppmkCommon);
  646. WINOLEAPI  CreateBindCtx(IN DWORD reserved, OUT LPBC FAR* ppbc);
  647. WINOLEAPI  CreateGenericComposite(IN LPMONIKER pmkFirst, IN LPMONIKER pmkRest,
  648.     OUT LPMONIKER FAR* ppmkComposite);
  649. WINOLEAPI  GetClassFile (IN LPCOLESTR szFilename, OUT CLSID FAR* pclsid);
  650. WINOLEAPI  CreateClassMoniker(IN REFCLSID rclsid, OUT LPMONIKER FAR* ppmk);
  651. WINOLEAPI  CreateFileMoniker(IN LPCOLESTR lpszPathName, OUT LPMONIKER FAR* ppmk);
  652. WINOLEAPI  CreateItemMoniker(IN LPCOLESTR lpszDelim, IN LPCOLESTR lpszItem,
  653.     OUT LPMONIKER FAR* ppmk);
  654. WINOLEAPI  CreateAntiMoniker(OUT LPMONIKER FAR* ppmk);
  655. WINOLEAPI  CreatePointerMoniker(IN LPUNKNOWN punk, OUT LPMONIKER FAR* ppmk);
  656. WINOLEAPI  CreateObjrefMoniker(IN LPUNKNOWN punk, OUT LPMONIKER FAR * ppmk);
  657. WINOLEAPI  GetRunningObjectTable( IN DWORD reserved, OUT LPRUNNINGOBJECTTABLE FAR* pprot);
  658. #include <urlmon.h>
  659. #include <propidl.h>
  660. //
  661. // Standard Progress Indicator impolementation
  662. //
  663. WINOLEAPI CreateStdProgressIndicator(IN HWND hwndParent,
  664.                                    IN  LPCOLESTR pszTitle,
  665.                                    IN  IBindStatusCallback * pIbscCaller,
  666.                                    OUT IBindStatusCallback ** ppIbsc);
  667. #ifndef RC_INVOKED
  668. #include <poppack.h>
  669. #endif // RC_INVOKED
  670. #endif     // __OBJBASE_H__