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

模拟服务器

开发平台:

C/C++

  1. //*****************************************************************************
  2. // File: CorReg.H
  3. //
  4. // Copyright (c) 1996-1998 Microsoft Corporation.  All Rights Reserved.
  5. // Microsoft Confidential. Public header file for COM+ 1.0 release.
  6. //*****************************************************************************
  7. #ifndef _CORREG_H_
  8. #define _CORREG_H_
  9. #if _MSC_VER >= 1000
  10. #pragma once
  11. #endif // _MSC_VER >= 1000
  12. //*****************************************************************************
  13. // Required includes
  14. #include <ole2.h> // Definitions of OLE types.
  15. //*****************************************************************************
  16. #ifdef __cplusplus
  17. extern "C" {
  18. #endif
  19. // Force 1 byte alignment for structures which must match.
  20. #include <pshpack1.h>
  21. #ifndef NODLLIMPORT
  22. #define DLLIMPORT __declspec(dllimport)
  23. #else
  24. #define DLLIMPORT
  25. #endif
  26. //*****************************************************************************
  27. //*****************************************************************************
  28. //
  29. // D L L   P U B L I C  E N T R Y   P O I N T   D E C L A R A T I O N S
  30. //
  31. //*****************************************************************************
  32. //*****************************************************************************
  33. #if !defined(_META_DATA_NO_SCOPE_) || defined(_META_DATA_SCOPE_WRAPPER_)
  34. //@todo: take out for RTM
  35. STDAPI CoGetCor(REFIID riid, void** ppv);
  36. #endif
  37. STDAPI CoInitializeCor(DWORD fFlags);
  38. STDAPI_(void) CoUninitializeCor(void);
  39. //*****************************************************************************
  40. //*****************************************************************************
  41. //
  42. // M E T A - D A T A D E C L A R A T I O N S
  43. //
  44. //*****************************************************************************
  45. //*****************************************************************************
  46. // Token  definitions
  47. typedef INT_PTR mdScope;  // scope token
  48. #define mdScopeNil ((mdScope)0)
  49. typedef INT_PTR mdToken; // Generic token
  50. typedef INT_PTR mdModule; // Module token (roughly, a scope)
  51. typedef INT_PTR mdTypeDef; // TypeDef in this scope
  52. typedef INT_PTR mdInterfaceImpl; // interface implementation token
  53. typedef INT_PTR mdTypeRef; // TypeRef reference (this or other scope)
  54. typedef INT_PTR mdNamespace; // namespace token
  55. typedef INT_PTR mdCustomValue; // attribute token
  56. typedef INT_PTR mdResource;  // CompReg.Resource
  57. typedef INT_PTR mdCocatdef;  // CompReg.Cocat
  58. typedef INT_PTR mdCocatImpl; // CompReg.CoclassCat
  59. typedef INT_PTR mdMimeTypeImpl;  // CompReg.CoclassMIME
  60. typedef INT_PTR mdFormatImpl; // CompReg.CoclassFormats
  61. typedef INT_PTR mdProgID; // CompReg.RedirectProgID
  62. typedef INT_PTR mdRoleCheck; // CompReg.RoleCheck
  63. typedef unsigned long RID;
  64. enum CorRegTokenType
  65. {
  66. mdtTypeDef = 0x00000000,
  67. mdtInterfaceImpl = 0x01000000,
  68. mdtTypeRef = 0x03000000,
  69. mdtNamespace = 0x06000000,
  70. mdtCustomValue = 0x07000000,
  71. mdtResource  = 0x0B000000,
  72. mdtCocatImpl = 0x0D000000,
  73. mdtMimeTypeImpl  = 0x0E000000,
  74. mdtFormatImpl = 0x0F000000,
  75. mdtProgID = 0x10000000,
  76. mdtRoleCheck = 0x11000000,
  77. mdtModule = 0x14000000,
  78. };
  79. //
  80. // Build / decompose tokens.
  81. //
  82. #define RidToToken(rid,tktype) ((rid) |= (tktype))
  83. #define TokenFromRid(rid,tktype) ((rid) | (tktype))
  84. #define RidFromToken(tk) ((RID) ((tk) & 0x00ffffff))
  85. #define TypeFromToken(tk) ((tk) & 0xff000000)
  86. #define mdTokenNil ((mdToken)0)
  87. #define mdModuleNil  ((mdModule)mdtModule)
  88. #define mdTypeDefNil ((mdTypeDef)mdtTypeDef)
  89. #define mdInterfaceImplNil ((mdInterfaceImpl)mdtInterfaceImpl)
  90. #define mdTypeRefNil ((mdTypeRef)mdtTypeRef)
  91. #define mdNamespaceNil ((mdNamespace)mdtNamespace)
  92. #define mdCustomValueNil ((mdCustomValue)mdtCustomValue)
  93. #define mdResourceNil ((mdResource)mdtResource)
  94. #define mdCocatImplNil ((mdCocatImpl)mdtCocatImpl)
  95. #define mdMimeTypeImplNil ((mdMimeTypeImpl)mdtMimeTypeImpl)
  96. #define mdFormatImplNil  ((mdFormatImpl)mdtFormatImpl)
  97. #define mdProgIDNil  ((mdProgID)mdtProgID)
  98. #define mdRoleCheckNil ((mdRoleCheck)mdtRoleCheck)
  99. enum CorRegTypeAttr  // Used by emit_defineclass
  100. {
  101. tdPublic = 0x0001,  // Class is public scope
  102. // Use this mask to retrieve class layout informaiton
  103. // 0 is AutoLayout, 0x2 is LayoutSequential, 4 is ExplicitLayout
  104. tdLayoutMask = 0x0006, 
  105. tdAutoLayout = 0x0000,  // Class fields are auto-laid out
  106. tdLayoutSequential = 0x0002,  // Class fields are laid out sequentially
  107. tdExplicitLayout = 0x0004,  // Layout is supplied explicitly
  108. tdWrapperClass = 0x0008,  // This is a wrapper class
  109. tdFinal  = 0x0010,  // Class is final
  110. tdISSCompat  = 0x0020,  // InvokeSpecial backwards compatibility
  111. // Use tdStringFormatMask to retrieve string information
  112. tdStringFormatMask = 0x00c0, 
  113. tdAnsiClass  = 0x0000,  // LPTSTR is interpreted as ANSI in this class
  114. tdUnicodeClass = 0x0040,  // LPTSTR is interpreted as UNICODE
  115. tdAutoClass  = 0x0080,  // LPTSTR is interpreted automatically
  116. tdValueClass = 0x0100,  // Class has value based semantics
  117. tdInterface  = 0x0200,  // Class is an interface
  118. tdAbstract = 0x0400,  // Class is abstract
  119. tdImport = 0x1000,  // Class / interface is imported
  120. tdRecord = 0x2000,  // Class is a record (no methods or props)
  121. tdEnum = 0x4000,  // Class is an enum; static final values only
  122. tdReserved1  = 0x0800,  // reserve bit for internal use
  123. // tdReserved2 = 0x8000,  // reserve bit for internal use
  124. };
  125. enum CorImplementType // Used internally for implements table
  126. {
  127. itImplements = 0x0000,  // Interfaces implemented or parent ifaces
  128. itEvents = 0x0001,  // Interfaces raised
  129. itRequires = 0x0002, 
  130. itInherits = 0x0004,
  131. };
  132. //-------------------------------------
  133. //--- Registration support types
  134. //-------------------------------------
  135. enum CorClassActivateAttr 
  136. caaDeferCreate = 0x0001,  // supports deferred create 
  137. caaAppObject = 0x0002,  // class is AppObject 
  138. caaFixedIfaceSet = 0x0004,  // interface set is open (use QI) 
  139. caaIndependentlyCreateable = 0x0100, 
  140. caaPredefined = 0x0200,
  141. // mask for caaLB*
  142. caaLoadBalancing = 0x0c00,
  143. caaLBNotSupported = 0x0400,
  144. caaLBSupported = 0x0800,
  145. caaLBNotSpecified = 0x0000,
  146. // mask for caaOP*
  147. caaObjectPooling = 0x3000,
  148. caaOPNotSupported = 0x1000,
  149. caaOPSupported = 0x2000,
  150. caaOPNotSpecified = 0x0000,
  151. // mask for caaJA*
  152. caaJITActivation = 0xc000,
  153. caaJANotSupported = 0x4000,
  154. caaJASupported = 0x8000,
  155. caaJANotSpecified = 0x0000,
  156. }; 
  157. enum CorIfaceSvcAttr 
  158. {
  159. mlNone = 0x0001,  // Not marshalled 
  160. mlAutomation = 0x0002,  // Standard marshalling 
  161. mlProxyStub  = 0x0004,  // Custom marshalling 
  162. // mask for mlDefer*
  163. mlDeferrable = 0x0018,  // Methods on this interface are queuable
  164. mlDeferNotSupported = 0x0008,
  165. mlDeferSupported = 0x0010,
  166. mlDeferNotSpecified = 0x0000,
  167. }; 
  168. enum CocatImplAttr 
  169. catiaImplements  = 0x0001,  // coclass implements this category 
  170. catiaRequires = 0x0002 // coclass requires this category 
  171. }; 
  172. enum  CorModuleExportAttr 
  173. moUsesGetLastError = 0x0001 // Module uses GetLastError
  174. }; 
  175. enum CorModuleRegAttr 
  176. rmaCustomReg = 0x0001
  177. }; 
  178. enum CorRegFormatAttr 
  179. rfaSupportsFormat = 0x0001, 
  180. rfaConvertsFromFormat = 0x0002, 
  181. rfaConvertsToFormat = 0x0003, 
  182. rfaDefaultFormat = 0x0004, 
  183. rfaIsFileExt = 0x0005,
  184. rfaIsFileType = 0x0006,
  185. rfaIsDataFormat  = 0x0007
  186. }; 
  187. enum CorSynchAttr 
  188. sySupported  = 0x0001, 
  189. syRequired = 0x0002, 
  190. syRequiresNew = 0x0004, 
  191. syNotSupported = 0x0008, 
  192. syThreadAffinity = 0x0010 
  193. }; 
  194. enum CorThreadingAttr 
  195. taMain = 0x0001, 
  196. taSTA = 0x0002, 
  197. taMTA = 0x0004, 
  198. taNeutral = 0x0008,
  199. taBoth = 0x0010
  200. }; 
  201. enum CorXactionAttr 
  202. xaSupported  = 0x0001, 
  203. xaRequired = 0x0002, 
  204. xaRequiresNew = 0x0004, 
  205. xaNotSupported = 0x0008,
  206. xaNoVote = 0x0010
  207. }; 
  208. enum CorRoleCheckAttr
  209. {
  210. rcChecksFor  = 0x0001
  211. };
  212. //
  213. // Opaque type for an enumeration handle.
  214. //
  215. typedef void *HCORENUM;
  216. //
  217. // GetSaveSize accuracy
  218. //
  219. #ifndef _CORSAVESIZE_DEFINED_
  220. #define _CORSAVESIZE_DEFINED_
  221. enum CorSaveSize
  222. {
  223. cssAccurate = 0x0000, // Find exact save size, accurate but slower.
  224. cssQuick = 0x0001 // Estimate save size, may pad estimate, but faster.
  225. };
  226. #endif
  227. #define  MAX_CLASS_NAME 255
  228. #define  MAX_PACKAGE_NAME 255
  229. typedef unsigned __int64 CLASSVERSION;
  230. // %%Prototypes: -------------------------------------------------------------
  231. #ifndef DECLSPEC_SELECT_ANY
  232. #define DECLSPEC_SELECT_ANY __declspec(selectany)
  233. #endif // DECLSPEC_SELECT_ANY
  234. // CLSID_Cor: {bee00000-ee77-11d0-a015-00c04fbbb884}
  235. extern const GUID DECLSPEC_SELECT_ANY CLSID_Cor = 
  236. { 0xbee00010, 0xee77, 0x11d0, {0xa0, 0x15, 0x00, 0xc0, 0x4f, 0xbb, 0xb8, 0x84 } };
  237. // CLSID_CorMetaDataDispenser: {E5CB7A31-7512-11d2-89CE-0080C792E5D8}
  238. // This is the "Master Dispenser", always guaranteed to be the most recent
  239. // dispenser on the machine.
  240. extern const GUID DECLSPEC_SELECT_ANY CLSID_CorMetaDataDispenser = 
  241. { 0xe5cb7a31, 0x7512, 0x11d2, { 0x89, 0xce, 0x0, 0x80, 0xc7, 0x92, 0xe5, 0xd8 } };
  242. // CLSID_CorMetaDataDispenserReg: {435755FF-7397-11d2-9771-00A0C9B4D50C}
  243. // Dispenser coclass for version 1.0 meta data.  To get the "latest" bind
  244. // to CLSID_CorMetaDataDispenser.
  245. extern const GUID DECLSPEC_SELECT_ANY CLSID_CorMetaDataDispenserReg = 
  246. { 0x435755ff, 0x7397, 0x11d2, { 0x97, 0x71, 0x0, 0xa0, 0xc9, 0xb4, 0xd5, 0xc } };
  247. // CLSID_CorMetaDataReg: {87F3A1F5-7397-11d2-9771-00A0C9B4D50C}
  248. // For COM+ 1.0 Meta Data, Data Driven Registration
  249. extern const GUID DECLSPEC_SELECT_ANY CLSID_CorMetaDataReg = 
  250. { 0x87f3a1f5, 0x7397, 0x11d2, { 0x97, 0x71, 0x0, 0xa0, 0xc9, 0xb4, 0xd5, 0xc } };
  251. // IID_IMetaDataInternal {02D601BB-C5B9-11d1-93F9-0000F8083460}
  252. extern const GUID DECLSPEC_SELECT_ANY IID_IMetaDataInternal = 
  253. { 0x2d601bb, 0xc5b9, 0x11d1, {0x93, 0xf9, 0x0, 0x0, 0xf8, 0x8, 0x34, 0x60 } };
  254. // {AD93D71D-E1F2-11d1-9409-0000F8083460}
  255. extern const GUID DECLSPEC_SELECT_ANY IID_IMetaDataEmitTemp =
  256. { 0xad93d71d, 0xe1f2, 0x11d1, {0x94, 0x9, 0x0, 0x0, 0xf8, 0x8, 0x34, 0x60 } };
  257. interface IMetaDataRegEmit;
  258. interface IMetaDataRegImport;
  259. interface IMetaDataDispenser;
  260. // %%Interfaces: -------------------------------------------------------------
  261. //-------------------------------------
  262. //--- IMemory
  263. //-------------------------------------
  264. //---
  265. // IID_IMemory: {06A3EA8A-0225-11d1-BF72-00C04FC31E12}
  266. extern const GUID DECLSPEC_SELECT_ANY IID_IMemory = 
  267. { 0x6a3ea8a, 0x225, 0x11d1, {0xbf, 0x72, 0x0, 0xc0, 0x4f, 0xc3, 0x1e, 0x12 } };
  268. //---
  269. #undef INTERFACE
  270. #define INTERFACE IMemory
  271. DECLARE_INTERFACE_(IMemory, IUnknown)
  272. {
  273. // *** IUnknown methods ***
  274. STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
  275. STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  276. STDMETHOD_(ULONG,Release) (THIS) PURE;
  277. // *** IMemory methods ***
  278. STDMETHOD(GetMemory)(void **pMem, ULONG *iSize) PURE;
  279. STDMETHOD(SetMemory)(void *pMem, ULONG iSize) PURE;
  280. };
  281. //-------------------------------------
  282. //--- IMetaDataError
  283. //-------------------------------------
  284. //---
  285. // {B81FF171-20F3-11d2-8DCC-00A0C9B09C19}
  286. extern const GUID DECLSPEC_SELECT_ANY IID_IMetaDataError =
  287. { 0xb81ff171, 0x20f3, 0x11d2, { 0x8d, 0xcc, 0x0, 0xa0, 0xc9, 0xb0, 0x9c, 0x19 } };
  288. //---
  289. #undef INTERFACE
  290. #define INTERFACE IMetaDataError
  291. DECLARE_INTERFACE_(IMetaDataError, IUnknown)
  292. {
  293. STDMETHOD(OnError)(HRESULT hrError, mdToken token) PURE;
  294. };
  295. //-------------------------------------
  296. //--- IMapToken
  297. //-------------------------------------
  298. //---
  299. // IID_IMapToken: {06A3EA8B-0225-11d1-BF72-00C04FC31E12}
  300. extern const GUID DECLSPEC_SELECT_ANY IID_IMapToken = 
  301. { 0x6a3ea8b, 0x225, 0x11d1, {0xbf, 0x72, 0x0, 0xc0, 0x4f, 0xc3, 0x1e, 0x12 } };
  302. //---
  303. #undef INTERFACE
  304. #define INTERFACE IMapToken
  305. DECLARE_INTERFACE_(IMapToken, IUnknown)
  306. {
  307. STDMETHOD(Map)(ULONG tkImp, ULONG tkEmit) PURE;
  308. };
  309. //-------------------------------------
  310. //--- IMetaDataDispenser
  311. //-------------------------------------
  312. //---
  313. // {B81FF171-20F3-11d2-8DCC-00A0C9B09C19}
  314. extern const GUID DECLSPEC_SELECT_ANY IID_IMetaDataDispenser =
  315. { 0x809c652e, 0x7396, 0x11d2, { 0x97, 0x71, 0x0, 0xa0, 0xc9, 0xb4, 0xd5, 0xc } };
  316. #undef INTERFACE
  317. #define INTERFACE IMetaDataDispenser
  318. DECLARE_INTERFACE_(IMetaDataDispenser, IUnknown)
  319. {
  320. STDMETHOD(DefineScope)(  // Return code.
  321. REFCLSID rclsid,  // [in] What version to create.
  322. DWORD dwCreateFlags, // [in] Flags on the create.
  323. REFIID riid, // [in] The interface desired.
  324. IUnknown **ppIUnk) PURE;  // [out] Return interface on success.
  325. STDMETHOD(OpenScope)( // Return code.
  326. LPCWSTR  szScope, // [in] The scope to open.
  327. DWORD dwOpenFlags, // [in] Open mode flags.
  328. REFIID riid, // [in] The interface desired.
  329. IUnknown **ppIUnk) PURE;  // [out] Return interface on success.
  330. STDMETHOD(OpenScopeOnStream)( // Return code.
  331. IStream  *pIStream, // [in] The scope to open.
  332. DWORD dwOpenFlags, // [in] Open mode flags.
  333. REFIID riid, // [in] The interface desired.
  334. IUnknown **ppIUnk) PURE;  // [out] Return interface on success.
  335. STDMETHOD(OpenScopeOnMemory)( // Return code.
  336. LPCVOID  pData, // [in] Location of scope data.
  337. ULONG cbData,  // [in] Size of the data pointed to by pData.
  338. DWORD dwOpenFlags, // [in] Open mode flags.
  339. REFIID riid, // [in] The interface desired.
  340. IUnknown **ppIUnk) PURE;  // [out] Return interface on success.
  341. };
  342. //-------------------------------------
  343. //--- IMetaDataRegEmit
  344. //-------------------------------------
  345. //---
  346. #if defined(_META_DATA_NO_SCOPE_) || defined(_META_DATA_SCOPE_WRAPPER_)
  347. // {601C95B9-7398-11d2-9771-00A0C9B4D50C}
  348. extern const GUID DECLSPEC_SELECT_ANY IID_IMetaDataRegEmit = 
  349. { 0x601c95b9, 0x7398, 0x11d2, { 0x97, 0x71, 0x0, 0xa0, 0xc9, 0xb4, 0xd5, 0xc } };
  350. extern const GUID DECLSPEC_SELECT_ANY IID_IMetaDataRegEmitOld = 
  351. { 0xf28f419b, 0x62ca, 0x11d2, { 0x8f, 0x2c, 0x0, 0xa0, 0xc9, 0xa6, 0x18, 0x6d } };
  352. //---
  353. #undef INTERFACE
  354. #define INTERFACE IMetaDataRegEmit
  355. DECLARE_INTERFACE_(IMetaDataRegEmit, IUnknown)
  356. {
  357. STDMETHOD(SetModuleProps)( // S_OK or error.
  358. LPCWSTR  szName,  // [IN] If not NULL, the name to set.
  359. const GUID *ppid, // [IN] If not NULL, the GUID to set.
  360. LCID lcid) PURE;  // [IN] If not -1, the lcid to set.
  361. STDMETHOD(Save)( // S_OK or error.
  362. LPCWSTR  szFile,  // [IN] The filename to save to.
  363. DWORD dwSaveFlags) PURE; // [IN] Flags for the save.
  364. STDMETHOD(SaveToStream)( // S_OK or error.
  365. IStream  *pIStream, // [IN] A writable stream to save to.
  366. DWORD dwSaveFlags) PURE; // [IN] Flags for the save.
  367. STDMETHOD(GetSaveSize)(  // S_OK or error.
  368. CorSaveSize fSave, // [IN] cssAccurate or cssQuick.
  369. DWORD *pdwSaveSize) PURE;  // [OUT] Put the size here.
  370. STDMETHOD(Merge)( // S_OK or error.
  371. IMetaDataRegImport *pImport, // [IN] The scope to be merged.
  372. IMapToken *pIMap) PURE; // [IN] An object to receive token remap notices.
  373. STDMETHOD(DefineCustomValueAsBlob)(
  374. mdToken  tkObj, 
  375. LPCWSTR  szName, 
  376. void const *pCustomValue, 
  377. ULONG cbCustomValue, 
  378. mdCustomValue *pcv) PURE;
  379. STDMETHOD(DefineTypeDef)( // S_OK or error.
  380. LPCWSTR  szNamespace, // [IN] Namespace that the TypeDef is in. Must be 0 in '98
  381. LPCWSTR  szTypeDef, // [IN] Name of TypeDef
  382. const GUID *pguid,  // [IN] Optional clsid
  383. CLASSVERSION *pVer,  // [IN] Optional version
  384. DWORD dwTypeDefFlags,  // [IN] CustomValue flags
  385. mdToken  tkExtends, // [IN] extends this TypeDef or typeref 
  386. DWORD dwExtendsFlags,  // [IN] Extends flags
  387. mdToken  rtkImplements[], // [IN] Implements interfaces
  388. mdToken  rtkEvents[], // [IN] Events interfaces
  389. mdTypeDef *ptd) PURE;  // [OUT] Put TypeDef token here
  390. STDMETHOD(SetTypeDefProps)(  // S_OK or error.
  391. mdTypeDef td,  // [IN] The TypeDef.
  392. CLASSVERSION *pVer,  // [IN] Optional version.
  393. DWORD dwTypeDefFlags,  // [IN] TypeDef flags.
  394. mdToken  tkExtends, // [IN] Base TypeDef or TypeRef.
  395. DWORD dwExtendsFlags,  // [IN] Extends flags.
  396. mdToken  rtkImplements[], // [IN] Implemented interfaces.
  397. mdToken  rtkEvents[]) PURE; // [IN] Event interfaces.
  398. STDMETHOD(SetClassSvcsContext)(mdTypeDef td, DWORD dwClassActivateAttr, DWORD dwClassThreadAttr,
  399. DWORD dwXactionAttr, DWORD dwSynchAttr) PURE;
  400. STDMETHOD(DefineTypeRefByGUID)(  // S_OK or error.    
  401. GUID *pguid,  // [IN] The Type's GUID.    
  402. mdTypeRef *ptr) PURE;  // [OUT] Put TypeRef token here.
  403. STDMETHOD(SetModuleReg)(DWORD dwModuleRegAttr, const GUID *pguid) PURE;
  404. STDMETHOD(SetClassReg)(mdTypeDef td, LPCWSTR szProgID,
  405. LPCWSTR szVIProgID, LPCWSTR szIconURL, ULONG ulIconResource, LPCWSTR szSmallIconURL,
  406. ULONG ulSmallIconResource, LPCWSTR szDefaultDispName) PURE;
  407. STDMETHOD(SetIfaceReg)(mdTypeDef td, DWORD dwIfaceSvcs, const GUID *proxyStub) PURE;
  408. STDMETHOD(SetCategoryImpl)(mdTypeDef td, GUID rGuidCoCatImpl[], GUID rGuidCoCatReqd[]) PURE;
  409. STDMETHOD(SetRedirectProgID)(mdTypeDef td, LPCWSTR rszRedirectProgID[]) PURE;
  410. STDMETHOD(SetMimeTypeImpl)(mdTypeDef td, LPCWSTR rszMimeType[]) PURE;
  411. STDMETHOD(SetFormatImpl)( // S_OK or error.
  412. mdTypeDef td,  // [IN] The TypeDef.
  413. LPCWSTR  rszFormatSupported[], // [IN] If not 0, array of supported formats. 0 for EOL.
  414. LPCWSTR  rszFormatConvertsFrom[],// [IN] If not 0, array of ConvertsFrom values.  "
  415. LPCWSTR  rszFormatConvertsTo[], // [IN] If not 0, array of ConvertsTo values.  "
  416. LPCWSTR  rszFormatDefault[],  // [IN] If not 0, array of Default format. Only one item.
  417. LPCWSTR  rszFileExt[], // [IN] If not 0, array of file extensions.   0 for EOL.
  418. LPCWSTR  rszFileType[]) PURE; // [IN] If not 0, array of file types.  "
  419. STDMETHOD(SetRoleCheck)( // S_OK or error.
  420. mdToken  tk,  // [IN] Object to place role on.
  421. LPCWSTR  rszName[], // [IN] Name for the role.
  422. DWORD rdwRoleFlags[]) PURE; // [IN] Flags for new role.
  423. STDMETHOD(SetHandler)( // S_OK.
  424. IUnknown *pUnk) PURE; // [IN] The new error handler.
  425. };
  426. #endif // #if defined(_META_DATA_NO_SCOPE_) || defined(_META_DATA_SCOPE_WRAPPER_)
  427. #if !defined(_META_DATA_NO_SCOPE_)
  428. //@TODO:  $#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#
  429. // The following interface definition is being deprecated for COM+ 1.0
  430. // and beyond. Please convert to the new definition by defining _META_DATA_NO_SCOPE_
  431. // in your build.
  432. //@TODO:  $#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#
  433. #if !defined(_META_DATA_SCOPE_WRAPPER_)
  434. // {F28F419B-62CA-11d2-8F2C-00A0C9A6186D}
  435. extern const GUID DECLSPEC_SELECT_ANY IID_IMetaDataRegEmit = 
  436. { 0xf28f419b, 0x62ca, 0x11d2, { 0x8f, 0x2c, 0x0, 0xa0, 0xc9, 0xa6, 0x18, 0x6d } };
  437. #endif
  438. #undef INTERFACE
  439. #if defined(_META_DATA_SCOPE_WRAPPER_)
  440. #define INTERFACE IMetaDataRegEmitOld
  441. #else
  442. #define INTERFACE IMetaDataRegEmit
  443. #endif
  444. DECLARE_INTERFACE_(INTERFACE, IUnknown)
  445. {
  446. STDMETHOD(DefineScope)(  // S_OK or error.
  447. DWORD dwCreateFlags, // [IN] Flags on the create.
  448. mdScope *pscope) PURE; // [OUT] return scope here.
  449. STDMETHOD(SetModuleProps)( // S_OK or error.
  450. mdScope  scope, // [IN] scope for which to set props.
  451. LPCWSTR  szName,  // [IN] If not NULL, the name to set.
  452. const GUID *ppid, // [IN] If not NULL, the GUID to set.
  453. LCID lcid) PURE;  // [IN] If not -1, the lcid to set.
  454. STDMETHOD(Save)( // S_OK or error.
  455. mdScope  es,  // [IN] The scope to save.
  456. LPCWSTR  szFile,  // [IN] The filename to save to.
  457. DWORD dwSaveFlags) PURE; // [IN] Flags for the save.
  458. STDMETHOD(SaveToStream)( // S_OK or error.
  459. mdScope  es,  // [IN] The scope to save.
  460. IStream  *pIStream, // [IN] A writable stream to save to.
  461. DWORD dwSaveFlags) PURE; // [IN] Flags for the save.
  462. STDMETHOD(GetSaveSize)(  // S_OK or error.
  463. mdScope  es,  // [IN] The scope to query.
  464. CorSaveSize fSave, // [IN] cssAccurate or cssQuick.
  465. DWORD *pdwSaveSize) PURE;  // [OUT] Put the size here.
  466. STDMETHOD_(void,Close)(  // S_OK or error.
  467. mdScope  scope) PURE; // [IN] The scope to close.
  468. STDMETHOD(Merge)( // S_OK or error.
  469. mdScope  scEmit,  // [IN] The scope to merge into.
  470. mdScope  scImport, // [IN] The scope to be merged.
  471. IMapToken *pIMap) PURE; // [IN] An object to receive token remap notices.
  472. STDMETHOD(DefineCustomValueAsBlob)(mdScope es, mdToken tkObj, LPCWSTR szName, 
  473. void const *pCustomValue, ULONG cbCustomValue, mdCustomValue *pcv) PURE;
  474. STDMETHOD(DefineTypeDef)( // S_OK or error.
  475. mdScope  es,  // [IN] Emit scope
  476. LPCWSTR  szNamespace, // [IN] Namespace that the TypeDef is in. Must be 0 in '98
  477. LPCWSTR  szTypeDef, // [IN] Name of TypeDef
  478. const GUID *pguid,  // [IN] Optional clsid
  479. CLASSVERSION *pVer,  // [IN] Optional version
  480. DWORD dwTypeDefFlags,  // [IN] CustomValue flags
  481. mdToken  tkExtends, // [IN] extends this TypeDef or typeref 
  482. DWORD dwExtendsFlags,  // [IN] Extends flags
  483. mdToken  rtkImplements[], // [IN] Implements interfaces
  484. mdToken  rtkEvents[], // [IN] Events interfaces
  485. mdTypeDef *ptd) PURE;  // [OUT] Put TypeDef token here
  486. STDMETHOD(SetTypeDefProps)(  // S_OK or error.
  487. mdScope  es,  // [IN] The emit scope.
  488. mdTypeDef td,  // [IN] The TypeDef.
  489. CLASSVERSION *pVer,  // [IN] Optional version.
  490. DWORD dwTypeDefFlags,  // [IN] TypeDef flags.
  491. mdToken  tkExtends, // [IN] Base TypeDef or TypeRef.
  492. DWORD dwExtendsFlags,  // [IN] Extends flags.
  493. mdToken  rtkImplements[], // [IN] Implemented interfaces.
  494. mdToken  rtkEvents[]) PURE; // [IN] Event interfaces.
  495. STDMETHOD(SetClassSvcsContext)(mdScope es, mdTypeDef td, DWORD dwClassActivateAttr, DWORD dwClassThreadAttr,
  496. DWORD dwXactionAttr, DWORD dwSynchAttr) PURE;
  497. STDMETHOD(DefineTypeRefByGUID)(  // S_OK or error.    
  498. mdScope  sc,  // [IN] The emit scope.     
  499. GUID *pguid,  // [IN] The Type's GUID.    
  500. mdTypeRef *ptr) PURE;  // [OUT] Put TypeRef token here.
  501. STDMETHOD(SetModuleReg)(mdScope es, DWORD dwModuleRegAttr, const GUID *pguid) PURE;
  502. STDMETHOD(SetClassReg)(mdScope es, mdTypeDef td, LPCWSTR szProgID,
  503. LPCWSTR szVIProgID, LPCWSTR szIconURL, ULONG ulIconResource, LPCWSTR szSmallIconURL,
  504. ULONG ulSmallIconResource, LPCWSTR szDefaultDispName) PURE;
  505. STDMETHOD(SetIfaceReg)(mdScope es, mdTypeDef td, DWORD dwIfaceSvcs, const GUID *proxyStub) PURE;
  506. STDMETHOD(SetCategoryImpl)(mdScope es, mdTypeDef td, GUID rGuidCoCatImpl[], GUID rGuidCoCatReqd[]) PURE;
  507. STDMETHOD(SetRedirectProgID)(mdScope es, mdTypeDef td, LPCWSTR rszRedirectProgID[]) PURE;
  508. STDMETHOD(SetMimeTypeImpl)(mdScope es, mdTypeDef td, LPCWSTR rszMimeType[]) PURE;
  509. STDMETHOD(SetFormatImpl)( // S_OK or error.
  510. mdScope  es,  // [IN] The emit scope.
  511. mdTypeDef td,  // [IN] The TypeDef.
  512. LPCWSTR  rszFormatSupported[], // [IN] If not 0, array of supported formats. 0 for EOL.
  513. LPCWSTR  rszFormatConvertsFrom[],// [IN] If not 0, array of ConvertsFrom values.  "
  514. LPCWSTR  rszFormatConvertsTo[], // [IN] If not 0, array of ConvertsTo values.  "
  515. LPCWSTR  rszFormatDefault[],  // [IN] If not 0, array of Default format. Only one item.
  516. LPCWSTR  rszFileExt[], // [IN] If not 0, array of file extensions.   0 for EOL.
  517. LPCWSTR  rszFileType[]) PURE; // [IN] If not 0, array of file types.  "
  518. STDMETHOD(SetRoleCheck)( // S_OK or error.
  519. mdScope  es,  // [IN] Emit scope.
  520. mdToken  tk,  // [IN] Object to place role on.
  521. LPCWSTR  rszName[], // [IN] Name for the role.
  522. DWORD rdwRoleFlags[]) PURE; // [IN] Flags for new role.
  523. STDMETHOD(SetHandler)( // S_OK.
  524. mdScope  sc,  // [IN] The scope.
  525. IUnknown *pUnk) PURE; // [IN] The new error handler.
  526. };
  527. #endif // !defined(_META_DATA_NO_SCOPE_)
  528. //-------------------------------------
  529. //--- IMetaDataRegImport
  530. //-------------------------------------
  531. #if defined(_META_DATA_NO_SCOPE_) || defined(_META_DATA_SCOPE_WRAPPER_)
  532. // {4398B4FD-7399-11d2-9771-00A0C9B4D50C}
  533. extern const GUID DECLSPEC_SELECT_ANY IID_IMetaDataRegImport = 
  534. { 0x4398b4fd, 0x7399, 0x11d2, { 0x97, 0x71, 0x0, 0xa0, 0xc9, 0xb4, 0xd5, 0xc } };
  535. // {F28F419A-62CA-11d2-8F2C-00A0C9A6186D}
  536. extern const GUID DECLSPEC_SELECT_ANY IID_IMetaDataRegImportOld = 
  537. { 0xf28f419a, 0x62ca, 0x11d2, { 0x8f, 0x2c, 0x0, 0xa0, 0xc9, 0xa6, 0x18, 0x6d } };
  538. #undef INTERFACE
  539. #define INTERFACE IMetaDataRegImport
  540. DECLARE_INTERFACE_(IMetaDataRegImport, IUnknown)
  541. {
  542. STDMETHOD_(void, CloseEnum)(HCORENUM hEnum) PURE;
  543. STDMETHOD(CountEnum)(HCORENUM hEnum, ULONG *pulCount) PURE;
  544. STDMETHOD(ResetEnum)(HCORENUM hEnum, ULONG ulPos) PURE;
  545. STDMETHOD(EnumTypeDefs)(HCORENUM *phEnum, mdTypeDef rTypeDefs[],
  546. ULONG cMax, ULONG *pcTypeDefs) PURE;
  547. STDMETHOD(EnumInterfaceImpls)(HCORENUM *phEnum, mdTypeDef td,
  548. mdInterfaceImpl rImpls[], ULONG cMax,
  549. ULONG* pcImpls) PURE;
  550. STDMETHOD(EnumTypeRefs)(HCORENUM *phEnum, mdTypeRef rTypeRefs[],
  551. ULONG cMax, ULONG* pcTypeRefs) PURE;
  552. STDMETHOD(EnumCustomValues)(HCORENUM *phEnum, mdToken tk,
  553. mdCustomValue rCustomValues[], ULONG cMax,
  554. ULONG* pcCustomValues) PURE;
  555. STDMETHOD(EnumResources)(HCORENUM *phEnum, mdResource rResources[],
  556. ULONG cMax, ULONG* pcResources) PURE;
  557. STDMETHOD(EnumCategoryImpls)(HCORENUM *phEnum, mdTypeDef td, mdCocatImpl rCocatImpls[],
  558. ULONG cMax, ULONG* pcCocatImpls) PURE;
  559. STDMETHOD(EnumRedirectProgIDs)(HCORENUM *phEnum, mdTypeDef td, mdProgID rRedirectProgIDs[],
  560. ULONG cMax, ULONG* pcRedirectProgIDs) PURE;
  561. STDMETHOD(EnumMimeTypeImpls)(HCORENUM *phEnum, mdTypeDef td, mdMimeTypeImpl rMimeTypeImpls[],
  562. ULONG cMax, ULONG* pcMimeTypeImpls) PURE;
  563. STDMETHOD(EnumFormatImpls)(HCORENUM *phEnum, mdTypeDef td, mdFormatImpl rFormatImpls[],
  564. ULONG cMax, ULONG* pcFormatImpls) PURE;
  565. STDMETHOD(EnumRoleChecks)( // S_OK or error.
  566. HCORENUM *phEnum, // [OUT] Return enumerator.
  567. mdToken  tk,  // [IN] Object to enumerate roles for.
  568. mdRoleCheck rRoleChecks[], // [OUT] Place cMax tokens here.
  569. ULONG cMax, // [IN] Max size of rRoleChecks.
  570. ULONG *pcRoleChecks) PURE; // [Out] Place count of returned role checks here.
  571. STDMETHOD(FindTypeDefByName)( // S_OK or error.
  572. LPCWSTR  szNamespace, // [IN] Namespace with the Type.
  573. LPCWSTR  szTypeDef, // [IN] Name of the Type.
  574. mdTypeDef *ptd) PURE;  // [OUT] Put the TypeDef token here.
  575. STDMETHOD(FindTypeDefByGUID)( // S_OK or error.
  576. const GUID *pguid,  // [IN] The GUID of the Type.
  577. mdTypeDef *ptd) PURE;  // [OUT] Put the TypeDef token here.
  578. STDMETHOD(FindCustomValue)(mdToken tk, LPCWSTR szName, mdCustomValue *pcv, 
  579. DWORD *pdwValueType) PURE;
  580. STDMETHOD(GetScopeProps)(LPWSTR szName, ULONG cchName, ULONG *pchName,
  581. GUID *ppid, GUID *pmvid, LCID *pLcid) PURE;
  582. STDMETHOD(GetModuleFromScope)( // S_OK.
  583. mdModule *pmd) PURE;  // [OUT] Put mdModule token here.
  584. STDMETHOD(GetTypeDefProps)(  // S_OK or error.
  585. mdTypeDef td,  // [IN] TypeDef token for inquiry.
  586. LPWSTR szNamespace, // [OUT] Put Namespace here.
  587. ULONG cchNamespace, // [IN] size of Namespace buffer in wide chars.
  588. ULONG *pchNamespace, // [OUT] put size of Namespace (wide chars) here.
  589. LPWSTR szTypeDef, // [OUT] Put name here.
  590. ULONG cchTypeDef,  // [IN] size of name buffer in wide chars.
  591. ULONG *pchTypeDef, // [OUT] put size of name (wide chars) here.
  592. GUID *pguid,  // [OUT] Put clsid here.
  593. CLASSVERSION *pver,  // [OUT] Put version here.
  594. DWORD *pdwTypeDefFlags, // [OUT] Put flags here.
  595. mdToken  *ptkExtends, // [OUT] Put base class TypeDef/TypeRef here.
  596. DWORD *pdwExtendsFlags) PURE; // [OUT] Put extends flags here.
  597. STDMETHOD(GetClassSvcsContext)(mdTypeDef td, DWORD *pdwClassActivateAttr, DWORD *pdwThreadAttr,
  598. DWORD *pdwXactonAttr, DWORD *pdwSynchAttr) PURE;
  599. STDMETHOD(GetInterfaceImplProps)( // S_OK or error.
  600. mdInterfaceImpl iiImpl,  // [IN] InterfaceImpl token.
  601. mdTypeDef *pClass, // [OUT] Put implementing class token here.
  602. mdToken  *ptkIface, // [OUT] Put implemented interface token here.
  603. DWORD *pdwFlags) PURE; // [OUT] Put implementation flags here.
  604. STDMETHOD(GetCustomValueProps)(mdCustomValue cv, LPWSTR szName, ULONG cchName,
  605. ULONG *pchName, DWORD *pdwValueType) PURE;
  606. STDMETHOD(GetCustomValueAsBlob)(mdCustomValue cv, void const **ppBlob, ULONG *pcbSize) PURE;
  607. STDMETHOD(GetTypeRefProps)(mdTypeRef tr, LPWSTR szTypeRef,
  608. ULONG cchTypeRef, ULONG *pchTypeRef, GUID *pGuid, DWORD *pdwBind) PURE;
  609. STDMETHOD(GetModuleRegProps)(DWORD *pModuleRegAttr, GUID *pguid) PURE;
  610. STDMETHOD(GetClassRegProps)(mdTypeDef td, 
  611. LPWSTR szProgid, ULONG cchProgid, ULONG *pchProgid, 
  612. LPWSTR szVIProgid, ULONG cchVIProgid, ULONG *pchVIProgid, 
  613. LPWSTR szIconURL, ULONG cchIconURL, ULONG *pchIconURL, ULONG *pIconResource, 
  614. LPWSTR szSmallIconURL, ULONG cchSmallIconURL, ULONG *pchSmallIconURL, ULONG *pSmallIconResource, 
  615. LPWSTR szDefaultDispname, ULONG cchDefaultDispname, ULONG *pchDefaultDispname) PURE;
  616. STDMETHOD(GetIfaceRegProps)(mdTypeDef td, DWORD *pdwIfaceSvcs, GUID *pProxyStub) PURE;
  617. STDMETHOD(GetResourceProps)(mdResource rs, LPWSTR szURL, ULONG cchURL, ULONG *pchURL) PURE;
  618. STDMETHOD(GetCategoryImplProps)(mdCocatImpl cocat, GUID *pguid, DWORD *pdwCocatImplAttr) PURE;
  619. STDMETHOD(GetRedirectProgIDProps)(mdProgID progid, 
  620. LPWSTR szProgID, ULONG cchProgID, ULONG *pchProgID) PURE;
  621. STDMETHOD(GetMimeTypeImplProps)(mdMimeTypeImpl mime, 
  622. LPWSTR szMime, ULONG cchMime, ULONG *pchMime) PURE;
  623. STDMETHOD(GetFormatImplProps)( mdFormatImpl format, 
  624. LPWSTR szFormat, ULONG cchFormat, ULONG *pchFormat, 
  625. DWORD *pdwRegFormatAttr) PURE;
  626. STDMETHOD(GetRoleCheckProps)( // S_OK or error.
  627. mdRoleCheck rc,  // [IN] The role check to get props for.
  628. LPWSTR szName,  // [OUT] Buffer for name.
  629. ULONG cchName, // [IN] Max characters for szName.
  630. ULONG *pchName, // [OUT] Available string chars for szName.
  631. DWORD *pdwRoleFlags) PURE; // [OUT] Role flags go here.
  632. STDMETHOD(ResolveTypeRef)(mdTypeRef tr, REFIID riid, IUnknown **ppIScope, mdTypeDef *ptd) PURE;
  633. };
  634. #endif // defined(_META_DATA_NO_SCOPE_) || defined(_META_DATA_SCOPE_WRAPPER_)
  635. #if !defined(_META_DATA_NO_SCOPE_)
  636. //@TODO:  $#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#
  637. // The following interface definition is being deprecated for COM+ 1.0
  638. // and beyond. It still exists to make porting to the new api easier. If
  639. // you need to, define _META_DATA_NO_SCOPE_ to get the old behavior.
  640. //@TODO:  $#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#
  641. #if !defined(_META_DATA_SCOPE_WRAPPER_)
  642. // {F28F419A-62CA-11d2-8F2C-00A0C9A6186D}
  643. extern const GUID DECLSPEC_SELECT_ANY IID_IMetaDataRegImport = 
  644. { 0xf28f419a, 0x62ca, 0x11d2, { 0x8f, 0x2c, 0x0, 0xa0, 0xc9, 0xa6, 0x18, 0x6d } };
  645. #endif
  646. #undef INTERFACE
  647. #if defined(_META_DATA_SCOPE_WRAPPER_)
  648. #define INTERFACE IMetaDataRegImportOld
  649. #else
  650. #define INTERFACE IMetaDataRegImport
  651. #endif
  652. DECLARE_INTERFACE_(INTERFACE, IUnknown)
  653. {
  654. STDMETHOD(OpenScope)(LPCWSTR szScope, DWORD dwOpenFlags, mdScope *pscope) PURE;
  655. STDMETHOD(OpenScopeOnStream)(IStream *pIStream, DWORD dwOpenFlags, mdScope *psc) PURE;
  656. STDMETHOD(OpenScopeOnMemory)(LPCVOID pData, ULONG cbData, mdScope *psc) PURE;
  657. STDMETHOD_(void,Close)(mdScope scope) PURE;
  658. STDMETHOD_(void, CloseEnum)(mdScope scope, HCORENUM hEnum) PURE;
  659. STDMETHOD(CountEnum)(mdScope scope, HCORENUM hEnum, ULONG *pulCount) PURE;
  660. STDMETHOD(ResetEnum)(mdScope scope, HCORENUM hEnum, ULONG ulPos) PURE;
  661. STDMETHOD(EnumTypeDefs)(mdScope scope, HCORENUM *phEnum, mdTypeDef rTypeDefs[],
  662. ULONG cMax, ULONG *pcTypeDefs) PURE;
  663. STDMETHOD(EnumInterfaceImpls)(mdScope scope, HCORENUM *phEnum, mdTypeDef td,
  664. mdInterfaceImpl rImpls[], ULONG cMax,
  665. ULONG* pcImpls) PURE;
  666. STDMETHOD(EnumTypeRefs)(mdScope scope, HCORENUM *phEnum, mdTypeRef rTypeRefs[],
  667. ULONG cMax, ULONG* pcTypeRefs) PURE;
  668. STDMETHOD(EnumCustomValues)(mdScope scope, HCORENUM *phEnum, mdToken tk,
  669. mdCustomValue rCustomValues[], ULONG cMax,
  670. ULONG* pcCustomValues) PURE;
  671. STDMETHOD(EnumResources)(mdScope scope, HCORENUM *phEnum, mdResource rResources[],
  672. ULONG cMax, ULONG* pcResources) PURE;
  673. STDMETHOD(EnumCategoryImpls)(mdScope scope, HCORENUM *phEnum, mdTypeDef td, mdCocatImpl rCocatImpls[],
  674. ULONG cMax, ULONG* pcCocatImpls) PURE;
  675. STDMETHOD(EnumRedirectProgIDs)(mdScope scope, HCORENUM *phEnum, mdTypeDef td, mdProgID rRedirectProgIDs[],
  676. ULONG cMax, ULONG* pcRedirectProgIDs) PURE;
  677. STDMETHOD(EnumMimeTypeImpls)(mdScope scope, HCORENUM *phEnum, mdTypeDef td, mdMimeTypeImpl rMimeTypeImpls[],
  678. ULONG cMax, ULONG* pcMimeTypeImpls) PURE;
  679. STDMETHOD(EnumFormatImpls)(mdScope scope, HCORENUM *phEnum, mdTypeDef td, mdFormatImpl rFormatImpls[],
  680. ULONG cMax, ULONG* pcFormatImpls) PURE;
  681. STDMETHOD(EnumRoleChecks)( // S_OK or error.
  682. mdScope  scope, // [IN] Import scope.
  683. HCORENUM *phEnum, // [OUT] Return enumerator.
  684. mdToken  tk,  // [IN] Object to enumerate roles for.
  685. mdRoleCheck rRoleChecks[], // [OUT] Place cMax tokens here.
  686. ULONG cMax, // [IN] Max size of rRoleChecks.
  687. ULONG *pcRoleChecks) PURE; // [Out] Place count of returned role checks here.
  688. STDMETHOD(FindTypeDefByName)( // S_OK or error.
  689. mdScope  scope, // [IN] The scope to search.
  690. LPCWSTR  szNamespace, // [IN] Namespace with the Type.
  691. LPCWSTR  szTypeDef, // [IN] Name of the Type.
  692. mdTypeDef *ptd) PURE;  // [OUT] Put the TypeDef token here.
  693. STDMETHOD(FindTypeDefByGUID)( // S_OK or error.
  694. mdScope  scope, // [IN] The scope to search.
  695. const GUID *pguid,  // [IN] The GUID of the Type.
  696. mdTypeDef *ptd) PURE;  // [OUT] Put the TypeDef token here.
  697. STDMETHOD(FindCustomValue)(mdScope scope, mdToken tk, LPCWSTR szName, mdCustomValue *pcv, 
  698. DWORD *pdwValueType) PURE;
  699. STDMETHOD(GetScopeProps)(mdScope scope, LPWSTR szName, ULONG cchName, ULONG *pchName,
  700. GUID *ppid, GUID *pmvid, LCID *pLcid) PURE;
  701. STDMETHOD(GetModuleFromScope)( // S_OK.
  702. mdScope  scope, // [IN] The scope.
  703. mdModule *pmd) PURE;  // [OUT] Put mdModule token here.
  704. STDMETHOD(GetTypeDefProps)(  // S_OK or error.
  705. mdScope  scope, // [IN] The import scope.
  706. mdTypeDef td,  // [IN] TypeDef token for inquiry.
  707. LPWSTR szNamespace, // [OUT] Put Namespace here.
  708. ULONG cchNamespace, // [IN] size of Namespace buffer in wide chars.
  709. ULONG *pchNamespace, // [OUT] put size of Namespace (wide chars) here.
  710. LPWSTR szTypeDef, // [OUT] Put name here.
  711. ULONG cchTypeDef,  // [IN] size of name buffer in wide chars.
  712. ULONG *pchTypeDef, // [OUT] put size of name (wide chars) here.
  713. GUID *pguid,  // [OUT] Put clsid here.
  714. CLASSVERSION *pver,  // [OUT] Put version here.
  715. DWORD *pdwTypeDefFlags, // [OUT] Put flags here.
  716. mdToken  *ptkExtends, // [OUT] Put base class TypeDef/TypeRef here.
  717. DWORD *pdwExtendsFlags) PURE; // [OUT] Put extends flags here.
  718. STDMETHOD(GetClassSvcsContext)(mdScope es, mdTypeDef td, DWORD *pdwClassActivateAttr, DWORD *pdwThreadAttr,
  719. DWORD *pdwXactonAttr, DWORD *pdwSynchAttr) PURE;
  720. STDMETHOD(GetInterfaceImplProps)( // S_OK or error.
  721. mdScope  scope, // [IN] The scope.
  722. mdInterfaceImpl iiImpl,  // [IN] InterfaceImpl token.
  723. mdTypeDef *pClass, // [OUT] Put implementing class token here.
  724. mdToken  *ptkIface, // [OUT] Put implemented interface token here.
  725. DWORD *pdwFlags) PURE; // [OUT] Put implementation flags here.
  726. STDMETHOD(GetCustomValueProps)(mdScope scope, mdCustomValue cv, LPWSTR szName, ULONG cchName,
  727. ULONG *pchName, DWORD *pdwValueType) PURE;
  728. STDMETHOD(GetCustomValueAsBlob)(mdScope scope, mdCustomValue cv, void const **ppBlob, ULONG *pcbSize) PURE;
  729. STDMETHOD(GetTypeRefProps)(mdScope scope, mdTypeRef tr, LPWSTR szTypeRef,
  730. ULONG cchTypeRef, ULONG *pchTypeRef, GUID *pGuid, DWORD *pdwBind) PURE;
  731. STDMETHOD(GetModuleRegProps)(mdScope scope, DWORD *pModuleRegAttr, GUID *pguid) PURE;
  732. STDMETHOD(GetClassRegProps)(mdScope scope, mdTypeDef td, 
  733. LPWSTR szProgid, ULONG cchProgid, ULONG *pchProgid, 
  734. LPWSTR szVIProgid, ULONG cchVIProgid, ULONG *pchVIProgid, 
  735. LPWSTR szIconURL, ULONG cchIconURL, ULONG *pchIconURL, ULONG *pIconResource, 
  736. LPWSTR szSmallIconURL, ULONG cchSmallIconURL, ULONG *pchSmallIconURL, ULONG *pSmallIconResource, 
  737. LPWSTR szDefaultDispname, ULONG cchDefaultDispname, ULONG *pchDefaultDispname) PURE;
  738. STDMETHOD(GetIfaceRegProps)(mdScope scope, mdTypeDef td, DWORD *pdwIfaceSvcs, GUID *pProxyStub) PURE;
  739. STDMETHOD(GetResourceProps)(mdScope scope, mdResource rs, LPWSTR szURL, ULONG cchURL, ULONG *pchURL) PURE;
  740. STDMETHOD(GetCategoryImplProps)(mdScope scope, mdCocatImpl cocat, GUID *pguid, DWORD *pdwCocatImplAttr) PURE;
  741. STDMETHOD(GetRedirectProgIDProps)(mdScope scope, mdProgID progid, 
  742. LPWSTR szProgID, ULONG cchProgID, ULONG *pchProgID) PURE;
  743. STDMETHOD(GetMimeTypeImplProps)(mdScope scope, mdMimeTypeImpl mime, 
  744. LPWSTR szMime, ULONG cchMime, ULONG *pchMime) PURE;
  745. STDMETHOD(GetFormatImplProps)(mdScope scope, mdFormatImpl format, 
  746. LPWSTR szFormat, ULONG cchFormat, ULONG *pchFormat, 
  747. DWORD *pdwRegFormatAttr) PURE;
  748. STDMETHOD(GetRoleCheckProps)( // S_OK or error.
  749. mdScope  scope, // [IN] Import scope.
  750. mdRoleCheck rc,  // [IN] The role check to get props for.
  751. LPWSTR szName,  // [OUT] Buffer for name.
  752. ULONG cchName, // [IN] Max characters for szName.
  753. ULONG *pchName, // [OUT] Available string chars for szName.
  754. DWORD *pdwRoleFlags) PURE; // [OUT] Role flags go here.
  755. STDMETHOD(ResolveTypeRef)(mdScope is, mdTypeRef tr, mdScope *pes, mdTypeDef *ptd) PURE;
  756. };
  757. #endif // _META_DATA_NO_SCOPE_
  758. // Return to default padding.
  759. #include <poppack.h>
  760. #ifdef __cplusplus
  761. }
  762. #endif
  763. #endif // _CORREG_H_
  764. // EOF =======================================================================