Função GetClassFile (objbase.h)
Retorna o CLSID associado ao nome do arquivo especificado.
HRESULT GetClassFile(
[in] LPCOLESTR szFilename,
[out] CLSID *pclsid
);
[in] szFilename
Um ponteiro para o nome do arquivo para o qual você está solicitando o CLSID associado.
[out] pclsid
Um ponteiro para o local em que o CLSID associado é gravado no retorno.
Essa função pode retornar qualquer um dos erros do sistema de arquivos, bem como os valores a seguir.
Código de retorno | Descrição |
---|---|
|
O CLSID foi recuperado com êxito. |
|
Não é possível abrir o nome do arquivo especificado. |
|
A extensão especificada no registro é inválida. |
Quando dado um nome de arquivo, GetClassFile localiza o CLSID associado a esse arquivo. Exemplos de seu uso estão na função OleCreateFromFile , que é passada um nome de arquivo e requer um CLSID associado e na implementação OLE de IMoniker::BindToObject, que, quando um link para um documento baseado em arquivo é ativado, chama GetClassFile para localizar o aplicativo de objeto que pode abrir o arquivo.
GetClassFile usa as seguintes estratégias para determinar um CLSID apropriado:
- Se o arquivo contiver um objeto de armazenamento, conforme determinado por uma chamada para a função StgIsStorageFile , GetClassFile retornará o CLSID que foi gravado com o método IStorage::SetClass .
-
Se o arquivo não for um objeto de armazenamento, GetClassFile tentará corresponder vários bits no arquivo com um padrão no Registro. Um padrão no registro pode conter uma série de entradas do formulário:
entry = offset, cb, mask, value
O valor do item de deslocamento é um deslocamento do início ou final do arquivo e o item cb é um comprimento em bytes. Esses dois valores representam um intervalo de bytes específico no arquivo. (Um valor negativo para o item de deslocamento é interpretado a partir do final do arquivo). O valor da máscara é uma máscara de bits usada para executar uma operação AND lógica com o intervalo de bytes especificado por offset e cb. O resultado da operação AND lógica é comparado com o item de valor . Se a máscara for omitida, supõe-se que ela seja todas.
Cada padrão no Registro é comparado ao arquivo na ordem dos padrões no banco de dados. O primeiro padrão em que cada um dos itens de valor corresponde ao resultado da operação AND determina o CLSID do arquivo. Por exemplo, o padrão contido nas seguintes entradas do registro requer que os quatro primeiros bytes sejam AB CD 12 34 e que os últimos quatro bytes sejam FE FE FE FE:
HKEY_CLASSES_ROOT FileType {12345678-0000-0001-C000-000000000095} 0 = 0, 4, FFFFFFFF, ABCD1234 1 = -4, 4, , FEFEFEFE
Se um arquivo contiver esse padrão, o CLSID {12345678-0000-0001-C000-000000000095} será associado a esse arquivo.
- Se as estratégias acima falharem, GetClassFile pesquisará a chave de Extensão de Arquivo no Registro que corresponde à parte .ext do nome do arquivo. Se a entrada do banco de dados contiver um CLSID válido, GetClassFile retornará esse CLSID.
- Se todas as estratégias falharem, a função retornará MK_E_INVALIDEXTENSION.
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 2000 Professional [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte | Windows 2000 Server [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | objbase.h |
Biblioteca | Ole32.lib |
DLL | Ole32.dll |
Conjunto de APIs | ext-ms-win-com-ole32-l1-1-5 (introduzido em Windows 10, versão 10.0.15063) |