Enumerasi CLSCTX (wtypesbase.h)
Nilai yang digunakan dalam panggilan aktivasi untuk menunjukkan konteks eksekusi tempat objek akan dijalankan. Nilai-nilai ini juga digunakan dalam panggilan ke CoRegisterClassObject untuk menunjukkan serangkaian konteks eksekusi di mana objek kelas akan tersedia untuk permintaan untuk membuat instans.
Sintaks
typedef enum tagCLSCTX {
CLSCTX_INPROC_SERVER = 0x1,
CLSCTX_INPROC_HANDLER = 0x2,
CLSCTX_LOCAL_SERVER = 0x4,
CLSCTX_INPROC_SERVER16 = 0x8,
CLSCTX_REMOTE_SERVER = 0x10,
CLSCTX_INPROC_HANDLER16 = 0x20,
CLSCTX_RESERVED1 = 0x40,
CLSCTX_RESERVED2 = 0x80,
CLSCTX_RESERVED3 = 0x100,
CLSCTX_RESERVED4 = 0x200,
CLSCTX_NO_CODE_DOWNLOAD = 0x400,
CLSCTX_RESERVED5 = 0x800,
CLSCTX_NO_CUSTOM_MARSHAL = 0x1000,
CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,
CLSCTX_NO_FAILURE_LOG = 0x4000,
CLSCTX_DISABLE_AAA = 0x8000,
CLSCTX_ENABLE_AAA = 0x10000,
CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000,
CLSCTX_ACTIVATE_X86_SERVER = 0x40000,
CLSCTX_ACTIVATE_32_BIT_SERVER,
CLSCTX_ACTIVATE_64_BIT_SERVER = 0x80000,
CLSCTX_ENABLE_CLOAKING = 0x100000,
CLSCTX_APPCONTAINER = 0x400000,
CLSCTX_ACTIVATE_AAA_AS_IU = 0x800000,
CLSCTX_RESERVED6 = 0x1000000,
CLSCTX_ACTIVATE_ARM32_SERVER = 0x2000000,
CLSCTX_ALLOW_LOWER_TRUST_REGISTRATION,
CLSCTX_PS_DLL = 0x80000000
} CLSCTX;
Konstanta
CLSCTX_INPROC_SERVER Nilai: 0x1 Kode yang membuat dan mengelola objek kelas ini adalah DLL yang berjalan dalam proses yang sama dengan pemanggil fungsi yang menentukan konteks kelas. |
CLSCTX_INPROC_HANDLER Nilai: 0x2 Kode yang mengelola objek kelas ini adalah handler dalam proses. Ini adalah DLL yang berjalan dalam proses klien dan mengimplementasikan struktur sisi klien dari kelas ini ketika instans kelas diakses dari jarak jauh. |
CLSCTX_LOCAL_SERVER Nilai: 0x4 Kode EXE yang membuat dan mengelola objek kelas ini berjalan pada komputer yang sama tetapi dimuat dalam ruang proses terpisah. |
CLSCTX_INPROC_SERVER16 Nilai: 0x8 Kedaluwarsa. |
CLSCTX_REMOTE_SERVER Nilai: 0x10 Konteks jarak jauh. Kode LocalServer32 atau LocalService yang membuat dan mengelola objek kelas ini dijalankan pada komputer yang berbeda. |
CLSCTX_INPROC_HANDLER16 Nilai: 0x20 Kedaluwarsa. |
CLSCTX_RESERVED1 Nilai: 0x40 Dicadangkan. |
CLSCTX_RESERVED2 Nilai: 0x80 Dicadangkan. |
CLSCTX_RESERVED3 Nilai: 0x100 Dicadangkan. |
CLSCTX_RESERVED4 Nilai: 0x200 Dicadangkan. |
CLSCTX_NO_CODE_DOWNLOAD Nilai: 0x400 Menonaktifkan pengunduhan kode dari layanan direktori atau Internet. Bendera ini tidak dapat diatur pada saat yang sama dengan CLSCTX_ENABLE_CODE_DOWNLOAD. |
CLSCTX_RESERVED5 Nilai: 0x800 Dicadangkan. |
CLSCTX_NO_CUSTOM_MARSHAL Nilai: 0x1000 Tentukan apakah Anda ingin aktivasi gagal jika menggunakan marshalling kustom. |
CLSCTX_ENABLE_CODE_DOWNLOAD Nilai: 0x2000 Mengaktifkan pengunduhan kode dari layanan direktori atau Internet. Bendera ini tidak dapat diatur pada saat yang sama dengan CLSCTX_NO_CODE_DOWNLOAD. |
CLSCTX_NO_FAILURE_LOG Nilai: 0x4000 CLSCTX_NO_FAILURE_LOG dapat digunakan untuk mengambil alih pengelogan kegagalan di CoCreateInstanceEx. Jika ActivationFailureLoggingLevel dibuat, nilai berikut dapat menentukan status pengelogan peristiwa:
|
CLSCTX_DISABLE_AAA Nilai: 0x8000 Menonaktifkan aktivasi activate-as-activator (AAA) hanya untuk aktivasi ini. Bendera ini mengambil alih pengaturan bendera EOAC_DISABLE_AAA dari enumerasi EOLE_AUTHENTICATION_CAPABILITIES. Bendera ini tidak dapat diatur pada saat yang sama dengan CLSCTX_ENABLE_AAA. Setiap aktivasi di mana proses server akan diluncurkan di bawah identitas pemanggil dikenal sebagai aktivasi activate-as-activator (AAA). Menonaktifkan aktivasi AAA memungkinkan aplikasi yang berjalan di bawah akun istimewa (seperti LocalSystem) untuk membantu mencegah identitasnya digunakan untuk meluncurkan komponen yang tidak tepercaya. Aplikasi pustaka yang menggunakan panggilan aktivasi harus selalu mengatur bendera ini selama panggilan tersebut. Ini membantu mencegah aplikasi pustaka digunakan dalam serangan keamanan eskalasi hak istimewa. Ini adalah satu-satunya cara untuk menonaktifkan aktivasi AAA dalam aplikasi pustaka karena bendera EOAC_DISABLE_AAA dari enumerasi EOLE_AUTHENTICATION_CAPABILITIES hanya diterapkan ke proses server dan bukan ke aplikasi pustaka. Windows 2000: Bendera ini tidak didukung. |
CLSCTX_ENABLE_AAA Nilai: 0x10000 Mengaktifkan aktivasi enable-as-activator (AAA) hanya untuk aktivasi ini. Bendera ini mengambil alih pengaturan bendera EOAC_DISABLE_AAA dari enumerasi EOLE_AUTHENTICATION_CAPABILITIES. Bendera ini tidak dapat diatur pada saat yang sama dengan CLSCTX_DISABLE_AAA. Setiap aktivasi di mana proses server akan diluncurkan di bawah identitas pemanggil dikenal sebagai aktivasi activate-as-activator (AAA). Mengaktifkan bendera ini memungkinkan aplikasi untuk mentransfer identitasnya ke komponen yang diaktifkan. Windows 2000: Bendera ini tidak didukung. |
CLSCTX_FROM_DEFAULT_CONTEXT Nilai: 0x20000 Mulai aktivasi ini dari konteks default apartemen saat ini. |
CLSCTX_ACTIVATE_X86_SERVER Nilai: 0x40000 |
CLSCTX_ACTIVATE_32_BIT_SERVER Mengaktifkan atau menyambungkan ke server versi 32-bit; gagal jika tidak terdaftar. |
CLSCTX_ACTIVATE_64_BIT_SERVER Nilai: 0x80000 Mengaktifkan atau menyambungkan ke server versi 64 bit; gagal jika tidak terdaftar. |
CLSCTX_ENABLE_CLOAKING Nilai: 0x100000 Ketika bendera ini ditentukan, COM menggunakan token peniruan utas, jika ada, untuk permintaan aktivasi yang dibuat oleh utas. Ketika bendera ini tidak ditentukan atau jika utas tidak memiliki token peniruan, COM menggunakan token proses proses utas untuk permintaan aktivasi yang dibuat oleh utas. Windows Vista atau yang lebih baru: Bendera ini didukung. |
CLSCTX_APPCONTAINER Nilai: 0x400000 Menunjukkan aktivasi adalah untuk kontainer aplikasi. Catatan Bendera ini disediakan untuk penggunaan internal dan tidak dimaksudkan untuk digunakan langsung dari kode Anda. |
CLSCTX_ACTIVATE_AAA_AS_IU Nilai: 0x800000 Tentukan bendera ini untuk perilaku aktivasi Pengguna Interaktif untuk server As-Activator. Aplikasi Bursa Windows Medium IL yang sangat bernama dapat menggunakan bendera ini untuk meluncurkan server COM "Sebagai Aktivator" tanpa nama yang kuat. Selain itu, Anda dapat menggunakan bendera ini untuk mengikat instans server COM yang sedang berjalan yang diluncurkan oleh aplikasi desktop. Klien harus Medium IL, itu harus dinamai dengan kuat, yang berarti bahwa ia memiliki SysAppID dalam token klien, tidak dapat berada di sesi 0, dan harus memiliki pengguna yang sama dengan pengguna ID sesi dalam token klien. Jika server di luar proses dan "Sebagai Aktivator", server akan meluncurkan server dengan token pengguna sesi token klien. Token ini tidak akan diberi nama yang kuat. Jika server di luar proses dan RunAs "Pengguna Interaktif", bendera ini tidak berpengaruh. Jika server di luar proses dan merupakan jenis RunAs lainnya, aktivasi gagal. Bendera ini tidak berpengaruh untuk server dalam proses. Aktivasi off-machine gagal saat menggunakan bendera ini. |
CLSCTX_RESERVED6 Nilai: 0x1000000 |
CLSCTX_ACTIVATE_ARM32_SERVER Nilai: 0x2000000 |
CLSCTX_PS_DLL Nilai: 0x80000000 Digunakan untuk memuat DLL Proksi/Stub. Catatan Bendera ini disediakan untuk penggunaan internal dan tidak dimaksudkan untuk digunakan langsung dari kode Anda. |
Keterangan
Nilai dari enumerasi CLSCTX digunakan dalam panggilan aktivasi (CoCreateInstance, CoCreateInstanceEx, CoGetClassObject, dan sebagainya) untuk menunjukkan konteks eksekusi pilihan (dalam proses, lokal, atau jarak jauh) di mana objek akan dijalankan. Mereka juga digunakan dalam panggilan ke CoRegisterClassObject untuk menunjukkan serangkaian konteks eksekusi di mana objek kelas akan tersedia untuk permintaan untuk membuat instans (IClassFactory::CreateInstance).
Untuk menunjukkan bahwa lebih dari satu konteks dapat diterima, Anda dapat menggabungkan beberapa nilai dengan OU Boolean. Konteks dicoba dalam urutan daftarnya.
Mengingat sekumpulan bendera CLSCTX , konteks eksekusi yang akan digunakan tergantung pada ketersediaan kode kelas terdaftar dan parameter lainnya sesuai dengan algoritma berikut.
- Jika panggilan menentukan salah satu hal berikut, CLSCTX_REMOTE_SERVER tersirat dan ditambahkan ke daftar bendera:
- Struktur COSERVERINFO eksplisit yang menunjukkan komputer yang berbeda dari komputer saat ini.
- Tidak ada struktur COSERVERINFO eksplisit yang ditentukan tetapi kelas yang ditentukan terdaftar dengan nilai registri RemoteServerName atau ActivateAtStorage .
- Jika parameter COSERVERINFO eksplisit menunjukkan komputer saat ini, CLSCTX_REMOTE_SERVER dihapus jika ada.
- Jika bendera menyertakan CLSCTX_REMOTE_SERVER dan tidak ada parameter COSERVERINFO yang ditentukan dan jika permintaan aktivasi menunjukkan status persisten untuk menginisialisasi objek (dengan CoGetInstanceFromFile, CoGetInstanceFromIStorage, atau, untuk moniker file, dalam panggilan ke IMoniker::BindToObject) dan kelas memiliki ActivateAtStorage subkey atau tidak ada informasi registri kelas apa pun, permintaan untuk mengaktifkan dan menginisialisasi diteruskan ke komputer tempat status persisten berada. (Lihat fungsi aktivasi jarak jauh yang tercantum di bagian Lihat Juga untuk detailnya.)
- Jika bendera menyertakan CLSCTX_INPROC_SERVER, kode kelas dalam DLL yang ditemukan di bawah kunci InprocServer32 kelas digunakan jika kunci ini ada. Kode kelas akan berjalan dalam proses yang sama dengan pemanggil.
- Jika bendera menyertakan CLSCTX_INPROC_HANDLER, kode kelas di DLL yang ditemukan di bawah kunci InprocHandler32 kelas digunakan jika kunci ini ada. Kode kelas akan berjalan dalam proses yang sama dengan pemanggil.
- Jika bendera menyertakan CLSCTX_LOCAL_SERVER, kode kelas dalam layanan yang ditemukan di bawah kunci LocalService kelas digunakan jika kunci ini ada. Jika tidak ada layanan yang ditentukan tetapi EXE ditentukan di bawah kunci yang sama, kode kelas yang terkait dengan EXE tersebut digunakan. Kode kelas (dalam kedua kasus) akan dijalankan dalam proses layanan terpisah pada komputer yang sama dengan pemanggil.
- Jika bendera diatur ke CLSCTX_REMOTE_SERVER dan parameter COSERVERINFO tambahan ke fungsi menentukan komputer jarak jauh tertentu, permintaan untuk mengaktifkan diteruskan ke komputer jarak jauh ini dengan bendera dimodifikasi untuk diatur ke CLSCTX_LOCAL_SERVER. Kode kelas akan berjalan dalam prosesnya sendiri pada komputer khusus ini, yang harus berbeda dari pemanggil.
- Terakhir, jika bendera menyertakan CLSCTX_REMOTE_SERVER dan tidak ada parameter COSERVERINFO yang ditentukan dan jika nama komputer diberikan di bawah nilai bernama RemoteServerName kelas, permintaan untuk mengaktifkan diteruskan ke komputer jarak jauh ini dengan bendera yang dimodifikasi untuk diatur ke CLSCTX_LOCAL_SERVER. Kode kelas akan berjalan dalam prosesnya sendiri pada komputer khusus ini, yang harus berbeda dari pemanggil.
CLSCTX_ACTIVATE_32_BIT_SERVER dan CLSCTX_ACTIVATE_64_BIT_SERVER
Windows versi 64-bit memperkenalkan dua bendera baru: CLSCTX_ACTIVATE_32_BIT_SERVER dan CLSCTX_ACTIVATE_64_BIT_SERVER. Pada komputer 64-bit, versi 32-bit dan 64-bit dari server COM yang sama mungkin hidup berdampingan. Ketika klien meminta aktivasi server di luar proses, bendera CLSCTX ini memungkinkan klien untuk menentukan server versi 32-bit atau 64-bit.Biasanya, klien tidak akan peduli apakah menggunakan server versi 32-bit atau 64-bit. Namun, jika server itu sendiri memuat server dalam proses tambahan, maka server dan server dalam proses harus 32-bit atau 64-bit. Misalnya, klien ingin menggunakan server "A", yang pada gilirannya memuat server dalam proses "B". Jika hanya server versi 32-bit "B" yang tersedia, maka klien harus menentukan server versi 32-bit "A". Jika hanya server versi 64-bit "B" yang tersedia, maka klien harus menentukan server versi 64-bit "A".
Server dapat menentukan preferensi arsitekturnya sendiri melalui kunci registri PreferredServerBitness, tetapi preferensi klien, yang ditentukan melalui bendera CLSCTX_ACTIVATE_32_BIT_SERVER atau CLSCTX_ACTIVATE_64_BIT_SERVER, akan menimpa preferensi server. Jika klien tidak menentukan preferensi, preferensi server akan digunakan.
Jika klien maupun server tidak menentukan preferensi, maka:
- Jika komputer yang menghosting server menjalankan Windows Server 2003 dengan Paket Layanan 1 (SP1) atau sistem yang lebih baru, maka COM akan mencoba mencocokkan arsitektur server dengan arsitektur klien. Dengan kata lain, untuk klien 32-bit, COM akan mengaktifkan server 32-bit jika tersedia; jika tidak, server akan mengaktifkan server versi 64-bit. Untuk klien 64-bit, COM akan mengaktifkan server 64-bit jika tersedia; jika tidak, ia akan mengaktifkan server 32-bit.
- Jika komputer yang menghosting server menjalankan Windows XP atau Windows Server 2003 tanpa SP1 atau yang lebih baru diinstal, maka COM akan lebih memilih server versi 64-bit jika tersedia; jika tidak, server akan mengaktifkan server versi 32-bit.
Tabel berikut ini memperlihatkan hasil berbagai kombinasi arsitektur klien dan pengaturan klien serta arsitektur server dan pengaturan server.
Bendera CLSCTX_ACTIVATE_32_BIT_SERVER dan CLSCTX_ACTIVATE_64_BIT_SERVER mengalir di seluruh batas komputer. Jika komputer yang menghosting server menjalankan Windows 64-bit, maka akan menghormati bendera ini; jika tidak, itu akan mengabaikan mereka.
Klien 32-bit, tanpa bendera | Klien 64-bit, tanpa bendera | Klien 32-bit, bendera 32-bit¹ | Klien 32-bit, bendera 64-bit² | Klien 64-bit, bendera 32-bit¹ | Klien 64-bit, bendera 64-bit² | |
---|---|---|---|---|---|---|
Server 32-bit, cocok dengan nilai registri klien³ | Server 32-bit | Lihat ⁸ | Server 32-bit | Lihat ⁸ | Server 32-bit | Lihat ⁸ |
Server 32-bit, nilai registri 32-bit⁴ | Server 32-bit | Server 32-bit | Server 32-bit | Lihat ⁸ | Server 32-bit | Lihat ⁸ |
Server 32-bit, nilai registri 64-bit⁵ | Lihat ⁸ | Lihat ⁸ | Server 32-bit | Lihat ⁸ | Server 32-bit | Lihat ⁸ |
Server 32-bit, tidak ada nilai registri⁶ | Server 32-bit | 64/32⁹ | Server 32-bit | Lihat ⁸ | Server 32-bit | Lihat ⁸ |
Server 32-bit, tidak ada nilai registri (sebelum Windows Server 2003 dengan SP1)⁷ | 64/32⁹ | 64/32⁹ | Server 32-bit | Lihat ⁸ | Server 32-bit | Lihat ⁸ |
Server 64-bit, cocok dengan nilai registri klien³ | Lihat ⁸ | Server 64-bit | Lihat ⁸ | Server 64-bit | Lihat ⁸ | Server 64-bit |
Server 64-bit, nilai registri 32-bit⁴ | Lihat ⁸ | Lihat ⁸ | Lihat ⁸ | Server 64-bit | Lihat ⁸ | Server 64-bit |
Server 64-bit, nilai registri 64-bit⁵ | Server 64-bit | Server 64-bit | Lihat ⁸ | Server 64-bit | Lihat ⁸ | Server 64-bit |
Server 64-bit, tidak ada nilai registri⁶ | 32/64¹⁰ | Server 64-bit | Lihat ⁸ | Server 64-bit | Lihat ⁸ | Server 64-bit |
Server 64-bit, tidak ada nilai registri (sebelum Windows Server 2003 dengan SP1)⁷ | Server 64-bit | Server 64-bit | Lihat ⁸ | Server 64-bit | Lihat ⁸ | Server 64-bit |
PreferredServerBitnessPreferredServerBitnessPreferredServerBitnessPreferredServerBitnessPreferredServerBitnessPreferredServerBitness
Persyaratan
Klien minimum yang didukung | Windows 2000 Professional [hanya aplikasi desktop] |
Server minimum yang didukung | Windows 2000 Server [hanya aplikasi desktop] |
Header | wtypesbase.h |
Lihat juga
Membuat Objek Melalui Objek Kelas