Función GetClassFile (objbase.h)

Devuelve el CLSID asociado al nombre de archivo especificado.

Sintaxis

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

Parámetros

[in] szFilename

Puntero al nombre de archivo para el que solicita el CLSID asociado.

[out] pclsid

Puntero a la ubicación donde se escribe el CLSID asociado en la devolución.

Valor devuelto

Esta función puede devolver cualquiera de los errores del sistema de archivos, así como los siguientes valores.

Código devuelto Descripción
S_OK
El CLSID se recuperó correctamente.
MK_E_CANTOPENFILE
No se puede abrir el nombre de archivo especificado.
MK_E_INVALIDEXTENSION
La extensión especificada en el registro no es válida.

Comentarios

Cuando se le asigna un nombre de archivo, GetClassFile busca el CLSID asociado a ese archivo. Algunos ejemplos de su uso están en la función OleCreateFromFile , que se pasa un nombre de archivo y requiere un CLSID asociado, y en la implementación OLE de IMoniker::BindToObject, que, cuando se activa un vínculo a un documento basado en archivos, llama a GetClassFile para localizar la aplicación de objeto que puede abrir el archivo.

GetClassFile usa las siguientes estrategias para determinar un CLSID adecuado:

  1. Si el archivo contiene un objeto de almacenamiento, determinado por una llamada a la función StgIsStorageFile , GetClassFile devuelve el CLSID que se escribió con el método IStorage::SetClass .
  2. Si el archivo no es un objeto de almacenamiento, GetClassFile intenta hacer coincidir varios bits en el archivo con un patrón del registro. Un patrón del Registro puede contener una serie de entradas del formulario:

    entry = offset, cb, mask, value

    El valor del elemento de desplazamiento es un desplazamiento desde el principio o el final del archivo y el elemento cb es una longitud en bytes. Estos dos valores representan un intervalo de bytes determinado en el archivo. (Un valor negativo para el elemento de desplazamiento se interpreta desde el final del archivo). El valor de máscara es una máscara de bits que se usa para realizar una operación AND lógica con el intervalo de bytes especificado por offset y cb. El resultado de la operación AND lógica se compara con el elemento de valor . Si se omite la máscara , se supone que todas son todas.

    Cada patrón del Registro se compara con el archivo en el orden de los patrones de la base de datos. El primer patrón donde cada uno de los elementos de valor coincide con el resultado de la operación AND determina el CLSID del archivo. Por ejemplo, el patrón contenido en las siguientes entradas del registro requiere que los cuatro primeros bytes sean AB CD 12 34 y que los últimos cuatro bytes sean FE FE FE:

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

    Si un archivo contiene este patrón, el CLSID {12345678-0000-0001-C000-00000000000095} se asociará con este archivo.

  3. Si se produce un error en las estrategias anteriores, GetClassFile busca la clave de extensión de archivo en el registro que corresponde a la parte .ext del nombre de archivo. Si la entrada de la base de datos contiene un CLSID válido, GetClassFile devuelve ese CLSID.
  4. Si se produce un error en todas las estrategias, la función devuelve MK_E_INVALIDEXTENSION.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows 2000 Server [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado objbase.h
Library Ole32.lib
Archivo DLL Ole32.dll
Conjunto de API ext-ms-win-com-ole32-l1-1-5 (introducido en Windows 10, versión 10.0.15063)

Consulte también

WriteClassStg