Bagikan melalui


Fungsi GetClassFile (objbase.h)

Mengembalikan CLSID yang terkait dengan nama file yang ditentukan.

Sintaks

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

Parameter

[in] szFilename

Penunjuk ke nama file tempat Anda meminta CLSID terkait.

[out] pclsid

Penunjuk ke lokasi tempat CLSID terkait ditulis saat pengembalian.

Nilai kembali

Fungsi ini dapat mengembalikan salah satu kesalahan sistem file, serta nilai berikut.

Menampilkan kode Deskripsi
S_OK
CLSID berhasil diambil.
MK_E_CANTOPENFILE
Tidak dapat membuka nama file yang ditentukan.
MK_E_INVALIDEXTENSION
Ekstensi yang ditentukan dalam registri tidak valid.

Keterangan

Ketika diberi nama file, GetClassFile menemukan CLSID yang terkait dengan file tersebut. Contoh penggunaannya ada dalam fungsi OleCreateFromFile , yang diteruskan nama file dan memerlukan CLSID terkait, dan dalam implementasi OLE IMoniker::BindToObject, yang, ketika tautan ke dokumen berbasis file diaktifkan, memanggil GetClassFile untuk menemukan aplikasi objek yang dapat membuka file.

GetClassFile menggunakan strategi berikut untuk menentukan CLSID yang sesuai:

  1. Jika file berisi objek penyimpanan, seperti yang ditentukan oleh panggilan ke fungsi StgIsStorageFile , GetClassFile mengembalikan CLSID yang ditulis dengan metode IStorage::SetClass .
  2. Jika file bukan objek penyimpanan, GetClassFile mencoba mencocokkan berbagai bit dalam file dengan pola dalam registri. Pola dalam registri dapat berisi serangkaian entri formulir:

    entry = offset, cb, mask,value

    Nilai item offset adalah offset dari awal atau akhir file dan item cb adalah panjang dalam byte. Kedua nilai ini mewakili rentang byte tertentu dalam file. (Nilai negatif untuk item offset ditafsirkan dari akhir file). Nilai masker adalah bitmask yang digunakan untuk melakukan operasi AND logis dengan rentang byte yang ditentukan oleh offset dan cb. Hasil operasi AND logis dibandingkan dengan item nilai . Jika masker dihilangkan, diasumsikan semuanya.

    Setiap pola dalam registri dibandingkan dengan file dalam urutan pola dalam database. Pola pertama di mana setiap item nilai cocok dengan hasil operasi AND menentukan CLSID file. Misalnya, pola yang terkandung dalam entri registri berikut mengharuskan empat byte pertama adalah AB CD 12 34 dan empat byte terakhir adalah FE FE FE:

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

    Jika file berisi pola seperti itu, CLSID {12345678-0000-0001-C000-0000000000095} akan dikaitkan dengan file ini.

  3. Jika strategi di atas gagal, GetClassFile mencari kunci Ekstensi File di registri yang sesuai dengan bagian .ext dari nama file. Jika entri database berisi CLSID yang valid, GetClassFile mengembalikan CLSID tersebut.
  4. Jika semua strategi gagal, fungsi akan mengembalikan MK_E_INVALIDEXTENSION.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows 2000 Server [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header objbase.h
Pustaka Ole32.lib
DLL Ole32.dll
Set API ext-ms-win-com-ole32-l1-1-5 (diperkenalkan dalam Windows 10, versi 10.0.15063)

Lihat juga

WriteClassStg