Funzione GetClassFile (objbase.h)

Restituisce il CLSID associato al nome del file specificato.

Sintassi

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

Parametri

[in] szFilename

Puntatore al nome del file per cui si richiede CLSID associato.

[out] pclsid

Puntatore alla posizione in cui viene scritto CLSID associato sul ritorno.

Valore restituito

Questa funzione può restituire uno degli errori del file system, nonché i valori seguenti.

Codice restituito Descrizione
S_OK
ClSID è stato recuperato correttamente.
MK_E_CANTOPENFILE
Impossibile aprire il nome del file specificato.
MK_E_INVALIDEXTENSION
L'estensione specificata nel Registro di sistema non è valida.

Commenti

Quando si specifica un nome di file, GetClassFile trova il CLSID associato a tale file. Gli esempi di utilizzo sono nella funzione OleCreateFromFile , che viene passata un nome file e richiedono un CLSID associato e nell'implementazione OLE di IMoniker::BindToObject, che, quando viene attivato un collegamento a un documento basato su file, chiama GetClassFile per individuare l'applicazione oggetto che può aprire il file.

GetClassFile usa le strategie seguenti per determinare un CLSID appropriato:

  1. Se il file contiene un oggetto di archiviazione, come determinato da una chiamata alla funzione StgIsStorageFile , GetClassFile restituisce il CLSID scritto con il metodo IStorage::SetClass .
  2. Se il file non è un oggetto di archiviazione, GetClassFile tenta di corrispondere a vari bit nel file rispetto a un modello nel Registro di sistema. Un modello nel Registro di sistema può contenere una serie di voci del modulo:

    entry = offset, cb, mask, value

    Il valore dell'elemento di offset è un offset dall'inizio o dalla fine del file e l'elemento cb è una lunghezza in byte. Questi due valori rappresentano un intervallo di byte specifico nel file. (Valore negativo per l'elemento di offset interpretato dalla fine del file). Il valore della maschera è una maschera bit usata per eseguire un'operazione AND logica con l'intervallo di byte specificato da offset e cb. Il risultato dell'operazione AND logica viene confrontato con l'elemento valore . Se la maschera viene omessa, si presuppone che siano tutte quelle.

    Ogni modello nel Registro di sistema viene confrontato con il file nell'ordine dei modelli nel database. Il primo modello in cui ognuno degli elementi del valore corrisponde al risultato dell'operazione AND determina il CLSID del file. Ad esempio, il modello contenuto nelle voci seguenti del Registro di sistema richiede che i primi quattro byte siano AB CD 12 34 e che gli ultimi quattro byte siano FE:

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

    Se un file contiene un modello di questo tipo, CLSID {12345678-0000-0001-C000-00000000000095} sarà associato a questo file.

  3. Se le strategie precedenti hanno esito negativo, GetClassFile cerca la chiave estensione file nel Registro di sistema che corrisponde alla parte ext del nome del file. Se la voce del database contiene un CLSID valido, GetClassFile restituisce CLSID.
  4. Se tutte le strategie hanno esito negativo, la funzione restituisce MK_E_INVALIDEXTENSION.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [app desktop | App UWP]
Server minimo supportato Windows 2000 Server [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione objbase.h
Libreria Ole32.lib
DLL Ole32.dll
Set di API ext-ms-win-com-ole32-l1-1-5 (introdotta in Windows 10 versione 10.0.15063)

Vedi anche

WriteClassStg