Функция GetClassFile (objbase.h)

Возвращает идентификатор CLSID, связанный с указанным именем файла.

Синтаксис

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

Параметры

[in] szFilename

Указатель на имя файла, для которого запрашивается связанный идентификатор CLSID.

[out] pclsid

Указатель на расположение, в котором при возврате записывается связанный идентификатор CLSID.

Возвращаемое значение

Эта функция может возвращать любые ошибки файловой системы, а также следующие значения.

Код возврата Описание
S_OK
Идентификатор CLSID успешно получен.
MK_E_CANTOPENFILE
Не удается открыть указанное имя файла.
MK_E_INVALIDEXTENSION
Указанное расширение в реестре является недопустимым.

Комментарии

При указании имени файла GetClassFile находит идентификатор CLSID, связанный с этим файлом. Примеры его использования приведены в функции OleCreateFromFile , которая передает имя файла и требует связанного идентификатора CLSID, а также в реализации OLE IMoniker::BindToObject, которая при активации ссылки на файловый документ вызывает GetClassFile для поиска приложения-объекта, которое может открыть файл.

GetClassFile использует следующие стратегии для определения соответствующего идентификатора CLSID:

  1. Если файл содержит объект хранилища, как определено вызовом функции StgIsStorageFile , GetClassFile возвращает идентификатор CLSID, записанный с помощью метода IStorage::SetClass .
  2. Если файл не является объектом хранилища, 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} будет связан с этим файлом.

  3. Если описанные выше стратегии завершаются ошибкой, GetClassFile ищет в реестре раздел расширения файла , соответствующий ext-части имени файла. Если запись базы данных содержит допустимый ИДЕНТИФИКАТОР CLSID, GetClassFile возвращает этот идентификатор CLSID.
  4. Если все стратегии завершаются сбоем, функция возвращает 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)

См. также раздел

WriteClassStg