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 |
---|---|
|
Die CLSID wurde erfolgreich abgerufen. |
|
Der angegebene Dateiname kann nicht geöffnet werden. |
|
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:
- 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.
-
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.
- 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.
- 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) |