GetClassFile 函式 (objbase.h)
傳回與指定檔名相關聯的CLSID。
語法
HRESULT GetClassFile(
[in] LPCOLESTR szFilename,
[out] CLSID *pclsid
);
參數
[in] szFilename
您要求相關聯 CLSID 之檔名的指標。
[out] pclsid
傳回時寫入相關聯 CLSID 之位置的指標。
傳回值
此函式可以傳回任何檔案系統錯誤,以及下列值。
傳回碼 | 描述 |
---|---|
|
已成功擷取 CLSID。 |
|
無法開啟指定的檔名。 |
|
登錄中指定的擴充功能無效。 |
備註
當指定檔名時, GetClassFile 會尋找與該檔案相關聯的 CLSID。 其用法的範例是在 OleCreateFromFile 函式中,它會傳遞檔名並需要相關聯的 CLSID,以及在 IMoniker::BindToObject 的 OLE 實作中,這會在啟動檔案型文件的連結時,呼叫 GetClassFile 來找出可開啟檔案的物件應用程式。
GetClassFile 會使用下列策略來判斷適當的 CLSID:
- 如果檔案包含記憶體物件,如呼叫 StgIsStorageFile 函式所決定, GetClassFile 會傳回以 IStorage::SetClass 方法寫入的 CLSID。
-
如果檔案不是記憶體物件, GetClassFile 會嘗試根據登錄中的模式比對檔案中的各種位。 登入中的模式可以包含表單的一系列專案:
entry = offset, cb, mask, value
位移專案的值是檔案開頭或結尾的 位移 , 而 cb 專案是以位元組為單位的長度。 這兩個值代表檔案中的特定位元組範圍。 (會從檔案結尾解譯位移專案的負值) 。 遮罩值是位掩碼,用來執行邏輯 AND 作業,以及位移和 cb 所指定的位元組範圍。 邏輯 AND 作業的結果會與 值 項目進行比較。 如果省略 遮罩 ,則會假設為所有遮罩。
登錄中的每個模式都會以資料庫中的模式順序與檔案進行比較。 第一個模式,其中每個值專案符合 AND 作業的結果會決定檔案的 CLSID。 例如,登錄下列專案中包含的模式需要前四個字節是AB CD 12 34,最後四個字節必須是FE FE FE FE:
HKEY_CLASSES_ROOT FileType {12345678-0000-0001-C000-000000000095} 0 = 0, 4, FFFFFFFF, ABCD1234 1 = -4, 4, , FEFEFEFE
如果檔案包含這類模式,CLSID {12345678-0000-0001-C000-00000000000095} 會與此檔案相關聯。
- 如果上述策略失敗, GetClassFile 會在登錄中搜尋對應至檔名之 .ext 部分的 擴展名 機碼。 如果資料庫專案包含有效的 CLSID,GetClassFile 會傳回該 CLSID。
- 如果所有策略都失敗,函式會傳回MK_E_INVALIDEXTENSION。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows 2000 Server [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | objbase.h |
程式庫 | Ole32.lib |
Dll | Ole32.dll |
API 集合 | ext-ms-win-com-ole32-l1-1-5 (於 Windows 10 10.0.15063 版) |