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:


  • 0 = Pengelogan diskresi. Log secara default, tetapi klien dapat mengambil alih dengan menentukan CLSCTX_NO_FAILURE_LOG di CoCreateInstanceEx.

  • 1 = Selalu catat semua kegagalan apa pun yang ditentukan klien.

  • 2 = Jangan pernah mencatat kegagalan apa pun apa pun yang ditentukan klien. Jika entri registri hilang, defaultnya adalah 0. Jika Anda perlu mengontrol aplikasi pelanggan, disarankan agar Anda menetapkan nilai ini ke 0 dan menulis kode klien untuk mengambil alih kegagalan. Sangat disarankan agar Anda tidak menetapkan nilai ke 2. Jika pengelogan peristiwa dinonaktifkan, lebih sulit untuk mendiagnosis masalah.

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.

  1. Jika panggilan menentukan salah satu hal berikut, CLSCTX_REMOTE_SERVER tersirat dan ditambahkan ke daftar bendera:
    1. Struktur COSERVERINFO eksplisit yang menunjukkan komputer yang berbeda dari komputer saat ini.
    2. Tidak ada struktur COSERVERINFO eksplisit yang ditentukan tetapi kelas yang ditentukan terdaftar dengan nilai registri RemoteServerName atau ActivateAtStorage .
    Kasus kedua memungkinkan aplikasi yang ditulis sebelum rilis COM terdistribusi menjadi konfigurasi kelas untuk aktivasi jarak jauh yang akan digunakan oleh aplikasi klien yang tersedia sebelum DCOM dan bendera CLSCTX_REMOTE_SERVER. Kasus di mana tidak akan ada struktur COSERVERINFO eksplisit adalah ketika nilai ditentukan sebagai NULL atau ketika itu bukan salah satu parameter fungsi (seperti dalam panggilan ke CoCreateInstance dan CoGetClassObject).
  2. Jika parameter COSERVERINFO eksplisit menunjukkan komputer saat ini, CLSCTX_REMOTE_SERVER dihapus jika ada.
Sisa pemrosesan berlanjut dengan melihat nilai dalam urutan berikut:
  1. 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.)
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
Jika enumerasi CLSCTX memiliki bendera CLSCTX_ACTIVATE_32_BIT_SERVER dan CLSCTX_ACTIVATE_64_BIT_SERVER yang ditetapkan, maka itu tidak valid dan aktivasi akan mengembalikan E_INVALIDARG.

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

BIND_OPTS2

COSERVERINFO

CoCreateInstance

CoCreateInstanceEx

CoGetClassObject

CoGetInstanceFromFile

CoGetInstanceFromIStorage

CoRegisterClassObject

Membuat Objek Melalui Objek Kelas

IClassActivator::GetClassObject

Menemukan Objek Jarak Jauh

Mendaftarkan Server EXE yang Sedang Berjalan