Freigeben über


GetClassFile-Funktion (objbase.h)

Gibt die CLSID zurück, die dem angegebenen Dateinamen zugeordnet ist.

Syntax

HRESULT GetClassFile(
  [in]  LPCOLESTR szFilename,
  [out] CLSID     *pclsid
);

Parameter

[in] szFilename

Ein Zeiger auf den Dateinamen, für den Sie die zugeordnete CLSID anfordern.

[out] pclsid

Ein Zeiger auf den Speicherort, an dem die zugeordnete CLSID bei der Rückgabe geschrieben wird.

Rückgabewert

Diese Funktion kann alle Dateisystemfehler sowie die folgenden Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Die CLSID wurde erfolgreich abgerufen.
MK_E_CANTOPENFILE
Der angegebene Dateiname kann nicht geöffnet werden.
MK_E_INVALIDEXTENSION
Die angegebene Erweiterung in der Registrierung ist ungültig.

Hinweise

Wenn ein Dateiname angegeben wird, findet GetClassFile die CLSID, die dieser Datei zugeordnet ist. Beispiele für die Verwendung sind die OleCreateFromFile-Funktion , die einen Dateinamen übergeben und eine zugeordnete CLSID erfordert, und in der OLE-Implementierung von IMoniker::BindToObject, die getClassFile aufruft, wenn ein Link zu einem dateibasierten Dokument aktiviert wird, um die Objektanwendung zu suchen, die die Datei öffnen kann.

GetClassFile verwendet die folgenden Strategien, um eine geeignete CLSID zu bestimmen:

  1. Wenn die Datei ein Speicherobjekt enthält, wie durch einen Aufruf der StgIsStorageFile-Funktion bestimmt, gibt GetClassFile die CLSID zurück, die mit der IStorage::SetClass-Methode geschrieben wurde.
  2. Wenn die Datei kein Speicherobjekt ist, versucht GetClassFile , verschiedene Bits in der Datei mit einem Muster in der Registrierung abzugleichen. Ein Muster in der Registrierung kann eine Reihe von Einträgen des Formulars enthalten:

    entry = offset, cb, mask, value

    Der Wert des Offsetelements ist ein Offset vom Anfang oder Ende der Datei, und das cb-Element hat eine Länge in Byte. Diese beiden Werte stellen einen bestimmten Bytebereich in der Datei dar. (Ein negativer Wert für das Offsetelement wird vom Ende der Datei interpretiert.) Der Maskenwert ist eine Bitmaske, die zum Ausführen eines logischen AND-Vorgangs mit dem bytebereich verwendet wird, der durch Offset und cb angegeben wird. Das Ergebnis des logischen AND-Vorgangs wird mit dem Wertelement verglichen. Wenn die Maske weggelassen wird, wird davon ausgegangen, dass es sich um alle handelt.

    Jedes Muster in der Registrierung wird mit der Datei in der Reihenfolge der Muster in der Datenbank verglichen. Das erste Muster, bei dem jedes der Wertelemente mit dem Ergebnis des AND-Vorgangs übereinstimmt, bestimmt die CLSID der Datei. Beispielsweise erfordert das Muster in den folgenden Einträgen der Registrierung, dass die ersten vier Bytes AB CD 12 34 und die letzten vier Bytes FE FE FE sind:

    HKEY_CLASSES_ROOT 
       FileType
          {12345678-0000-0001-C000-000000000095}
             0 = 0, 4, FFFFFFFF, ABCD1234 
             1 = -4, 4, , FEFEFEFE 

    Wenn eine Datei ein solches Muster enthält, wird dieser Datei die CLSID {12345678-0000-0001-C000-00000000095} zugeordnet.

  3. Wenn die oben genannten Strategien fehlschlagen, sucht GetClassFile in der Registrierung nach dem Schlüssel für die Dateierweiterung , der dem EXT-Teil des Dateinamens entspricht. Wenn der Datenbankeintrag eine gültige CLSID enthält, gibt GetClassFile diese CLSID zurück.
  4. Wenn alle Strategien fehlschlagen, gibt die Funktion MK_E_INVALIDEXTENSION zurück.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile objbase.h
Bibliothek Ole32.lib
DLL Ole32.dll
APIs ext-ms-win-com-ole32-l1-1-5 (eingeführt in Windows 10, Version 10.0.15063)

Weitere Informationen

WriteClassStg