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 |
---|---|
|
ClSID è stato recuperato correttamente. |
|
Impossibile aprire il nome del file specificato. |
|
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:
- 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 .
-
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.
- 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.
- 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) |