1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
|
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//
#ifndef _PROFILER_METADATA_EMIT_VALIDATOR_H_
#define _PROFILER_METADATA_EMIT_VALIDATOR_H_
// This is a wrapper over IMetaDataEmit interfaces to prevent profilers from making changes the runtime can't support
// Annoyingly, it is legal to QI IMetaDataImport from the emitter and vice-versa, so the wrapper also proxies those interfaces
class ProfilerMetadataEmitValidator : public IMetaDataEmit2, public IMetaDataAssemblyEmit, public IMetaDataImport2, public IMetaDataAssemblyImport
{
public:
ProfilerMetadataEmitValidator(IMetaDataEmit* pInnerEmit);
//IUnknown
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppInterface);
virtual ULONG STDMETHODCALLTYPE AddRef();
virtual ULONG STDMETHODCALLTYPE Release();
//IMetaDataEmit
virtual HRESULT STDMETHODCALLTYPE SetModuleProps(
LPCWSTR szName);
virtual HRESULT STDMETHODCALLTYPE Save(
LPCWSTR szFile,
DWORD dwSaveFlags);
virtual HRESULT STDMETHODCALLTYPE SaveToStream(
IStream *pIStream,
DWORD dwSaveFlags);
virtual HRESULT STDMETHODCALLTYPE GetSaveSize(
CorSaveSize fSave,
DWORD *pdwSaveSize);
virtual HRESULT STDMETHODCALLTYPE DefineTypeDef(
LPCWSTR szTypeDef,
DWORD dwTypeDefFlags,
mdToken tkExtends,
mdToken rtkImplements[],
mdTypeDef *ptd);
virtual HRESULT STDMETHODCALLTYPE DefineNestedType(
LPCWSTR szTypeDef,
DWORD dwTypeDefFlags,
mdToken tkExtends,
mdToken rtkImplements[],
mdTypeDef tdEncloser,
mdTypeDef *ptd);
virtual HRESULT STDMETHODCALLTYPE SetHandler(
IUnknown *pUnk);
virtual HRESULT STDMETHODCALLTYPE DefineMethod(
mdTypeDef td,
LPCWSTR szName,
DWORD dwMethodFlags,
PCCOR_SIGNATURE pvSigBlob,
ULONG cbSigBlob,
ULONG ulCodeRVA,
DWORD dwImplFlags,
mdMethodDef *pmd);
virtual HRESULT STDMETHODCALLTYPE DefineMethodImpl(
mdTypeDef td,
mdToken tkBody,
mdToken tkDecl);
virtual HRESULT STDMETHODCALLTYPE DefineTypeRefByName(
mdToken tkResolutionScope,
LPCWSTR szName,
mdTypeRef *ptr);
virtual HRESULT STDMETHODCALLTYPE DefineImportType(
IMetaDataAssemblyImport *pAssemImport,
const void *pbHashValue,
ULONG cbHashValue,
IMetaDataImport *pImport,
mdTypeDef tdImport,
IMetaDataAssemblyEmit *pAssemEmit,
mdTypeRef *ptr);
virtual HRESULT STDMETHODCALLTYPE DefineMemberRef(
mdToken tkImport,
LPCWSTR szName,
PCCOR_SIGNATURE pvSigBlob,
ULONG cbSigBlob,
mdMemberRef *pmr);
virtual HRESULT STDMETHODCALLTYPE DefineImportMember(
IMetaDataAssemblyImport *pAssemImport,
const void *pbHashValue,
ULONG cbHashValue,
IMetaDataImport *pImport,
mdToken mbMember,
IMetaDataAssemblyEmit *pAssemEmit,
mdToken tkParent,
mdMemberRef *pmr);
virtual HRESULT STDMETHODCALLTYPE DefineEvent(
mdTypeDef td,
LPCWSTR szEvent,
DWORD dwEventFlags,
mdToken tkEventType,
mdMethodDef mdAddOn,
mdMethodDef mdRemoveOn,
mdMethodDef mdFire,
mdMethodDef rmdOtherMethods[],
mdEvent *pmdEvent);
virtual HRESULT STDMETHODCALLTYPE SetClassLayout(
mdTypeDef td,
DWORD dwPackSize,
COR_FIELD_OFFSET rFieldOffsets[],
ULONG ulClassSize);
virtual HRESULT STDMETHODCALLTYPE DeleteClassLayout(
mdTypeDef td);
virtual HRESULT STDMETHODCALLTYPE SetFieldMarshal(
mdToken tk,
PCCOR_SIGNATURE pvNativeType,
ULONG cbNativeType);
virtual HRESULT STDMETHODCALLTYPE DeleteFieldMarshal(
mdToken tk);
virtual HRESULT STDMETHODCALLTYPE DefinePermissionSet(
mdToken tk,
DWORD dwAction,
void const *pvPermission,
ULONG cbPermission,
mdPermission *ppm);
virtual HRESULT STDMETHODCALLTYPE SetRVA(
mdMethodDef md,
ULONG ulRVA);
virtual HRESULT STDMETHODCALLTYPE GetTokenFromSig(
PCCOR_SIGNATURE pvSig,
ULONG cbSig,
mdSignature *pmsig);
virtual HRESULT STDMETHODCALLTYPE DefineModuleRef(
LPCWSTR szName,
mdModuleRef *pmur);
virtual HRESULT STDMETHODCALLTYPE SetParent(
mdMemberRef mr,
mdToken tk);
virtual HRESULT STDMETHODCALLTYPE GetTokenFromTypeSpec(
PCCOR_SIGNATURE pvSig,
ULONG cbSig,
mdTypeSpec *ptypespec);
virtual HRESULT STDMETHODCALLTYPE SaveToMemory(
void *pbData,
ULONG cbData);
virtual HRESULT STDMETHODCALLTYPE DefineUserString(
LPCWSTR szString,
ULONG cchString,
mdString *pstk);
virtual HRESULT STDMETHODCALLTYPE DeleteToken(
mdToken tkObj);
virtual HRESULT STDMETHODCALLTYPE SetMethodProps(
mdMethodDef md,
DWORD dwMethodFlags,
ULONG ulCodeRVA,
DWORD dwImplFlags);
virtual HRESULT STDMETHODCALLTYPE SetTypeDefProps(
mdTypeDef td,
DWORD dwTypeDefFlags,
mdToken tkExtends,
mdToken rtkImplements[]);
virtual HRESULT STDMETHODCALLTYPE SetEventProps(
mdEvent ev,
DWORD dwEventFlags,
mdToken tkEventType,
mdMethodDef mdAddOn,
mdMethodDef mdRemoveOn,
mdMethodDef mdFire,
mdMethodDef rmdOtherMethods[]);
virtual HRESULT STDMETHODCALLTYPE SetPermissionSetProps(
mdToken tk,
DWORD dwAction,
void const *pvPermission,
ULONG cbPermission,
mdPermission *ppm);
virtual HRESULT STDMETHODCALLTYPE DefinePinvokeMap(
mdToken tk,
DWORD dwMappingFlags,
LPCWSTR szImportName,
mdModuleRef mrImportDLL);
virtual HRESULT STDMETHODCALLTYPE SetPinvokeMap(
mdToken tk,
DWORD dwMappingFlags,
LPCWSTR szImportName,
mdModuleRef mrImportDLL);
virtual HRESULT STDMETHODCALLTYPE DeletePinvokeMap(
mdToken tk);
// New CustomAttribute functions.
virtual HRESULT STDMETHODCALLTYPE DefineCustomAttribute(
mdToken tkOwner,
mdToken tkCtor,
void const *pCustomAttribute,
ULONG cbCustomAttribute,
mdCustomAttribute *pcv);
virtual HRESULT STDMETHODCALLTYPE SetCustomAttributeValue(
mdCustomAttribute pcv,
void const *pCustomAttribute,
ULONG cbCustomAttribute);
virtual HRESULT STDMETHODCALLTYPE DefineField(
mdTypeDef td,
LPCWSTR szName,
DWORD dwFieldFlags,
PCCOR_SIGNATURE pvSigBlob,
ULONG cbSigBlob,
DWORD dwCPlusTypeFlag,
void const *pValue,
ULONG cchValue,
mdFieldDef *pmd);
virtual HRESULT STDMETHODCALLTYPE DefineProperty(
mdTypeDef td,
LPCWSTR szProperty,
DWORD dwPropFlags,
PCCOR_SIGNATURE pvSig,
ULONG cbSig,
DWORD dwCPlusTypeFlag,
void const *pValue,
ULONG cchValue,
mdMethodDef mdSetter,
mdMethodDef mdGetter,
mdMethodDef rmdOtherMethods[],
mdProperty *pmdProp);
virtual HRESULT STDMETHODCALLTYPE DefineParam(
mdMethodDef md,
ULONG ulParamSeq,
LPCWSTR szName,
DWORD dwParamFlags,
DWORD dwCPlusTypeFlag,
void const *pValue,
ULONG cchValue,
mdParamDef *ppd);
virtual HRESULT STDMETHODCALLTYPE SetFieldProps(
mdFieldDef fd,
DWORD dwFieldFlags,
DWORD dwCPlusTypeFlag,
void const *pValue,
ULONG cchValue);
virtual HRESULT STDMETHODCALLTYPE SetPropertyProps(
mdProperty pr,
DWORD dwPropFlags,
DWORD dwCPlusTypeFlag,
void const *pValue,
ULONG cchValue,
mdMethodDef mdSetter,
mdMethodDef mdGetter,
mdMethodDef rmdOtherMethods[]);
virtual HRESULT STDMETHODCALLTYPE SetParamProps(
mdParamDef pd,
LPCWSTR szName,
DWORD dwParamFlags,
DWORD dwCPlusTypeFlag,
void const *pValue,
ULONG cchValue);
virtual HRESULT STDMETHODCALLTYPE DefineSecurityAttributeSet(
mdToken tkObj,
COR_SECATTR rSecAttrs[],
ULONG cSecAttrs,
ULONG *pulErrorAttr);
virtual HRESULT STDMETHODCALLTYPE ApplyEditAndContinue(
IUnknown *pImport);
virtual HRESULT STDMETHODCALLTYPE TranslateSigWithScope(
IMetaDataAssemblyImport *pAssemImport,
const void *pbHashValue,
ULONG cbHashValue,
IMetaDataImport *import,
PCCOR_SIGNATURE pbSigBlob,
ULONG cbSigBlob,
IMetaDataAssemblyEmit *pAssemEmit,
IMetaDataEmit *emit,
PCOR_SIGNATURE pvTranslatedSig,
ULONG cbTranslatedSigMax,
ULONG *pcbTranslatedSig);
virtual HRESULT STDMETHODCALLTYPE SetMethodImplFlags(
mdMethodDef md,
DWORD dwImplFlags);
virtual HRESULT STDMETHODCALLTYPE SetFieldRVA(
mdFieldDef fd,
ULONG ulRVA);
virtual HRESULT STDMETHODCALLTYPE Merge(
IMetaDataImport *pImport,
IMapToken *pHostMapToken,
IUnknown *pHandler);
virtual HRESULT STDMETHODCALLTYPE MergeEnd();
// IMetaDataEmit2
virtual HRESULT STDMETHODCALLTYPE DefineMethodSpec(
mdToken tkParent,
PCCOR_SIGNATURE pvSigBlob,
ULONG cbSigBlob,
mdMethodSpec *pmi);
virtual HRESULT STDMETHODCALLTYPE GetDeltaSaveSize(
CorSaveSize fSave,
DWORD *pdwSaveSize);
virtual HRESULT STDMETHODCALLTYPE SaveDelta(
LPCWSTR szFile,
DWORD dwSaveFlags);
virtual HRESULT STDMETHODCALLTYPE SaveDeltaToStream(
IStream *pIStream,
DWORD dwSaveFlags);
virtual HRESULT STDMETHODCALLTYPE SaveDeltaToMemory(
void *pbData,
ULONG cbData);
virtual HRESULT STDMETHODCALLTYPE DefineGenericParam(
mdToken tk,
ULONG ulParamSeq,
DWORD dwParamFlags,
LPCWSTR szname,
DWORD reserved,
mdToken rtkConstraints[],
mdGenericParam *pgp);
virtual HRESULT STDMETHODCALLTYPE SetGenericParamProps(
mdGenericParam gp,
DWORD dwParamFlags,
LPCWSTR szName,
DWORD reserved,
mdToken rtkConstraints[]);
virtual HRESULT STDMETHODCALLTYPE ResetENCLog();
//IMetaDataAssemblyEmit
virtual HRESULT STDMETHODCALLTYPE DefineAssembly(
const void *pbPublicKey,
ULONG cbPublicKey,
ULONG ulHashAlgId,
LPCWSTR szName,
const ASSEMBLYMETADATA *pMetaData,
DWORD dwAssemblyFlags,
mdAssembly *pma);
virtual HRESULT STDMETHODCALLTYPE DefineAssemblyRef(
const void *pbPublicKeyOrToken,
ULONG cbPublicKeyOrToken,
LPCWSTR szName,
const ASSEMBLYMETADATA *pMetaData,
const void *pbHashValue,
ULONG cbHashValue,
DWORD dwAssemblyRefFlags,
mdAssemblyRef *pmdar);
virtual HRESULT STDMETHODCALLTYPE DefineFile(
LPCWSTR szName,
const void *pbHashValue,
ULONG cbHashValue,
DWORD dwFileFlags,
mdFile *pmdf);
virtual HRESULT STDMETHODCALLTYPE DefineExportedType(
LPCWSTR szName,
mdToken tkImplementation,
mdTypeDef tkTypeDef,
DWORD dwExportedTypeFlags,
mdExportedType *pmdct);
virtual HRESULT STDMETHODCALLTYPE DefineManifestResource(
LPCWSTR szName,
mdToken tkImplementation,
DWORD dwOffset,
DWORD dwResourceFlags,
mdManifestResource *pmdmr);
virtual HRESULT STDMETHODCALLTYPE SetAssemblyProps(
mdAssembly pma,
const void *pbPublicKey,
ULONG cbPublicKey,
ULONG ulHashAlgId,
LPCWSTR szName,
const ASSEMBLYMETADATA *pMetaData,
DWORD dwAssemblyFlags);
virtual HRESULT STDMETHODCALLTYPE SetAssemblyRefProps(
mdAssemblyRef ar,
const void *pbPublicKeyOrToken,
ULONG cbPublicKeyOrToken,
LPCWSTR szName,
const ASSEMBLYMETADATA *pMetaData,
const void *pbHashValue,
ULONG cbHashValue,
DWORD dwAssemblyRefFlags);
virtual HRESULT STDMETHODCALLTYPE SetFileProps(
mdFile file,
const void *pbHashValue,
ULONG cbHashValue,
DWORD dwFileFlags);
virtual HRESULT STDMETHODCALLTYPE SetExportedTypeProps(
mdExportedType ct,
mdToken tkImplementation,
mdTypeDef tkTypeDef,
DWORD dwExportedTypeFlags);
virtual HRESULT STDMETHODCALLTYPE SetManifestResourceProps(
mdManifestResource mr,
mdToken tkImplementation,
DWORD dwOffset,
DWORD dwResourceFlags);
//IMetaDataImport
virtual void STDMETHODCALLTYPE CloseEnum(HCORENUM hEnum);
virtual HRESULT STDMETHODCALLTYPE CountEnum(HCORENUM hEnum, ULONG *pulCount);
virtual HRESULT STDMETHODCALLTYPE ResetEnum(HCORENUM hEnum, ULONG ulPos);
virtual HRESULT STDMETHODCALLTYPE EnumTypeDefs(HCORENUM *phEnum, mdTypeDef rTypeDefs[],
ULONG cMax, ULONG *pcTypeDefs);
virtual HRESULT STDMETHODCALLTYPE EnumInterfaceImpls(HCORENUM *phEnum, mdTypeDef td,
mdInterfaceImpl rImpls[], ULONG cMax,
ULONG* pcImpls);
virtual HRESULT STDMETHODCALLTYPE EnumTypeRefs(HCORENUM *phEnum, mdTypeRef rTypeRefs[],
ULONG cMax, ULONG* pcTypeRefs);
virtual HRESULT STDMETHODCALLTYPE FindTypeDefByName( // S_OK or error.
LPCWSTR szTypeDef, // [IN] Name of the Type.
mdToken tkEnclosingClass, // [IN] TypeDef/TypeRef for Enclosing class.
mdTypeDef *ptd); // [OUT] Put the TypeDef token here.
virtual HRESULT STDMETHODCALLTYPE GetScopeProps( // S_OK or error.
__out_ecount(cchName)
LPWSTR szName, // [OUT] Put the name here.
ULONG cchName, // [IN] Size of name buffer in wide chars.
ULONG *pchName, // [OUT] Put size of name (wide chars) here.
GUID *pmvid); // [OUT, OPTIONAL] Put MVID here.
virtual HRESULT STDMETHODCALLTYPE GetModuleFromScope( // S_OK.
mdModule *pmd); // [OUT] Put mdModule token here.
virtual HRESULT STDMETHODCALLTYPE GetTypeDefProps( // S_OK or error.
mdTypeDef td, // [IN] TypeDef token for inquiry.
__out_ecount(cchTypeDef)
LPWSTR szTypeDef, // [OUT] Put name here.
ULONG cchTypeDef, // [IN] size of name buffer in wide chars.
ULONG *pchTypeDef, // [OUT] put size of name (wide chars) here.
DWORD *pdwTypeDefFlags, // [OUT] Put flags here.
mdToken *ptkExtends); // [OUT] Put base class TypeDef/TypeRef here.
virtual HRESULT STDMETHODCALLTYPE GetInterfaceImplProps( // S_OK or error.
mdInterfaceImpl iiImpl, // [IN] InterfaceImpl token.
mdTypeDef *pClass, // [OUT] Put implementing class token here.
mdToken *ptkIface); // [OUT] Put implemented interface token here.
virtual HRESULT STDMETHODCALLTYPE GetTypeRefProps( // S_OK or error.
mdTypeRef tr, // [IN] TypeRef token.
mdToken *ptkResolutionScope, // [OUT] Resolution scope, ModuleRef or AssemblyRef.
__out_ecount(cchName)
LPWSTR szName, // [OUT] Name of the TypeRef.
ULONG cchName, // [IN] Size of buffer.
ULONG *pchName); // [OUT] Size of Name.
virtual HRESULT STDMETHODCALLTYPE ResolveTypeRef(mdTypeRef tr, REFIID riid, IUnknown **ppIScope, mdTypeDef *ptd);
virtual HRESULT STDMETHODCALLTYPE EnumMembers( // S_OK, S_FALSE, or error.
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdTypeDef cl, // [IN] TypeDef to scope the enumeration.
mdToken rMembers[], // [OUT] Put MemberDefs here.
ULONG cMax, // [IN] Max MemberDefs to put.
ULONG *pcTokens); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE EnumMembersWithName( // S_OK, S_FALSE, or error.
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdTypeDef cl, // [IN] TypeDef to scope the enumeration.
LPCWSTR szName, // [IN] Limit results to those with this name.
mdToken rMembers[], // [OUT] Put MemberDefs here.
ULONG cMax, // [IN] Max MemberDefs to put.
ULONG *pcTokens); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE EnumMethods( // S_OK, S_FALSE, or error.
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdTypeDef cl, // [IN] TypeDef to scope the enumeration.
mdMethodDef rMethods[], // [OUT] Put MethodDefs here.
ULONG cMax, // [IN] Max MethodDefs to put.
ULONG *pcTokens); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE EnumMethodsWithName( // S_OK, S_FALSE, or error.
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdTypeDef cl, // [IN] TypeDef to scope the enumeration.
LPCWSTR szName, // [IN] Limit results to those with this name.
mdMethodDef rMethods[], // [OU] Put MethodDefs here.
ULONG cMax, // [IN] Max MethodDefs to put.
ULONG *pcTokens); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE EnumFields( // S_OK, S_FALSE, or error.
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdTypeDef cl, // [IN] TypeDef to scope the enumeration.
mdFieldDef rFields[], // [OUT] Put FieldDefs here.
ULONG cMax, // [IN] Max FieldDefs to put.
ULONG *pcTokens); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE EnumFieldsWithName( // S_OK, S_FALSE, or error.
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdTypeDef cl, // [IN] TypeDef to scope the enumeration.
LPCWSTR szName, // [IN] Limit results to those with this name.
mdFieldDef rFields[], // [OUT] Put MemberDefs here.
ULONG cMax, // [IN] Max MemberDefs to put.
ULONG *pcTokens); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE EnumParams( // S_OK, S_FALSE, or error.
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdMethodDef mb, // [IN] MethodDef to scope the enumeration.
mdParamDef rParams[], // [OUT] Put ParamDefs here.
ULONG cMax, // [IN] Max ParamDefs to put.
ULONG *pcTokens); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE EnumMemberRefs( // S_OK, S_FALSE, or error.
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdToken tkParent, // [IN] Parent token to scope the enumeration.
mdMemberRef rMemberRefs[], // [OUT] Put MemberRefs here.
ULONG cMax, // [IN] Max MemberRefs to put.
ULONG *pcTokens); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE EnumMethodImpls( // S_OK, S_FALSE, or error
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdTypeDef td, // [IN] TypeDef to scope the enumeration.
mdToken rMethodBody[], // [OUT] Put Method Body tokens here.
mdToken rMethodDecl[], // [OUT] Put Method Declaration tokens here.
ULONG cMax, // [IN] Max tokens to put.
ULONG *pcTokens); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE EnumPermissionSets( // S_OK, S_FALSE, or error.
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdToken tk, // [IN] if !NIL, token to scope the enumeration.
DWORD dwActions, // [IN] if !0, return only these actions.
mdPermission rPermission[], // [OUT] Put Permissions here.
ULONG cMax, // [IN] Max Permissions to put.
ULONG *pcTokens); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE FindMember(
mdTypeDef td, // [IN] given typedef
LPCWSTR szName, // [IN] member name
PCCOR_SIGNATURE pvSigBlob, // [IN] point to a blob value of CLR signature
ULONG cbSigBlob, // [IN] count of bytes in the signature blob
mdToken *pmb); // [OUT] matching memberdef
virtual HRESULT STDMETHODCALLTYPE FindMethod(
mdTypeDef td, // [IN] given typedef
LPCWSTR szName, // [IN] member name
PCCOR_SIGNATURE pvSigBlob, // [IN] point to a blob value of CLR signature
ULONG cbSigBlob, // [IN] count of bytes in the signature blob
mdMethodDef *pmb); // [OUT] matching memberdef
virtual HRESULT STDMETHODCALLTYPE FindField(
mdTypeDef td, // [IN] given typedef
LPCWSTR szName, // [IN] member name
PCCOR_SIGNATURE pvSigBlob, // [IN] point to a blob value of CLR signature
ULONG cbSigBlob, // [IN] count of bytes in the signature blob
mdFieldDef *pmb); // [OUT] matching memberdef
virtual HRESULT STDMETHODCALLTYPE FindMemberRef(
mdTypeRef td, // [IN] given typeRef
LPCWSTR szName, // [IN] member name
PCCOR_SIGNATURE pvSigBlob, // [IN] point to a blob value of CLR signature
ULONG cbSigBlob, // [IN] count of bytes in the signature blob
mdMemberRef *pmr); // [OUT] matching memberref
virtual HRESULT STDMETHODCALLTYPE GetMethodProps(
mdMethodDef mb, // The method for which to get props.
mdTypeDef *pClass, // Put method's class here.
__out_ecount(cchMethod)
LPWSTR szMethod, // Put method's name here.
ULONG cchMethod, // Size of szMethod buffer in wide chars.
ULONG *pchMethod, // Put actual size here
DWORD *pdwAttr, // Put flags here.
PCCOR_SIGNATURE *ppvSigBlob, // [OUT] point to the blob value of meta data
ULONG *pcbSigBlob, // [OUT] actual size of signature blob
ULONG *pulCodeRVA, // [OUT] codeRVA
DWORD *pdwImplFlags); // [OUT] Impl. Flags
virtual HRESULT STDMETHODCALLTYPE GetMemberRefProps( // S_OK or error.
mdMemberRef mr, // [IN] given memberref
mdToken *ptk, // [OUT] Put classref or classdef here.
__out_ecount(cchMember)
LPWSTR szMember, // [OUT] buffer to fill for member's name
ULONG cchMember, // [IN] the count of char of szMember
ULONG *pchMember, // [OUT] actual count of char in member name
PCCOR_SIGNATURE *ppvSigBlob, // [OUT] point to meta data blob value
ULONG *pbSig); // [OUT] actual size of signature blob
virtual HRESULT STDMETHODCALLTYPE EnumProperties( // S_OK, S_FALSE, or error.
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdTypeDef td, // [IN] TypeDef to scope the enumeration.
mdProperty rProperties[], // [OUT] Put Properties here.
ULONG cMax, // [IN] Max properties to put.
ULONG *pcProperties); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE EnumEvents( // S_OK, S_FALSE, or error.
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdTypeDef td, // [IN] TypeDef to scope the enumeration.
mdEvent rEvents[], // [OUT] Put events here.
ULONG cMax, // [IN] Max events to put.
ULONG *pcEvents); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE GetEventProps( // S_OK, S_FALSE, or error.
mdEvent ev, // [IN] event token
mdTypeDef *pClass, // [OUT] typedef containing the event declarion.
LPCWSTR szEvent, // [OUT] Event name
ULONG cchEvent, // [IN] the count of wchar of szEvent
ULONG *pchEvent, // [OUT] actual count of wchar for event's name
DWORD *pdwEventFlags, // [OUT] Event flags.
mdToken *ptkEventType, // [OUT] EventType class
mdMethodDef *pmdAddOn, // [OUT] AddOn method of the event
mdMethodDef *pmdRemoveOn, // [OUT] RemoveOn method of the event
mdMethodDef *pmdFire, // [OUT] Fire method of the event
mdMethodDef rmdOtherMethod[], // [OUT] other method of the event
ULONG cMax, // [IN] size of rmdOtherMethod
ULONG *pcOtherMethod); // [OUT] total number of other method of this event
virtual HRESULT STDMETHODCALLTYPE EnumMethodSemantics( // S_OK, S_FALSE, or error.
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdMethodDef mb, // [IN] MethodDef to scope the enumeration.
mdToken rEventProp[], // [OUT] Put Event/Property here.
ULONG cMax, // [IN] Max properties to put.
ULONG *pcEventProp); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE GetMethodSemantics( // S_OK, S_FALSE, or error.
mdMethodDef mb, // [IN] method token
mdToken tkEventProp, // [IN] event/property token.
DWORD *pdwSemanticsFlags); // [OUT] the role flags for the method/propevent pair
virtual HRESULT STDMETHODCALLTYPE GetClassLayout(
mdTypeDef td, // [IN] give typedef
DWORD *pdwPackSize, // [OUT] 1, 2, 4, 8, or 16
COR_FIELD_OFFSET rFieldOffset[], // [OUT] field offset array
ULONG cMax, // [IN] size of the array
ULONG *pcFieldOffset, // [OUT] needed array size
ULONG *pulClassSize); // [OUT] the size of the class
virtual HRESULT STDMETHODCALLTYPE GetFieldMarshal(
mdToken tk, // [IN] given a field's memberdef
PCCOR_SIGNATURE *ppvNativeType, // [OUT] native type of this field
ULONG *pcbNativeType); // [OUT] the count of bytes of *ppvNativeType
virtual HRESULT STDMETHODCALLTYPE GetRVA( // S_OK or error.
mdToken tk, // Member for which to set offset
ULONG *pulCodeRVA, // The offset
DWORD *pdwImplFlags); // the implementation flags
virtual HRESULT STDMETHODCALLTYPE GetPermissionSetProps(
mdPermission pm, // [IN] the permission token.
DWORD *pdwAction, // [OUT] CorDeclSecurity.
void const **ppvPermission, // [OUT] permission blob.
ULONG *pcbPermission); // [OUT] count of bytes of pvPermission.
virtual HRESULT STDMETHODCALLTYPE GetSigFromToken( // S_OK or error.
mdSignature mdSig, // [IN] Signature token.
PCCOR_SIGNATURE *ppvSig, // [OUT] return pointer to token.
ULONG *pcbSig); // [OUT] return size of signature.
virtual HRESULT STDMETHODCALLTYPE GetModuleRefProps( // S_OK or error.
mdModuleRef mur, // [IN] moduleref token.
__out_ecount_part_opt(cchName, *pchName)
LPWSTR szName, // [OUT] buffer to fill with the moduleref name.
ULONG cchName, // [IN] size of szName in wide characters.
ULONG *pchName); // [OUT] actual count of characters in the name.
virtual HRESULT STDMETHODCALLTYPE EnumModuleRefs( // S_OK or error.
HCORENUM *phEnum, // [IN|OUT] pointer to the enum.
mdModuleRef rModuleRefs[], // [OUT] put modulerefs here.
ULONG cmax, // [IN] max memberrefs to put.
ULONG *pcModuleRefs); // [OUT] put # put here.
virtual HRESULT STDMETHODCALLTYPE GetTypeSpecFromToken( // S_OK or error.
mdTypeSpec typespec, // [IN] TypeSpec token.
PCCOR_SIGNATURE *ppvSig, // [OUT] return pointer to TypeSpec signature
ULONG *pcbSig); // [OUT] return size of signature.
virtual HRESULT STDMETHODCALLTYPE GetNameFromToken( // Not Recommended! May be removed!
mdToken tk, // [IN] Token to get name from. Must have a name.
MDUTF8CSTR *pszUtf8NamePtr); // [OUT] Return pointer to UTF8 name in heap.
virtual HRESULT STDMETHODCALLTYPE EnumUnresolvedMethods( // S_OK, S_FALSE, or error.
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdToken rMethods[], // [OUT] Put MemberDefs here.
ULONG cMax, // [IN] Max MemberDefs to put.
ULONG *pcTokens); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE GetUserString( // S_OK or error.
mdString stk, // [IN] String token.
__out_ecount(cchString)
LPWSTR szString, // [OUT] Copy of string.
ULONG cchString, // [IN] Max chars of room in szString.
ULONG *pchString); // [OUT] How many chars in actual string.
virtual HRESULT STDMETHODCALLTYPE GetPinvokeMap( // S_OK or error.
mdToken tk, // [IN] FieldDef or MethodDef.
DWORD *pdwMappingFlags, // [OUT] Flags used for mapping.
__out_ecount(cchImportName)
LPWSTR szImportName, // [OUT] Import name.
ULONG cchImportName, // [IN] Size of the name buffer.
ULONG *pchImportName, // [OUT] Actual number of characters stored.
mdModuleRef *pmrImportDLL); // [OUT] ModuleRef token for the target DLL.
virtual HRESULT STDMETHODCALLTYPE EnumSignatures( // S_OK or error.
HCORENUM *phEnum, // [IN|OUT] pointer to the enum.
mdSignature rSignatures[], // [OUT] put signatures here.
ULONG cmax, // [IN] max signatures to put.
ULONG *pcSignatures); // [OUT] put # put here.
virtual HRESULT STDMETHODCALLTYPE EnumTypeSpecs( // S_OK or error.
HCORENUM *phEnum, // [IN|OUT] pointer to the enum.
mdTypeSpec rTypeSpecs[], // [OUT] put TypeSpecs here.
ULONG cmax, // [IN] max TypeSpecs to put.
ULONG *pcTypeSpecs); // [OUT] put # put here.
virtual HRESULT STDMETHODCALLTYPE EnumUserStrings( // S_OK or error.
HCORENUM *phEnum, // [IN/OUT] pointer to the enum.
mdString rStrings[], // [OUT] put Strings here.
ULONG cmax, // [IN] max Strings to put.
ULONG *pcStrings); // [OUT] put # put here.
virtual HRESULT STDMETHODCALLTYPE GetParamForMethodIndex( // S_OK or error.
mdMethodDef md, // [IN] Method token.
ULONG ulParamSeq, // [IN] Parameter sequence.
mdParamDef *ppd); // [IN] Put Param token here.
virtual HRESULT STDMETHODCALLTYPE EnumCustomAttributes( // S_OK or error.
HCORENUM *phEnum, // [IN, OUT] COR enumerator.
mdToken tk, // [IN] Token to scope the enumeration, 0 for all.
mdToken tkType, // [IN] Type of interest, 0 for all.
mdCustomAttribute rCustomAttributes[], // [OUT] Put custom attribute tokens here.
ULONG cMax, // [IN] Size of rCustomAttributes.
ULONG *pcCustomAttributes); // [OUT, OPTIONAL] Put count of token values here.
virtual HRESULT STDMETHODCALLTYPE GetCustomAttributeProps( // S_OK or error.
mdCustomAttribute cv, // [IN] CustomAttribute token.
mdToken *ptkObj, // [OUT, OPTIONAL] Put object token here.
mdToken *ptkType, // [OUT, OPTIONAL] Put AttrType token here.
void const **ppBlob, // [OUT, OPTIONAL] Put pointer to data here.
ULONG *pcbSize); // [OUT, OPTIONAL] Put size of date here.
virtual HRESULT STDMETHODCALLTYPE FindTypeRef(
mdToken tkResolutionScope, // [IN] ModuleRef, AssemblyRef or TypeRef.
LPCWSTR szName, // [IN] TypeRef Name.
mdTypeRef *ptr); // [OUT] matching TypeRef.
virtual HRESULT STDMETHODCALLTYPE GetMemberProps(
mdToken mb, // The member for which to get props.
mdTypeDef *pClass, // Put member's class here.
__out_ecount(cchMember)
LPWSTR szMember, // Put member's name here.
ULONG cchMember, // Size of szMember buffer in wide chars.
ULONG *pchMember, // Put actual size here
DWORD *pdwAttr, // Put flags here.
PCCOR_SIGNATURE *ppvSigBlob, // [OUT] point to the blob value of meta data
ULONG *pcbSigBlob, // [OUT] actual size of signature blob
ULONG *pulCodeRVA, // [OUT] codeRVA
DWORD *pdwImplFlags, // [OUT] Impl. Flags
DWORD *pdwCPlusTypeFlag, // [OUT] flag for value type. selected ELEMENT_TYPE_*
UVCP_CONSTANT *ppValue, // [OUT] constant value
ULONG *pcchValue); // [OUT] size of constant string in chars, 0 for non-strings.
virtual HRESULT STDMETHODCALLTYPE GetFieldProps(
mdFieldDef mb, // The field for which to get props.
mdTypeDef *pClass, // Put field's class here.
__out_ecount(cchField)
LPWSTR szField, // Put field's name here.
ULONG cchField, // Size of szField buffer in wide chars.
ULONG *pchField, // Put actual size here
DWORD *pdwAttr, // Put flags here.
PCCOR_SIGNATURE *ppvSigBlob, // [OUT] point to the blob value of meta data
ULONG *pcbSigBlob, // [OUT] actual size of signature blob
DWORD *pdwCPlusTypeFlag, // [OUT] flag for value type. selected ELEMENT_TYPE_*
UVCP_CONSTANT *ppValue, // [OUT] constant value
ULONG *pcchValue); // [OUT] size of constant string in chars, 0 for non-strings.
virtual HRESULT STDMETHODCALLTYPE GetPropertyProps( // S_OK, S_FALSE, or error.
mdProperty prop, // [IN] property token
mdTypeDef *pClass, // [OUT] typedef containing the property declarion.
LPCWSTR szProperty, // [OUT] Property name
ULONG cchProperty, // [IN] the count of wchar of szProperty
ULONG *pchProperty, // [OUT] actual count of wchar for property name
DWORD *pdwPropFlags, // [OUT] property flags.
PCCOR_SIGNATURE *ppvSig, // [OUT] property type. pointing to meta data internal blob
ULONG *pbSig, // [OUT] count of bytes in *ppvSig
DWORD *pdwCPlusTypeFlag, // [OUT] flag for value type. selected ELEMENT_TYPE_*
UVCP_CONSTANT *ppDefaultValue, // [OUT] constant value
ULONG *pcchDefaultValue, // [OUT] size of constant string in chars, 0 for non-strings.
mdMethodDef *pmdSetter, // [OUT] setter method of the property
mdMethodDef *pmdGetter, // [OUT] getter method of the property
mdMethodDef rmdOtherMethod[], // [OUT] other method of the property
ULONG cMax, // [IN] size of rmdOtherMethod
ULONG *pcOtherMethod); // [OUT] total number of other method of this property
virtual HRESULT STDMETHODCALLTYPE GetParamProps( // S_OK or error.
mdParamDef tk, // [IN]The Parameter.
mdMethodDef *pmd, // [OUT] Parent Method token.
ULONG *pulSequence, // [OUT] Parameter sequence.
__out_ecount(cchName)
LPWSTR szName, // [OUT] Put name here.
ULONG cchName, // [OUT] Size of name buffer.
ULONG *pchName, // [OUT] Put actual size of name here.
DWORD *pdwAttr, // [OUT] Put flags here.
DWORD *pdwCPlusTypeFlag, // [OUT] Flag for value type. selected ELEMENT_TYPE_*.
UVCP_CONSTANT *ppValue, // [OUT] Constant value.
ULONG *pcchValue); // [OUT] size of constant string in chars, 0 for non-strings.
virtual HRESULT STDMETHODCALLTYPE GetCustomAttributeByName( // S_OK or error.
mdToken tkObj, // [IN] Object with Custom Attribute.
LPCWSTR szName, // [IN] Name of desired Custom Attribute.
const void **ppData, // [OUT] Put pointer to data here.
ULONG *pcbData); // [OUT] Put size of data here.
virtual BOOL STDMETHODCALLTYPE IsValidToken( // True or False.
mdToken tk); // [IN] Given token.
virtual HRESULT STDMETHODCALLTYPE GetNestedClassProps( // S_OK or error.
mdTypeDef tdNestedClass, // [IN] NestedClass token.
mdTypeDef *ptdEnclosingClass); // [OUT] EnclosingClass token.
virtual HRESULT STDMETHODCALLTYPE GetNativeCallConvFromSig( // S_OK or error.
void const *pvSig, // [IN] Pointer to signature.
ULONG cbSig, // [IN] Count of signature bytes.
ULONG *pCallConv); // [OUT] Put calling conv here (see CorPinvokemap).
virtual HRESULT STDMETHODCALLTYPE IsGlobal( // S_OK or error.
mdToken pd, // [IN] Type, Field, or Method token.
int *pbGlobal); // [OUT] Put 1 if global, 0 otherwise.
//IMetaDataImport2
virtual HRESULT STDMETHODCALLTYPE EnumGenericParams(
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdToken tk, // [IN] TypeDef or MethodDef whose generic parameters are requested
mdGenericParam rGenericParams[], // [OUT] Put GenericParams here.
ULONG cMax, // [IN] Max GenericParams to put.
ULONG *pcGenericParams); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE GetGenericParamProps( // S_OK or error.
mdGenericParam gp, // [IN] GenericParam
ULONG *pulParamSeq, // [OUT] Index of the type parameter
DWORD *pdwParamFlags, // [OUT] Flags, for future use (e.g. variance)
mdToken *ptOwner, // [OUT] Owner (TypeDef or MethodDef)
DWORD *reserved, // [OUT] For future use (e.g. non-type parameters)
__out_ecount(cchName)
LPWSTR wzname, // [OUT] Put name here
ULONG cchName, // [IN] Size of buffer
ULONG *pchName); // [OUT] Put size of name (wide chars) here.
virtual HRESULT STDMETHODCALLTYPE GetMethodSpecProps(
mdMethodSpec mi, // [IN] The method instantiation
mdToken *tkParent, // [OUT] MethodDef or MemberRef
PCCOR_SIGNATURE *ppvSigBlob, // [OUT] point to the blob value of meta data
ULONG *pcbSigBlob); // [OUT] actual size of signature blob
virtual HRESULT STDMETHODCALLTYPE EnumGenericParamConstraints(
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdGenericParam tk, // [IN] GenericParam whose constraints are requested
mdGenericParamConstraint rGenericParamConstraints[], // [OUT] Put GenericParamConstraints here.
ULONG cMax, // [IN] Max GenericParamConstraints to put.
ULONG *pcGenericParamConstraints); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE GetGenericParamConstraintProps( // S_OK or error.
mdGenericParamConstraint gpc, // [IN] GenericParamConstraint
mdGenericParam *ptGenericParam, // [OUT] GenericParam that is constrained
mdToken *ptkConstraintType); // [OUT] TypeDef/Ref/Spec constraint
virtual HRESULT STDMETHODCALLTYPE GetPEKind( // S_OK or error.
DWORD* pdwPEKind, // [OUT] The kind of PE (0 - not a PE)
DWORD* pdwMAchine); // [OUT] Machine as defined in NT header
virtual HRESULT STDMETHODCALLTYPE GetVersionString( // S_OK or error.
__out_ecount(ccBufSize)
LPWSTR pwzBuf, // [OUT] Put version string here.
DWORD ccBufSize, // [IN] size of the buffer, in wide chars
DWORD *pccBufSize); // [OUT] Size of the version string, wide chars, including terminating nul.
virtual HRESULT STDMETHODCALLTYPE EnumMethodSpecs(
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdToken tk, // [IN] MethodDef or MemberRef whose MethodSpecs are requested
mdMethodSpec rMethodSpecs[], // [OUT] Put MethodSpecs here.
ULONG cMax, // [IN] Max tokens to put.
ULONG *pcMethodSpecs); // [OUT] Put actual count here.
// IMetaDataAssemblyImport
virtual HRESULT STDMETHODCALLTYPE GetAssemblyProps( // S_OK or error.
mdAssembly mda, // [IN] The Assembly for which to get the properties.
const void **ppbPublicKey, // [OUT] Pointer to the public key.
ULONG *pcbPublicKey, // [OUT] Count of bytes in the public key.
ULONG *pulHashAlgId, // [OUT] Hash Algorithm.
__out_ecount(cchName)
LPWSTR szName, // [OUT] Buffer to fill with assembly's simply name.
ULONG cchName, // [IN] Size of buffer in wide chars.
ULONG *pchName, // [OUT] Actual # of wide chars in name.
ASSEMBLYMETADATA *pMetaData, // [OUT] Assembly MetaData.
DWORD *pdwAssemblyFlags); // [OUT] Flags.
virtual HRESULT STDMETHODCALLTYPE GetAssemblyRefProps( // S_OK or error.
mdAssemblyRef mdar, // [IN] The AssemblyRef for which to get the properties.
const void **ppbPublicKeyOrToken, // [OUT] Pointer to the public key or token.
ULONG *pcbPublicKeyOrToken, // [OUT] Count of bytes in the public key or token.
__out_ecount(cchName)
LPWSTR szName, // [OUT] Buffer to fill with name.
ULONG cchName, // [IN] Size of buffer in wide chars.
ULONG *pchName, // [OUT] Actual # of wide chars in name.
ASSEMBLYMETADATA *pMetaData, // [OUT] Assembly MetaData.
const void **ppbHashValue, // [OUT] Hash blob.
ULONG *pcbHashValue, // [OUT] Count of bytes in the hash blob.
DWORD *pdwAssemblyRefFlags); // [OUT] Flags.
virtual HRESULT STDMETHODCALLTYPE GetFileProps( // S_OK or error.
mdFile mdf, // [IN] The File for which to get the properties.
__out_ecount(cchName)
LPWSTR szName, // [OUT] Buffer to fill with name.
ULONG cchName, // [IN] Size of buffer in wide chars.
ULONG *pchName, // [OUT] Actual # of wide chars in name.
const void **ppbHashValue, // [OUT] Pointer to the Hash Value Blob.
ULONG *pcbHashValue, // [OUT] Count of bytes in the Hash Value Blob.
DWORD *pdwFileFlags); // [OUT] Flags.
virtual HRESULT STDMETHODCALLTYPE GetExportedTypeProps( // S_OK or error.
mdExportedType mdct, // [IN] The ExportedType for which to get the properties.
__out_ecount(cchName)
LPWSTR szName, // [OUT] Buffer to fill with name.
ULONG cchName, // [IN] Size of buffer in wide chars.
ULONG *pchName, // [OUT] Actual # of wide chars in name.
mdToken *ptkImplementation, // [OUT] mdFile or mdAssemblyRef or mdExportedType.
mdTypeDef *ptkTypeDef, // [OUT] TypeDef token within the file.
DWORD *pdwExportedTypeFlags); // [OUT] Flags.
virtual HRESULT STDMETHODCALLTYPE GetManifestResourceProps( // S_OK or error.
mdManifestResource mdmr, // [IN] The ManifestResource for which to get the properties.
__out_ecount(cchName)
LPWSTR szName, // [OUT] Buffer to fill with name.
ULONG cchName, // [IN] Size of buffer in wide chars.
ULONG *pchName, // [OUT] Actual # of wide chars in name.
mdToken *ptkImplementation, // [OUT] mdFile or mdAssemblyRef that provides the ManifestResource.
DWORD *pdwOffset, // [OUT] Offset to the beginning of the resource within the file.
DWORD *pdwResourceFlags);// [OUT] Flags.
virtual HRESULT STDMETHODCALLTYPE EnumAssemblyRefs( // S_OK or error
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdAssemblyRef rAssemblyRefs[], // [OUT] Put AssemblyRefs here.
ULONG cMax, // [IN] Max AssemblyRefs to put.
ULONG *pcTokens); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE EnumFiles( // S_OK or error
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdFile rFiles[], // [OUT] Put Files here.
ULONG cMax, // [IN] Max Files to put.
ULONG *pcTokens); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE EnumExportedTypes( // S_OK or error
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdExportedType rExportedTypes[], // [OUT] Put ExportedTypes here.
ULONG cMax, // [IN] Max ExportedTypes to put.
ULONG *pcTokens); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE EnumManifestResources( // S_OK or error
HCORENUM *phEnum, // [IN|OUT] Pointer to the enum.
mdManifestResource rManifestResources[], // [OUT] Put ManifestResources here.
ULONG cMax, // [IN] Max Resources to put.
ULONG *pcTokens); // [OUT] Put # put here.
virtual HRESULT STDMETHODCALLTYPE GetAssemblyFromScope( // S_OK or error
mdAssembly *ptkAssembly); // [OUT] Put token here.
virtual HRESULT STDMETHODCALLTYPE FindExportedTypeByName( // S_OK or error
LPCWSTR szName, // [IN] Name of the ExportedType.
mdToken mdtExportedType, // [IN] ExportedType for the enclosing class.
mdExportedType *ptkExportedType); // [OUT] Put the ExportedType token here.
virtual HRESULT STDMETHODCALLTYPE FindManifestResourceByName( // S_OK or error
LPCWSTR szName, // [IN] Name of the ManifestResource.
mdManifestResource *ptkManifestResource); // [OUT] Put the ManifestResource token here.
//STDMETHOD_(void, CloseEnum(
// HCORENUM hEnum); // Enum to be closed.
virtual HRESULT STDMETHODCALLTYPE FindAssembliesByName( // S_OK or error
LPCWSTR szAppBase, // [IN] optional - can be NULL
LPCWSTR szPrivateBin, // [IN] optional - can be NULL
LPCWSTR szAssemblyName, // [IN] required - this is the assembly you are requesting
IUnknown *ppIUnk[], // [OUT] put IMetaDataAssemblyImport pointers here
ULONG cMax, // [IN] The max number to put
ULONG *pcAssemblies); // [OUT] The number of assemblies returned.
private:
Volatile<LONG> m_cRefCount;
ReleaseHolder<IMetaDataImport2> m_pInnerImport;
ReleaseHolder<IMDInternalImport> m_pInnerInternalImport;
ReleaseHolder<IMetaDataAssemblyImport> m_pInnerAssemblyImport;
ReleaseHolder<IMetaDataEmit2> m_pInner;
ReleaseHolder<IMetaDataAssemblyEmit> m_pInnerAssembly;
// all tokens with values <= these maximums are considered pre-existing content
// and can not be altered using this emitter
mdTypeDef maxInitialTypeDef;
mdMethodDef maxInitialMethodDef;
mdFieldDef maxInitialFieldDef;
mdMemberRef maxInitialMemberRef;
mdParamDef maxInitialParamDef;
mdCustomAttribute maxInitialCustomAttribute;
mdEvent maxInitialEvent;
mdProperty maxInitialProperty;
mdGenericParam maxInitialGenericParam;
};
#endif
|