Bagikan melalui


Bendera CTF

Bendera yang mengontrol perilaku fungsi panggilan. Digunakan oleh SHCreateThread dan SHCreateThreadWithHandle. Dalam fungsi-fungsi tersebut, nilai-nilai ini didefinisikan sebagai jenis SHCT_FLAGS.

Konstanta/nilai Deskripsi
CTF_INSIST
0x00000001
0x00000001. Jika upaya untuk membuat utas dengan CreateThread gagal, pengaturan bendera ini akan menyebabkan fungsi yang ditunjukkan oleh pfnThreadProc dipanggil secara sinkron dari utas panggilan. Bendera ini hanya dapat digunakan jika pfnCallback adalah NULL.
CTF_THREAD_REF
0x00000002
0x00000002. Tahan referensi ke alur pembuatan selama durasi panggilan ke fungsi yang ditunjukkan oleh pfnThreadProc. Referensi ini harus diatur dengan SHSetThreadRef.
CTF_PROCESS_REF
0x00000004
0x00000004. Tahan referensi ke proses Windows Explorer selama durasi panggilan ke fungsi yang ditunjukkan oleh pfnThreadProc. Bendera ini berguna untuk penangan ekstensi Shell, yang mungkin perlu menjaga agar proses Windows Explorer tidak ditutup sebelum waktunya. Tindakan ini berguna selama tugas seperti mengerjakan utas latar belakang atau menyalin file. Untuk informasi selengkapnya, lihat SHGetInstanceExplorer.
CTF_COINIT_STA
0x00000008
0x00000008. Inisialisasi COM sebagai Apartemen Berulir Tunggal (STA) untuk utas yang dibuat sebelum memanggil fungsi opsional yang ditunjukkan oleh pfnCallback atau fungsi yang ditunjukkan oleh pfnThreadProc. Bendera ini berguna ketika COM perlu diinisialisasi untuk utas. COM juga akan secara otomatis tidak diinisialisasi.
CTF_COINIT
0x00000008
Setara dengan CTF_COINIT_STA.
CTF_FREELIBANDEXIT
0x00000010
0x00000010. Internet Explorer 6 atau yang lebih baru.LoadLibrary akan dipanggil pada DLL yang berisi fungsi pfnThreadProc untuk mencegahnya dibongkar. Setelah pfnThreadProc kembali, DLL akan dibebaskan dengan FreeLibrary, sehingga mengurangi jumlah referensi DLL. Teruskan bendera ini untuk mencegah DLL dibongkar sebelum waktunya; misalnya, oleh CoFreeUnusedLibraries. Perhatikan bahwa jika bendera ini diteruskan, fungsi pfnThreadProc harus berada di DLL. Bendera ini implisit di Windows Vista dan yang lebih baru.
CTF_REF_COUNTED
0x00000020
0x00000020. Internet Explorer 6 atau yang lebih baru. Referensi utas akan secara otomatis dibuat untuk utas yang dibuat dan diatur dengan SHSetThreadRef. Setelah pfnThreadProc kembali, referensi utas dirilis dan pesan dikirim hingga jumlah referensi pada referensi utas turun ke nol, yaitu, sampai utas yang bergantung pada utas yang dibuat telah merilis referensinya.
CTF_WAIT_ALLOWCOM
0x00000040
0x00000040. Internet Explorer 6 atau yang lebih baru. Utas panggilan menunggu dan memompa pesan COM dan SendMessage . Jika prosedur sinkron mencoba mengirim pesan Windows dengan SendMessage ke jendela yang dihosting di utas panggilan, pesan akan berhasil tiba. Jika prosedur sinkron mencoba menggunakan COM untuk berkomunikasi dengan objek STA yang dihosting di utas panggilan, panggilan fungsi akan berhasil mencapai objek yang dimaksudkan. Alur panggilan terbuka untuk masuk kembali kerapuhan. Meskipun utas panggilan dapat menangani penggunaan SendMessage dan COM prosedur sinkron, jika utas lain menggunakan SendMessage atau COM untuk berkomunikasi ke objek yang dihosting di utas panggilan, maka ini mungkin pesan atau panggilan fungsi yang tidak terduga yang diproses saat prosedur sinkron selesai.
CTF_UNUSED
0x00000080
0x00000080. Internet Explorer 7 atau yang lebih baru. Tidak digunakan.
CTF_INHERITWOW64
0x00000100
0x00000100. Internet Explorer 7 atau yang lebih baru. Utas baru mewarisi status nonaktifkan Windows-on-Windows 64-bit (WOW64) untuk pengalih sistem file.
CTF_WAIT_NO_REENTRANCY
0x00000200
0x00000200. Windows Vista atau yang lebih baru. Utas panggilan memblokir semua proses lain sambil menunggu prosedur sinkron berjalan pada utas baru. Jika prosedur sinkron mencoba mengirim pesan Windows dengan SendMessage ke jendela yang dihosting di utas panggilan, ini menyebabkan prosedur sinkron mengalami kebuntuan. Jika prosedur sinkron mencoba menggunakan COM untuk berbicara dengan objek STA yang dihosting di utas panggilan, ini juga menyebabkan prosedur sinkron mengalami kebuntuan. Utas panggilan dilindungi dari semua masalah masuk kembali dengan menentukan bendera ini.
CTF_KEYBOARD_LOCALE
0x00000400
0x00000400. Windows 7 atau versi lebih baru. Gunakan lokal keyboard dari utas asli di utas baru yang ditelurkannya.
CTF_OLEINITIALIZE
0x00000800
0x00000800. Windows 7 atau versi lebih baru. Inisialisasi COM dengan model apartemen berulir tunggal (STA) untuk utas yang dibuat.
CTF_COINIT_MTA
0x00001000
0x00001000. Windows 7 dan yang lebih baru. Inisialisasi COM dengan model apartemen multithreaded (MTA) untuk utas yang dibuat.
CTF_NOADDREFLIB
0x00002000
0x00002000. Windows 7 atau versi lebih baru. Bendera ini pada dasarnya berlawanan dengan CTF_FREELIBANDEXIT. Ini menghindari panggilan LoadLibrary/FreeLibraryAndExitThread yang dapat mengakibatkan ketidakcocokan untuk kunci pemuat. Gunakan CTF_NOADDREFLIB hanya ketika utas baru memiliki sarana untuk memastikan bahwa kode prosedur utas asli akan tetap dimuat. Nilai ini tidak boleh digunakan dalam konteks objek COM, karena objek COM harus memastikan bahwa DLL tetap dimuat (biasanya, COM membongkar DLL).

Keterangan

Jika tidak ada bendera CTF_WAIT_ yang ditentukan, utas panggilan akan menunggu dan mengirim pesan SendMessage . Jika prosedur sinkron mencoba mengirim pesan Windows dengan SendMessage ke jendela yang dihosting di utas panggilan, pesan akan sampai ke jendela yang dimaksudkan. Jika prosedur sinkron mencoba menggunakan COM untuk berbicara dengan objek STA yang dihosting di utas panggilan, prosedur sinkron akan mengalami kebuntuan. Alur panggilan terbuka untuk masuk kembali kerapuhan. Meskipun utas panggilan dapat menangani penggunaan SendMessage prosedur sinkron, jika utas lain menggunakan SendMessage untuk berkomunikasi ke jendela yang dihosting di utas panggilan, maka pesan ini mungkin tidak terduga. Ini dapat menyebabkan mereka diproses saat prosedur sinkron selesai.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows 2000 Professional, Windows XP, Windows 7 [hanya aplikasi desktop]
Server minimum yang didukung
Windows 2000 Server [hanya aplikasi desktop]
Header
Shlwapi.h