DOC: Συγκρότηση καθολικού Cache (GAC) APIs δεν τεκμηριώνονται στο η τεκμηρίωση Kit (SDK) του λογισμικού ανάπτυξης του .NET Framework

Αποποίηση ευθυνών για περιεχόμενο της Γνωσιακής βάσης που έχει αποσυρθεί

Αυτό το άρθρο αφορά προϊόντα για τα οποία η Microsoft δεν παρέχει πλέον υποστήριξη. Συνεπώς, το παρόν άρθρο παρέχεται "ως έχει" και δεν θα ενημερώνεται πλέον.

Σύνοψη

Το τοπικό κώδικα διασυνδέσεις προγραμματισμού εφαρμογών (API) που σας επιτρέπουν να αλληλεπιδράσετε με το καθολικό Cache συγκροτήσεων (GAC) δεν τεκμηριώνονται στην τεκμηρίωση του .NET Framework κιτ ανάπτυξης λογισμικού (SDK).

Περισσότερες πληροφορίες

ΠΡΟΣΟΧΉ: Μην χρησιμοποιείτε αυτά τα API στην εφαρμογή σας για να πραγματοποιήσετε συνδέσεις συγκρότησης ή για να ελέγξετε για την ύπαρξη των συγκροτημάτων ή άλλες χρόνο εκτέλεσης, ανάπτυξη ή χρόνου σχεδίασης λειτουργιών. Μόνο εργαλεία διαχείρισης και τα προγράμματα εγκατάστασης (Setup), πρέπει να χρησιμοποιήσετε αυτά τα API. Εάν χρησιμοποιείτε GAC, αυτό απευθείας εκθέτει την εφαρμογή σας σε fragility σύνδεσης συγκρότησης ή ενδέχεται να προκαλέσει την εφαρμογή για να λειτουργούν σωστά σε μελλοντικές εκδόσεις του .NET Framework.

GAC αποθηκεύει συγκροτήσεις που είναι κοινόχρηστα μεταξύ όλων των εφαρμογών σε έναν υπολογιστή. Το πραγματικό μέγεθος αποθήκευσης θέση και τη δομή του GAC δεν έχει τεκμηριωθεί και μπορεί να αλλάξει σε μελλοντικές εκδόσεις του .NET Framework και το λειτουργικό σύστημα των Microsoft Windows.

Η μόνη υποστηριζόμενη μέθοδος πρόσβασης συγκροτήσεις στο GAC είναι μέσω του API που τεκμηριώνονται σε αυτό το άρθρο.

Οι περισσότερες εφαρμογές δεν χρειάζεται να χρησιμοποιήσουν αυτά τα API, επειδή η συγκρότηση σύνδεσης θα γίνει αυτόματα από το χρόνο εκτέλεσης κοινής γλώσσας. Μόνο η προσαρμοσμένη εγκατάσταση προγραμμάτων ή εργαλεία διαχείρισης, πρέπει να χρησιμοποιήσετε αυτά τα API. Microsoft Windows Installer έχει εγγενή υποστήριξη για εγκαθιστώντας συγκροτήσεις στο GAC.

Για περισσότερες πληροφορίες σχετικά με συγκροτήσεις GAC, ανατρέξτε στο θέμα το .NET Framework SDK.

Μπορείτε να χρησιμοποιήσετε το API GAC στα ακόλουθα σενάρια:
  • Όταν εγκαθιστάτε μια συγκρότηση στο GAC.
  • Κατά την κατάργηση μιας συγκρότησης από το GAC.
  • Όταν κάνετε εξαγωγή μιας συγκρότησης από το GAC.
  • Όταν κάνετε απαρίθμηση συγκροτήσεις που είναι διαθέσιμες στο GAC.
ΣΗΜΕΊΩΣΗ: πρέπει να κληθεί το CoInitialize(Ex) πριν να χρησιμοποιήσετε οποιαδήποτε από τις λειτουργίες και τις διασυνδέσεις που περιγράφονται σε αυτήν την προδιαγραφή.

Διασύνδεση IAssemblyCache

Η διασύνδεση IAssemblyCache είναι η διασύνδεση ανώτατου επιπέδου που παρέχει πρόσβαση στο GAC.

Για να αποκτήσετε μια παρουσία του CreateAssemblyCache API, κλήση CreateAssemblyCache API, ως εξής:
STDAPI CreateAssemblyCache(IAssemblyCache **ppAsmCache, DWORD dwReserved); 
Οι παράμετροι ορίζονται ως εξής:
  • ppAsmCache - δείκτης για την επιστροφή IAssemblyCache
  • dwReserved

FUSION_INSTALL_REFERENCE δομή

Η δομή FUSION_INSTALL_REFERENCE αντιπροσωπεύει μια αναφορά που δημιουργείται όταν μια εφαρμογή έχει εγκατασταθεί μια συγκρότηση στο GAC.
    typedef struct _FUSION_INSTALL_REFERENCE_    {
DWORD cbSize;
DWORD dwFlags;
GUID guidScheme; // Contains one of the pre-defined GUIDs.
LPCWSTR szIdentifier; // Unique identifier for the application that installs this assembly.
LPCWSTR szNonCannonicalData; // Data is description; relevant to the GUID above.
} FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE;

Τα πεδία της δομής ορίζονται ως εξής:
  • cbSize - το μέγεθος της δομής σε byte.
  • τιμή της dwFlags - δεσμευμένες, πρέπει να είναι μηδέν.
  • guidScheme - η οντότητα που προσθέτει την αναφορά.
  • szIdentifier - μια μοναδική συμβολοσειρά που αναγνωρίζει η εφαρμογή που εγκατέστησε η συγκρότηση.
  • szNonCannonicalData - μια συμβολοσειρά που είναι κατανοητή μόνο από τον φορέα που προσθέτει την αναφορά. GAC αποθηκεύει μόνο αυτήν τη συμβολοσειρά.
Οι πιθανές τιμές για το πεδίο guidScheme μπορεί να είναι ένα από τα εξής:
  • FUSION_REFCOUNT_MSI_GUID - η συγκρότηση αναφέρεται από μια εφαρμογή που έχει εγκατασταθεί με τον Windows Installer. Το πεδίο szIdentifier έχει οριστεί σε MSIκαι szNonCannonicalData έχει οριστεί σε Windows Installer. Το καθεστώς αυτό πρέπει να χρησιμοποιείται μόνο από τον Windows Installer, το ίδιο.
  • FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID - η συγκρότηση αναφέρεται από μια εφαρμογή που εμφανίζεται στο Εικονίδιο Προσθαφαίρεση προγραμμάτων. Το πεδίο szIdentifier είναι το διακριτικό που χρησιμοποιείται για την καταχώρηση της εφαρμογής με την Προσθαφαίρεση προγραμμάτων.
  • FUSION_REFCOUNT_FILEPATH_GUID - η συγκρότηση αναφέρεται από μια εφαρμογή που αντιπροσωπεύεται από ένα αρχείο στο σύστημα αρχείων. Το πεδίο " szIdentifier " είναι η διαδρομή προς αυτό το αρχείο.
  • FUSION_REFCOUNT_OPAQUE_STRING_GUID - η συγκρότηση αναφέρεται από μια εφαρμογή που παρουσιάζονται μόνο με μια συμβολοσειρά αδιαφανές. Το szIdentifier είναι αδιαφανές αυτήν τη συμβολοσειρά. GAC δεν εκτελεί την ύπαρξη έλεγχος για αδιαφανή αναφορές όταν καταργείτε αυτό.

ASSEMBLY_INFO δομή

Η δομή ASSEMBLY_INFO αντιπροσωπεύει πληροφορίες σχετικά με μια συγκρότηση στο cache συγκροτήσεων.

Τα πεδία της δομής ορίζονται ως εξής:
  • cbAssemblyInfo - μέγεθος της δομής σε byte. Επιτρέπει προσθήκες στη δομή σε μελλοντική έκδοση του .NET Framework.
  • dwAssemblyFlags - δηλώνει ένα ή περισσότερα από τα bit ASSEMBLYINFO_FLAG_ * .
  • uliAssemblySizeInKB - το μέγεθος των αρχείων που απαρτίζουν το συγκρότημα σε kilobyte (KB).
  • pszCurrentAssemblyPathBuf - ένας δείκτης προς ένα buffer συμβολοσειράς που περιέχει την τρέχουσα διαδρομή του καταλόγου που περιέχει τα αρχεία που απαρτίζουν το συγκρότημα. Η διαδρομή πρέπει να τελειώνει με μια μηδενική τιμή.
  • cchBuf - μέγεθος του buffer που οδηγεί στο πεδίο pszCurrentAssemblyPathBug .
dwAssemblyFlags μπορεί να έχει μία από τις ακόλουθες τιμές:
  • ASSEMBLYINFO_FLAG__INSTALLED - υποδεικνύει ότι η συγκρότηση έχει εγκατασταθεί στην πραγματικότητα. Πάντα την τιμή στην τρέχουσα έκδοση του .NET Framework.
  • ASSEMBLYINFO_FLAG__PAYLOADRESIDENT - οριστεί στην τρέχουσα έκδοση του .NET Framework.

Η μέθοδος IAssemblyCache::UninstallAssembly

Η μέθοδος IAssemblyCache::UninstallAssembly καταργεί την αναφορά μιας συγκρότησης από το GAC. Εάν άλλες εφαρμογές κρατήστε χωρίς άλλες αναφορές στη συγκρότηση, τα αρχεία που απαρτίζουν το συγκρότημα καταργούνται από το GAC.
    HRESULT UninstallAssembly(        [in] DWORD dwFlags,
[in] LPCWSTR pszAssemblyName,
[in] LPCFUSION_INSTALL_REFERENCE pRefData,
[out, optional] ULONG *pulDisposition
);


Οι παράμετροι ορίζονται ως εξής:
  • τιμή της dwFlags - χωρίς σημαίες που έχουν οριστεί. Πρέπει να είναι μηδέν.
  • pszAssemblyName - το όνομα της συγκρότησης. Μια συμβολοσειρά Unicode τερματίστηκε από το μηδέν.
  • pRefData - ένας δείκτης σε μια δομή FUSION_INSTALL_REFERENCE . Αν και δεν συνιστάται, αυτή η παράμετρος μπορεί να είναι null. Η συγκρότηση έχει εγκατασταθεί χωρίς μια αναφορά εφαρμογής ή όλες οι υπάρχουσες αναφορές εφαρμογής έχουν εξαφανιστεί.
  • pulDisposition - δείκτης για έναν ακέραιο που δηλώνει τις ενέργειες που εκτελούνται από τη συνάρτηση.
ΣΗΜΕΊΩΣΗ: Εάν pulDisposition δεν είναι null, pulDisposition περιέχει μία από τις ακόλουθες τιμές:
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED - η συγκρότηση έχουν καταργηθεί τα αρχεία από το GAC.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE - μια εφαρμογή χρησιμοποιεί το συγκρότημα. Αυτή η τιμή επιστρέφεται στα Microsoft Windows 95 και Microsoft Windows 98.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED - η συγκρότηση δεν υπάρχει στο GAC.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING - δεν χρησιμοποιείται.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES - η συγκρότηση δεν έχει καταργηθεί από το GAC επειδή υπάρχει μια άλλη εφαρμογή αναφοράς.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND - την αναφορά που καθορίζεται στο pRefData δεν βρέθηκε στο GAC.
Οι επιστρεφόμενες τιμές ορίζονται ως εξής:
  • S_OK - η συγκρότηση έχει καταργηθεί.
  • S_FALSE - η λειτουργία ολοκληρώθηκε με επιτυχία, αλλά δεν καταργήθηκε της συγκρότησης από το GAC. Ο λόγος περιγράφεται στο pulDisposition.

Η μέθοδος IAssemblyCache::QueryAssemblyInfo

Η μέθοδος IAssemblyCache::QueryAssemblyInfo ανακτά πληροφορίες σχετικά με τη συγκρότηση από το GAC.
    HRESULT QueryAssemblyInfo(        [in] DWORD dwFlags,
[in] LPCWSTR pszAssemblyName,
[in, out] ASSEMBLY_INFO *pAsmInfo
);

Οι παράμετροι ορίζονται ως εξής:
  • τιμή της dwFlags - QUERYASMINFO_FLAG_VALIDATE ή QUERYASMINFO_FLAG_GETSIZE:
    • * _VALIDATE -εκτελεί επικύρωση των αρχείων στο GAC κατά τη διακήρυξη της συγκρότησης, καθώς και την επαλήθευση του κατακερματισμού και επαλήθευσης υπογραφής ισχυρού ονόματος.
    • * _GETSIZE -επιστρέφει το μέγεθος όλων των αρχείων στη συγκρότηση (χώρου στο δίσκο). Εάν δεν καθοριστεί, το πεδίο ASSEMBLY_INFO::uliAssemblySizeInKB δεν τροποποιείται.
  • pszAssemblyName - το όνομα της συγκρότησης που απευθύνεται το ερώτημα.
  • pAsmInfo - δείκτης για τη δομή ASSEMBLY_INFO που επιστρέφεται.

Η μέθοδος IAssemblyCache::InstallAssembly

Η μέθοδος IAssemblyCache::InstallAssembly προσθέτει μια νέα συγκρότηση στο GAC. Η συγκρότηση πρέπει να διατηρούνται στο σύστημα αρχείων και αντιγράφεται στο GAC.
    HRESULT InstallAssembly( // If you use this, fusion will do the streaming & commit.        [in] DWORD dwFlags,
[in] LPCWSTR pszManifestFilePath,
[in] LPCFUSION_INSTALL_REFERENCE pRefData
);

Οι παράμετροι ορίζονται ως εξής:
  • μπορεί να καθοριστεί η τιμή της dwFlags - πολύ, ένα από τα bit των τιμών IASSEMBLYCACHE_INSTALL_FLAG_ * :
    • * _REFRESH - αν είναι ήδη εγκατεστημένη η συγκρότηση στο GAC και τους αριθμούς έκδοσης αρχείων της συγκρότησης που εγκαθίσταται είναι ίδια ή νεότερη έκδοση, τα αρχεία αντικαθίστανται.
    • * _FORCE_REFRESH -τα αρχεία μιας υπάρχουσας συγκρότησης αντικαθίστανται, ανεξάρτητα από τον αριθμό έκδοσής τους.
  • pszManifestFilePath - μια συμβολοσειρά που οδηγεί στη βιβλιοθήκη δυναμικής συνδέονται (DLL) που περιέχει τη διακήρυξη της συγκρότησης. Άλλα αρχεία συγκρότηση πρέπει να βρίσκεται στον ίδιο κατάλογο με το αρχείο DLL που περιέχει τη διακήρυξη της συγκρότησης.
  • pRefData - ένας δείκτης προς ένα FUSION_INSTALL_REFERENCE που υποδεικνύει την εφαρμογή για λογαριασμό του οποίου γίνεται εγκατάσταση της συγκρότησης. Αν και δεν συνιστάται, αυτή η παράμετρος μπορεί να είναι null, αλλά αυτό αφήνει τη συγκρότηση χωρίς οποιαδήποτε αναφορά εφαρμογής.

Διασύνδεση IAssemblyName

Η διασύνδεση IAssemblyName αναπαριστά ένα όνομα συγκρότησης. Όνομα συγκρότησης περιλαμβάνει ένα προκαθορισμένο σύνολο ζεύγη ονόματος-τιμής. Το όνομα της συγκρότησης περιγράφεται λεπτομερώς στο .NET Framework SDK.
[        local,
object,
uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),
pointer_default(unique)
]
interface IAssemblyName: IUnknown

Μια παρουσία του IAssemblyName επιτυγχάνεται με την κλήση του CreateAssemblyNameObject API:
STDAPI CreateAssemblyNameObject(LPASSEMBLYNAME *ppAssemblyNameObj, LPCWSTR szAssemblyName, DWORD dwFlags, LPVOID pvReserved);
Οι παράμετροι ορίζονται ως εξής:
  • ppAssemblyNameObj - δείκτης σε μια θέση μνήμης που λαμβάνει ο δείκτης IAssemblyName που δημιουργείται.
  • szAssemblyName - μια αναπαράσταση συμβολοσειράς του ονόματος συγκρότησης ή μιας αναφοράς πλήρους συγκρότησης που καθορίζεται από την τιμή της dwFlags. Η αναπαράσταση συμβολοσειράς μπορεί να είναι null.
  • τιμή της dwFlags - μηδέν ή περισσότερα από τα bit που έχουν οριστεί στην απαρίθμηση CREATE_ASM_NAME_OBJ_FLAGS .
  • pvReserved - πρέπει να είναι null.

CREATE_ASM_NAME_OBJ_FLAGS απαρίθμηση

Η απαρίθμηση CREATE_ASM_NAME_OBJ_FLAGS περιέχει τις ακόλουθες τιμές:
  • CANOF_PARSE_DISPLAY_NAME - Εάν αυτή η σημαία έχει καθοριστεί, η παράμετρος szAssemblyName είναι το όνομα συγκρότησης πλήρη και αναλύεται στις μεμονωμένες ιδιότητες. Εάν η σημαία δεν έχει καθοριστεί, το szAssemblyName είναι το τμήμα "Όνομα" του ονόματος συγκρότησης.
  • CANOF_SET_DEFAULT_VALUES - Εάν αυτή η σημαία είναι καθορισμένη, ορισμένες ιδιότητες, όπως η αρχιτεκτονική του επεξεργαστή, ορίζονται στις προεπιλεγμένες τιμές τους.
    typedef enum {         CANOF_PARSE_DISPLAY_NAME = 0x1,
CANOF_SET_DEFAULT_VALUES = 0x2
} CREATE_ASM_NAME_OBJ_FLAGS;

ASM_NAME απαρίθμηση

Το Αναγνωριστικό ιδιότητας απαρίθμησης ASM_NAME περιγράφει τα έγκυρα ονόματα από τα ζεύγη ονόματος-τιμής στο όνομα συγκρότησης. Δείτε το .NET Framework SDK για μια περιγραφή αυτών των ιδιοτήτων.
    typedef enum    {
ASM_NAME_PUBLIC_KEY = 0,
ASM_NAME_PUBLIC_KEY_TOKEN,
ASM_NAME_HASH_VALUE,
ASM_NAME_NAME,
ASM_NAME_MAJOR_VERSION,
ASM_NAME_MINOR_VERSION,
ASM_NAME_BUILD_NUMBER,
ASM_NAME_REVISION_NUMBER,
ASM_NAME_CULTURE,
ASM_NAME_PROCESSOR_ID_ARRAY,
ASM_NAME_OSINFO_ARRAY,
ASM_NAME_HASH_ALGID,
ASM_NAME_ALIAS,
ASM_NAME_CODEBASE_URL,
ASM_NAME_CODEBASE_LASTMOD,
ASM_NAME_NULL_PUBLIC_KEY,
ASM_NAME_NULL_PUBLIC_KEY_TOKEN,
ASM_NAME_CUSTOM,
ASM_NAME_NULL_CUSTOM,
ASM_NAME_MVID,
ASM_NAME_MAX_PARAMS
} ASM_NAME;

Η μέθοδος IAssemblyName::SetProperty

Η μέθοδος IAssemblyName::SetProperty προσθέτει ένα ζεύγος ονόματος-τιμής στο όνομα συγκρότησης ή, εάν ένα ζεύγος ονόματος-τιμής, με το ίδιο όνομα υπάρχει ήδη, να τροποποιεί ή να διαγράφει την τιμή του ένα ζεύγος ονόματος-τιμής.
    HRESULT SetProperty(        [in]    DWORD  PropertyId, 
[in] LPVOID pvProperty,
[in] DWORD cbProperty);

Οι παράμετροι ορίζονται ως εξής:
  • PropertyId - το Αναγνωριστικό που αντιπροσωπεύει το τμήμα ονόματος του το ζεύγος ονόματος-τιμής που είναι να προστεθεί ή να τροποποιηθεί. Αναγνωριστικά έγκυρη ιδιότητα ορίζονται στην απαρίθμηση ASM_NAME .
  • pvProperty - ένας δείκτης προς ένα buffer που περιέχει την τιμή της ιδιότητας.
  • cbProperty - το μήκος του buffer pvProperty σε byte. Εάν cbProperty είναι μηδέν, το ζεύγος ονόματος-τιμής καταργείται από το όνομα της συγκρότησης.

Η μέθοδος IAssemblyName::GetProperty

Η μέθοδος IAssemblyName::GetProperty ανακτά την τιμή από ένα ζεύγος ονόματος-τιμής στο όνομα της συγκρότησης που καθορίζει το όνομα.
    HRESULT GetProperty(        [in]         DWORD    PropertyId, 
[out] LPVOID pvProperty,
[in, out] LPDWORD pcbProperty);

Οι παράμετροι ορίζονται ως εξής:
  • PropertyId - το Αναγνωριστικό που αντιπροσωπεύει το όνομα του το ζεύγος ονόματος-τιμής, η τιμή του οποίου είναι να ανακτηθούν. Αναγνωριστικά καθορισμένη ιδιότητα ορίζονται στην απαρίθμηση ASM_NAME .
  • pvProperty - ένας δείκτης προς ένα buffer που θα περιέχει την τιμή της ιδιότητας.
  • cbProperty - το μήκος του buffer pvProperty , σε byte.

Η μέθοδος IAssemblyName::Finalize

Η μέθοδος IAssemblyName::Finalize "παγώνει" όνομα συγκρότησης. Πρόσθετες κλήσεις σε IAssemblyName::SetProperty θα το επιτύχετε αφού έχει κληθεί η μέθοδος.
HRESULT Finalize();

Η μέθοδος IAssemblyName::GetDisplayName

Η μέθοδος IAssemblyName::GetDisplayName επιστρέφει μια αναπαράσταση συμβολοσειράς του ονόματος συγκρότησης.
    HRESULT  GetDisplayName(        [out]       LPOLESTR  szDisplayName,
[in, out] LPDWORD pccDisplayName,
[in] DWORD dwDisplayFlags);

Οι παράμετροι ορίζονται ως εξής:
  • szDisplayName - ένας δείκτης προς ένα buffer που θα περιέχει το εμφανιζόμενο όνομα. Το εμφανιζόμενο όνομα αποδίδεται σε μορφή Unicode.
  • pccDisplayName - το μέγεθος του buffer σε χαρακτήρες (κατά την εισαγωγή). Το μήκος του το εμφανιζόμενο όνομα που επιστρέφεται (στην επιστροφή).
  • dwDisplayFlags - ένα ή περισσότερα από τα bit που ορίζεται στην απαρίθμηση ASM_DISPLAY_FLAGS :
    • * _VERSION -περιλαμβάνει τον αριθμό έκδοσης ως μέρος της το εμφανιζόμενο όνομα.
    • * _CULTURE -περιλαμβάνει την κουλτούρα.
    • * _PUBLIC_KEY_TOKEN -περιλαμβάνει το διακριτικό δημοσίου κλειδιού.
    • * _PUBLIC_KEY -περιλαμβάνει το δημόσιο κλειδί.
    • * _Προσαρμοσμένες -περιλαμβάνει το προσαρμοσμένο τμήμα από το όνομα της συγκρότησης.
    • * _PROCESSORARCHITECTURE -περιλαμβάνει την αρχιτεκτονική του επεξεργαστή.
    • * _LANGUAGEID -περιλαμβάνει το αναγνωριστικό γλώσσας.
    typedef enum    {
ASM_DISPLAYF_VERSION = 0x1,
ASM_DISPLAYF_CULTURE = 0x2,
ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4,
ASM_DISPLAYF_PUBLIC_KEY = 0x8,
ASM_DISPLAYF_CUSTOM = 0x10,
ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,
ASM_DISPLAYF_LANGUAGEID = 0x40

} ASM_DISPLAY_FLAGS;

Η μέθοδος IAssemblyName::GetName

Η μέθοδος IAssemblyName::GetName επιστρέφει το τμήμα ονόματος του το όνομα της συγκρότησης.
    HRESULT GetName(        [in, out] LPDWORD lpcwBuffer,
[out] WCHAR *pwzName);

Οι παράμετροι ορίζονται ως εξής:
  • lpcwBuffer - μέγεθος του buffer pwszName (κατά την εισαγωγή). Το μήκος του ονόματος (για επιστροφή).
  • pwszName - δείκτης στο buffer που θα περιέχει το τμήμα ονόματος του το όνομα της συγκρότησης.

Η μέθοδος IAssemblyName::GetVersion

Η μέθοδος IAssemblyName::GetVersion επιστρέφει το τμήμα έκδοσης από το όνομα της συγκρότησης.
HRESULT GetVersion(        [out] LPDWORD pdwVersionHi,
[out] LPDWORD pdwVersionLow);

Οι παράμετροι ορίζονται ως εξής:
  • pdwVersionHi - δείκτης για ένα DWORD που περιέχει τα επάνω 32 bit του αριθμού έκδοσης.
  • pdwVersionLow - δείκτης για ένα DWORD που περιέχουν τα μικρότερα 32 bit του αριθμού έκδοσης.

Η μέθοδος IAssemblyName::IsEqual

Η μέθοδος IAssemblyName::IsEqual συγκρίνει το όνομα της συγκρότησης στην άλλη ονόματα της συγκρότησης.
    HRESULT IsEqual(        [in] IAssemblyName *pName,
[in] DWORD dwCmpFlags);

Οι παράμετροι ορίζονται ως εξής:
  • pName - το όνομα της συγκρότησης για σύγκριση.
  • dwCmpFlags - δηλώνει το τμήμα του ονόματος συγκρότησης για χρήση σε σύγκριση.
Οι τιμές είναι ένα ή περισσότερα από τα bit που ορίζεται στην απαρίθμηση ASM_CMP_FLAGS :
    typedef enum    {
ASM_CMPF_NAME = 0x1,
ASM_CMPF_MAJOR_VERSION = 0x2,
ASM_CMPF_MINOR_VERSION = 0x4,
ASM_CMPF_BUILD_NUMBER = 0x8,
ASM_CMPF_REVISION_NUMBER = 0x10,
ASM_CMPF_PUBLIC_KEY_TOKEN = 0x20,
ASM_CMPF_CULTURE = 0x40,
ASM_CMPF_CUSTOM = 0x80,
ASM_CMPF_ALL = ASM_CMPF_NAME | ASM_CMPF_MAJOR_VERSION | ASM_CMPF_MINOR_VERSION |
ASM_CMPF_REVISION_NUMBER | ASM_CMPF_BUILD_NUMBER |
ASM_CMPF_PUBLIC_KEY_TOKEN | ASM_CMPF_CULTURE | ASM_CMPF_CUSTOM,
// For strongly named assemblies, ASM_CMPF_DEFAULT==ASM_CMPF_ALL.
// For simply named assemblies, this is also true. However, when
// performing IAssemblyName::IsEqual, the build number/revision
// number will be removed from the comparison.
ASM_CMPF_DEFAULT = 0x100
} ASM_CMP_FLAGS;

Οι επιστρεφόμενες τιμές είναι οι εξής:
  • S_OK: -τα ονόματα που ταιριάζουν με τα κριτήρια σύγκρισης.
  • S_FALSE: -δεν ταιριάζουν με τα ονόματα.

Η μέθοδος IAssemblyName::Clone

Η μέθοδος IAssemblyName::Clone δημιουργεί ένα αντίγραφο του ένα όνομα συγκρότησης.
    HRESULT Clone(        [out] IAssemblyName **pName);

Διασύνδεση IAssemblyEnum

Η διασύνδεση IAssemblyEnum απαριθμεί τις συγκροτήσεις στο GAC.
 [        local,
object,
uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),
pointer_default(unique)
]
interface IAssemblyEnum : IUnknown

Για να αποκτήσετε μια παρουσία του CreateAssemblyEnum API, κλήση CreateAssemblyNameObject API, ως εξής:
STDAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IUnknown *pUnkReserved, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
Οι παράμετροι ορίζονται ως εξής:
  • pEnum - δείκτης σε μια θέση μνήμης που περιέχει το δείκτη IAssemblyEnum .
  • pUnkReserved - πρέπει να είναι null.
  • pName - όνομα συγκρότησης που χρησιμοποιείται για να φιλτράρετε την απαρίθμηση. Μπορεί να είναι null για την απαρίθμηση όλες οι συγκροτήσεις στο GAC.
  • τιμή της dwFlags - ακριβώς ένα bit από την απαρίθμηση ASM_CACHE_FLAGS .
  • pvReserved - πρέπει να είναι NULL.

ASM_CACHE_FLAGS απαρίθμηση

Η απαρίθμηση ASM_CACHE_FLAGS περιέχει τις ακόλουθες τιμές:
  • ASM_CACHE_ZAP - απαριθμεί τη μνήμη cache συγκροτήσεων προ-μεταγλωττισμένη χρησιμοποιώντας Ngen.exe.
  • ASM_CACHE_GAC - απαριθμεί GAC.
  • ASM_CACHE_DOWNLOAD - απαριθμεί τις συγκροτήσεις που έχουν ληφθεί σε ζήτηση ή που έχουν αντιγραφεί σκιά.
IAssemblyName::GetDisplayName
typedef enum{
ASM_CACHE_ZAP = 0x1,
ASM_CACHE_GAC = 0x2,
ASM_CACHE_DOWNLOAD = 0x4
} ASM_CACHE_FLAGS;

Η μέθοδος IAssemblyEnum::GetNextAssembly

Η μέθοδος IAssemblyEnum::GetNextAssembly απαριθμεί τις συγκροτήσεις στο GAC.
    HRESULT GetNextAssembly    (
[in] LPVOID pvReserved,
[out] IAssemblyName **ppName,
[in] DWORD dwFlags
);

Οι παράμετροι ορίζονται ως εξής:
  • pvReserved - πρέπει να είναι null.
  • ppName - δείκτης σε μια θέση μνήμης που θα παραλάβει το δείκτη διασύνδεσης για το όνομα της συγκρότησης της επόμενης συγκρότησης που γίνεται απαρίθμηση.
  • τιμή της dwFlags - πρέπει να είναι μηδέν.

Διασύνδεση IInstallReferenceItem

Η διασύνδεση IInstallReferenceItem αντιπροσωπεύει μια αναφορά που έχει οριστεί σε μια συγκρότηση στο GAC. Γίνεται επιστροφή των παρουσιών του IInstallReferenceIteam από τη διασύνδεση IInstallReferenceEnum .
[        local,
object,
uuid(582dac66-e678-449f-aba6-6faaec8a9394),
pointer_default(unique)
]
interface IInstallReferenceItem : IUnknown

Η μέθοδος IInstallReferenceItem::GetReference

Η μέθοδος IInstallReferenceItem::GetReference επιστρέφει μια δομή FUSION_INSTALL_REFERENCE .
    HRESULT GetReference    (
[out] LPFUSION_INSTALL_REFERENCE *ppRefData,
[in] DWORD dwFlags,
[in] LPVOID pvReserved
);

Οι παράμετροι ορίζονται ως εξής:
  • ppRefData - ένας δείκτης σε μια δομή FUSION_INSTALL_REFERENCE . Η μνήμη έχει εκχωρηθεί από τη μέθοδο GetReference και αποδεσμεύεται όταν κυκλοφορήσει IInstallReferenceItem . Καλούντες πρέπει να έχει μια αναφορά σε αυτό το buffer μετά την κυκλοφορία του αντικειμένου IInstallReferenceItem .
  • τιμή της dwFlags - πρέπει να είναι μηδέν.
  • pvReserved - πρέπει να είναι null.

Διασύνδεση IInstallReferenceEnum

Η διασύνδεση IInstallReferenceEnum απαριθμεί όλες τις αναφορές που έχουν οριστεί για μια συγκρότηση στο GAC.

ΣΗΜΕΊΩΣΗ: οι αναφορές που ανήκουν στη συγκρότηση είναι κλειδωμένα για αλλαγές κατά απαριθμίζονται αυτές τις αναφορές.
[        local,
object,
uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),
pointer_default(unique)
]
interface IInstallReferenceEnum : IUnknown

Για να αποκτήσετε μια παρουσία του CreateInstallReferenceEnum API, κλήση CreateInstallReferenceEnum API, ως εξής:
STDAPI CreateInstallReferenceEnum(IInstallReferenceEnum **ppRefEnum, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
Οι παράμετροι ορίζονται ως εξής:
  • ppRefEnum - ένας δείκτης σε μια θέση μνήμης που λαμβάνει το δείκτη IInstallReferenceEnum .
  • pName - το όνομα της συγκρότησης που απαριθμούνται στις αναφορές.
  • τιμή της dwFlags - πρέπει να είναι μηδέν.
  • pvReserved - πρέπει να είναι null.

Η μέθοδος IInstallReferenceEnum::GetNextInstallReferenceItem

IInstallReferenceEnum::GetNextInstallReferenceItem επιστρέφει την επόμενη πληροφορίες αναφοράς για μια συγκρότηση.
    HRESULT GetNextInstallReferenceItem            (
[out] IInstallReferenceItem **ppRefItem,
[in] DWORD dwFlags,
[in] LPVOID pvReserved
);

Οι παράμετροι ορίζονται ως εξής:
  • ppRefItem - δείκτης σε μια θέση μνήμης που λαμβάνει το δείκτη IInstallReferenceItem .
  • τιμή της dwFlags - πρέπει να είναι μηδέν.
  • pvReserved - πρέπει να είναι null.
Τιμές επιστροφής είναι οι εξής:
  • S_OK: -το επόμενο στοιχείο επιστρέφεται με επιτυχία.
  • S_FALSE: -δεν υπάρχουν άλλα στοιχεία.

GetCachePath API

Το GetCachePath API επιστρέφει τη θέση αποθήκευσης της GAC.
STDAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath);
Οι παράμετροι ορίζονται ως εξής:
  • dwCacheFlags - ακριβώς ένα από τα bit που ορίζεται στην απαρίθμηση ASM_CACHE_FLAGS .
  • pwzCachePath - δείκτης για ένα buffer που θα παραλάβει τη διαδρομή του GAC ως μια συμβολοσειρά Unicode.
  • pcchPath - το μήκος του buffer pwszCachePath , σε χαρακτήρες Unicode.
// ==++==// 
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// File: fusion.idl
//
// Contents: Fusion Interfaces
//
// Classes:
//
// Functions:
//
//
//----------------------------------------------------------------------------
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// fusion.h")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// Copyright (c) Microsoft Corporation. All rights reserved.")
cpp_quote("//")
cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF")
cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO")
cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A")
cpp_quote("// PARTICULAR PURPOSE.")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("")
cpp_quote("#ifdef _MSC_VER")
cpp_quote("#pragma comment(lib,\"uuid.lib\")")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("//---------------------------------------------------------------------------=")
cpp_quote("// Fusion Interfaces.")
cpp_quote("")

import "objidl.idl";

cpp_quote("#ifdef _MSC_VER")
cpp_quote("#pragma once")
cpp_quote("#endif")

interface IAssemblyCache;
interface IAssemblyCacheItem;
interface IAssemblyName;
interface IAssemblyEnum;


typedef enum
{
ASM_CACHE_ZAP = 0x1,
ASM_CACHE_GAC = 0x2,
ASM_CACHE_DOWNLOAD = 0x4
} ASM_CACHE_FLAGS;

///////////////////////////////////////////////////////////////////////////////
//
// IAssemblyCache
//
///////////////////////////////////////////////////////////////////////////////

[
local,
object,
uuid(e707dcde-d1cd-11d2-bab9-00c04f8eceae),
pointer_default(unique)
]
interface IAssemblyCache : IUnknown
{
cpp_quote("// {8cedc215-ac4b-488b-93c0-a50a49cb2fb8}")
cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID, 0x8cedc215, 0xac4b, 0x488b, 0x93, 0xc0, _
0xa5, 0x0a, 0x49, 0xcb, 0x2f, 0xb8);")
cpp_quote("")
cpp_quote("// {b02f9d65-fb77-4f7a-afa5-b391309f11c9}")
cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_FILEPATH_GUID, 0xb02f9d65, 0xfb77, 0x4f7a, 0xaf, 0xa5, 0xb3, 0x91, _
0x30, 0x9f, 0x11, 0xc9);")
cpp_quote("")
cpp_quote("// {2ec93463-b0c3-45e1-8364-327e96aea856}")
cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_OPAQUE_STRING_GUID, 0x2ec93463, 0xb0c3, 0x45e1, 0x83, 0x64, 0x32, _
0x7e, 0x96, 0xae, 0xa8, 0x56);")

cpp_quote(" // {25df0fc1-7f97-4070-add7-4b13bbfd7cb8} // this GUID cannot be used for installing into GAC.")
cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_MSI_GUID, 0x25df0fc1, 0x7f97, 0x4070, 0xad, 0xd7, 0x4b, 0x13, 0xbb, 0xfd, _
0x7c, 0xb8); ")


typedef struct _FUSION_INSTALL_REFERENCE_
{
DWORD cbSize;
DWORD dwFlags;
GUID guidScheme; // contains one of the pre-defined guids.
LPCWSTR szIdentifier; // unique identifier for app installing this assembly.
LPCWSTR szNonCannonicalData; // data is description; relevent to the guid above
} FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE;

typedef const FUSION_INSTALL_REFERENCE *LPCFUSION_INSTALL_REFERENCE;


typedef struct _ASSEMBLY_INFO
{
ULONG cbAssemblyInfo; // size of this structure for future expansion
DWORD dwAssemblyFlags;
ULARGE_INTEGER uliAssemblySizeInKB;
LPWSTR pszCurrentAssemblyPathBuf;
ULONG cchBuf; // size of path buf.
} ASSEMBLY_INFO;

cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_REFRESH (0x00000001)")
cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_FORCE_REFRESH (0x00000002)")

cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED (1)")
cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE (2)")
cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED (3)")
cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING (4)")
cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES (5)")
cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND (6)")

cpp_quote("#define QUERYASMINFO_FLAG_VALIDATE (0x00000001)")
cpp_quote("#define QUERYASMINFO_FLAG_GETSIZE (0x00000002)")

// these flags are for dwAssemblyFlags field in struct _ASSEMBLY_INFO
cpp_quote("#define ASSEMBLYINFO_FLAG_INSTALLED (0x00000001)")
cpp_quote("#define ASSEMBLYINFO_FLAG_PAYLOADRESIDENT (0x00000002)")

HRESULT UninstallAssembly(
[in] DWORD dwFlags,
[in] LPCWSTR pszAssemblyName,
[in] LPCFUSION_INSTALL_REFERENCE pRefData,
[out, optional] ULONG *pulDisposition
);

HRESULT QueryAssemblyInfo(
[in] DWORD dwFlags,
[in] LPCWSTR pszAssemblyName,
[in, out] ASSEMBLY_INFO *pAsmInfo
);

HRESULT CreateAssemblyCacheItem(
[in] DWORD dwFlags,
[in] PVOID pvReserved,
[out] IAssemblyCacheItem **ppAsmItem,
[in, optional] LPCWSTR pszAssemblyName // uncanonicalized, comma separated name=value pairs.
);

HRESULT CreateAssemblyScavenger
(
[out] IUnknown **ppUnkReserved
);

HRESULT InstallAssembly( // if you use this, fusion will do the streaming & commit.
[in] DWORD dwFlags,
[in] LPCWSTR pszManifestFilePath,
[in] LPCFUSION_INSTALL_REFERENCE pRefData
);

}


///////////////////////////////////////////////////////////////////////////////
//
// IAssemblyCacheItem
//
///////////////////////////////////////////////////////////////////////////////

[
local,
object,
uuid(9e3aaeb4-d1cd-11d2-bab9-00c04f8eceae),
pointer_default(unique)
]
interface IAssemblyCacheItem : IUnknown
{
cpp_quote("#define STREAM_FORMAT_COMPLIB_MODULE 0")
cpp_quote("#define STREAM_FORMAT_COMPLIB_MANIFEST 1")
cpp_quote("#define STREAM_FORMAT_WIN32_MODULE 2")
cpp_quote("#define STREAM_FORMAT_WIN32_MANIFEST 4")

cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_REFRESH (0x00000001)")
cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_FORCE_REFRESH (0x00000002)")

cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_INSTALLED (1)") // first time install
cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_REFRESHED (2)") // overwrite, if existing
cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_ALREADY_INSTALLED (3)") // existing,


HRESULT CreateStream(
[in] DWORD dwFlags, // For general API flags
[in] LPCWSTR pszStreamName, // Name of the stream to be passed in
[in] DWORD dwFormat, // format of the file to be streamed in.
[in] DWORD dwFormatFlags, // format-specific flags
[out] IStream **ppIStream,
[in, optional] ULARGE_INTEGER *puliMaxSize // Max size of the Stream.
);

HRESULT Commit
(
[in] DWORD dwFlags, // For general API flags like IASSEMBLYCACHEITEM _COMMIT_FLAG_REFRESH
[out, optional] ULONG *pulDisposition
);

HRESULT AbortItem(); // If you have created IAssemblyCacheItem and don't plan to use it, its good idea to call
AbortItem before releasing it.

}



///////////////////////////////////////////////////////////////////////////////
//
// IAssemblyName
//
///////////////////////////////////////////////////////////////////////////////

[
local,
object,
uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),
pointer_default(unique)
]
interface IAssemblyName: IUnknown
{
typedef [unique] IAssemblyName *LPASSEMBLYNAME;

typedef enum {
CANOF_PARSE_DISPLAY_NAME = 0x1,
CANOF_SET_DEFAULT_VALUES = 0x2
} CREATE_ASM_NAME_OBJ_FLAGS;

typedef enum
{
ASM_NAME_PUBLIC_KEY = 0,
ASM_NAME_PUBLIC_KEY_TOKEN,
ASM_NAME_HASH_VALUE,
ASM_NAME_NAME,
ASM_NAME_MAJOR_VERSION,
ASM_NAME_MINOR_VERSION,
ASM_NAME_BUILD_NUMBER,
ASM_NAME_REVISION_NUMBER,
ASM_NAME_CULTURE,
ASM_NAME_PROCESSOR_ID_ARRAY,
ASM_NAME_OSINFO_ARRAY,
ASM_NAME_HASH_ALGID,
ASM_NAME_ALIAS,
ASM_NAME_CODEBASE_URL,
ASM_NAME_CODEBASE_LASTMOD,
ASM_NAME_NULL_PUBLIC_KEY,
ASM_NAME_NULL_PUBLIC_KEY_TOKEN,
ASM_NAME_CUSTOM,
ASM_NAME_NULL_CUSTOM,
ASM_NAME_MVID,
ASM_NAME_MAX_PARAMS
} ASM_NAME;

typedef enum
{
ASM_DISPLAYF_VERSION = 0x1,
ASM_DISPLAYF_CULTURE = 0x2,
ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4,
ASM_DISPLAYF_PUBLIC_KEY = 0x8,
ASM_DISPLAYF_CUSTOM = 0x10,
ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,
ASM_DISPLAYF_LANGUAGEID = 0x40

} ASM_DISPLAY_FLAGS;

typedef enum
{
ASM_CMPF_NAME = 0x1,
ASM_CMPF_MAJOR_VERSION = 0x2,
ASM_CMPF_MINOR_VERSION = 0x4,
ASM_CMPF_BUILD_NUMBER = 0x8,
ASM_CMPF_REVISION_NUMBER = 0x10,
ASM_CMPF_PUBLIC_KEY_TOKEN = 0x20,
ASM_CMPF_CULTURE = 0x40,
ASM_CMPF_CUSTOM = 0x80,
ASM_CMPF_ALL = ASM_CMPF_NAME | ASM_CMPF_MAJOR_VERSION | ASM_CMPF_MINOR_VERSION |
ASM_CMPF_REVISION_NUMBER | ASM_CMPF_BUILD_NUMBER |
ASM_CMPF_PUBLIC_KEY_TOKEN | ASM_CMPF_CULTURE | ASM_CMPF_CUSTOM,
// For strongly named assemblies, ASM_CMPF_DEFAULT==ASM_CMPF_ALL.
// For simply named assemblies, this is also true, however, when
// performing IAssemblyName::IsEqual, the build number/revision
// number will be removed from the comparision.
ASM_CMPF_DEFAULT = 0x100
} ASM_CMP_FLAGS;

HRESULT SetProperty(
[in] DWORD PropertyId,
[in] LPVOID pvProperty,
[in] DWORD cbProperty);

HRESULT GetProperty(
[in] DWORD PropertyId,
[out] LPVOID pvProperty,
[in, out] LPDWORD pcbProperty);

HRESULT Finalize();

HRESULT GetDisplayName(
[out] LPOLESTR szDisplayName,
[in, out] LPDWORD pccDisplayName,
[in] DWORD dwDisplayFlags);

HRESULT BindToObject(
[in] REFIID refIID,
[in] IUnknown *pUnkSink,
[in] IUnknown *pUnkContext,
[in] LPCOLESTR szCodeBase,
[in] LONGLONG llFlags,
[in] LPVOID pvReserved,
[in] DWORD cbReserved,
[out] LPVOID *ppv);


HRESULT GetName(
[in, out] LPDWORD lpcwBuffer,
[out] WCHAR *pwzName);

HRESULT GetVersion(
[out] LPDWORD pdwVersionHi,
[out] LPDWORD pdwVersionLow);

HRESULT IsEqual(
[in] IAssemblyName *pName,
[in] DWORD dwCmpFlags);

HRESULT Clone(
[out] IAssemblyName **pName);


}

///////////////////////////////////////////////////////////////////////////////
//
// IAssemblyEnum
//
///////////////////////////////////////////////////////////////////////////////
[
local,
object,
uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),
pointer_default(unique)
]
interface IAssemblyEnum : IUnknown
{

HRESULT GetNextAssembly
(
[in] LPVOID pvReserved,
[out] IAssemblyName **ppName,
[in] DWORD dwFlags
);

HRESULT Reset(void);

HRESULT Clone
(
[out] IAssemblyEnum **ppEnum
);

}


///////////////////////////////////////////////////////////////////////////////
//
// IInstallReferenceItem
//
///////////////////////////////////////////////////////////////////////////////

[
local,
object,
uuid(582dac66-e678-449f-aba6-6faaec8a9394),
pointer_default(unique)
]
interface IInstallReferenceItem : IUnknown
{
HRESULT GetReference
(
[out] LPFUSION_INSTALL_REFERENCE *ppRefData,
[in] DWORD dwFlags,
[in] LPVOID pvReserved
);
}

///////////////////////////////////////////////////////////////////////////////
//
// IInstallReferenceEnum
//
///////////////////////////////////////////////////////////////////////////////

[
local,
object,
uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),
pointer_default(unique)
]
interface IInstallReferenceEnum : IUnknown
{
HRESULT GetNextInstallReferenceItem
(
[out] IInstallReferenceItem **ppRefItem,
[in] DWORD dwFlags,
[in] LPVOID pvReserved
);
}

#pragma midl_echo("STDAPI CreateInstallReferenceEnum(IInstallReferenceEnum **ppRefEnum, IAssemblyName *pName, DWORD dwFlags, _
LPVOID pvReserved); ")
#pragma midl_echo("STDAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IUnknown *pUnkReserved, IAssemblyName *pName, DWORD dwFlags, _
LPVOID pvReserved); ")
#pragma midl_echo("STDAPI CreateAssemblyNameObject(LPASSEMBLYNAME *ppAssemblyNameObj, LPCWSTR szAssemblyName, DWORD dwFlags, _
LPVOID pvReserved); ")
#pragma midl_echo("STDAPI CreateAssemblyCache(IAssemblyCache **ppAsmCache, DWORD dwReserved); ")
#pragma midl_echo("STDAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath); ")

Ιδιότητες

Αναγνωριστικό άρθρου: 317540 - Τελευταία αναθεώρηση: 16 Ιαν 2017 - Αναθεώρηση: 1

Σχόλια