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 |
---|---|
|
El CLSID se recuperó correctamente. |
|
No se puede abrir el nombre de archivo especificado. |
|
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:
- 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 .
-
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.
- 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.
- 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) |