Функция GetClassFile (objbase.h)
Возвращает идентификатор CLSID, связанный с указанным именем файла.
Синтаксис
HRESULT GetClassFile(
[in] LPCOLESTR szFilename,
[out] CLSID *pclsid
);
Параметры
[in] szFilename
Указатель на имя файла, для которого запрашивается связанный идентификатор CLSID.
[out] pclsid
Указатель на расположение, в котором при возврате записывается связанный идентификатор CLSID.
Возвращаемое значение
Эта функция может возвращать любые ошибки файловой системы, а также следующие значения.
Код возврата | Описание |
---|---|
|
Идентификатор CLSID успешно получен. |
|
Не удается открыть указанное имя файла. |
|
Указанное расширение в реестре является недопустимым. |
Комментарии
При указании имени файла GetClassFile находит идентификатор CLSID, связанный с этим файлом. Примеры его использования приведены в функции OleCreateFromFile , которая передает имя файла и требует связанного идентификатора CLSID, а также в реализации OLE IMoniker::BindToObject, которая при активации ссылки на файловый документ вызывает GetClassFile для поиска приложения-объекта, которое может открыть файл.
GetClassFile использует следующие стратегии для определения соответствующего идентификатора CLSID:
- Если файл содержит объект хранилища, как определено вызовом функции StgIsStorageFile , GetClassFile возвращает идентификатор CLSID, записанный с помощью метода IStorage::SetClass .
-
Если файл не является объектом хранилища, GetClassFile пытается сопоставить различные биты в файле с шаблоном в реестре. Шаблон в реестре может содержать ряд записей формы:
entry = offset, cb, mask, value
Значение элемента смещения представляет собой смещение от начала или конца файла, а элемент cb — длину в байтах. Эти два значения представляют определенный диапазон байтов в файле. (Отрицательное значение для элемента смещения интерпретируется из конца файла.) Значение маски — это битовая маска, используемая для выполнения логической операции AND с диапазоном байтов, заданным смещением и cb. Результат логической операции AND сравнивается с элементом значения . Если маска опущена, предполагается, что это все маски.
Каждый шаблон в реестре сравнивается с файлом в порядке шаблонов в базе данных. Первый шаблон, в котором каждый из элементов значений соответствует результату операции AND, определяет CLSID файла. Например, шаблон, содержащийся в следующих записях реестра, требует, чтобы первые четыре байта были AB CD 12 34, а последние четыре байта — FE FE FE FE:
HKEY_CLASSES_ROOT FileType {12345678-0000-0001-C000-000000000095} 0 = 0, 4, FFFFFFFF, ABCD1234 1 = -4, 4, , FEFEFEFE
Если файл содержит такой шаблон, идентификатор CLSID {12345678-0000-0001-C000-0000000000095} будет связан с этим файлом.
- Если описанные выше стратегии завершаются ошибкой, GetClassFile ищет в реестре раздел расширения файла , соответствующий ext-части имени файла. Если запись базы данных содержит допустимый ИДЕНТИФИКАТОР CLSID, GetClassFile возвращает этот идентификатор CLSID.
- Если все стратегии завершаются сбоем, функция возвращает MK_E_INVALIDEXTENSION.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Профессиональная [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows 2000 Server [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | objbase.h |
Библиотека | Ole32.lib |
DLL | Ole32.dll |
Набор API | ext-ms-win-com-ole32-l1-1-5 (появилось в Windows 10 версии 10.0.15063) |