Bagikan melalui


Metode IClientSecurity::SetBlanket (objidl.h)

Mengatur informasi autentikasi (selimut keamanan) yang akan digunakan untuk melakukan panggilan pada proksi yang ditentukan.

Pengaturan ini mengambil alih pengaturan default proses untuk proksi yang ditentukan. Memanggil metode ini mengubah nilai keamanan untuk semua pengguna lain dari proksi yang ditentukan.

Sintaks

HRESULT SetBlanket(
  [in] IUnknown *pProxy,
  [in] DWORD    dwAuthnSvc,
  [in] DWORD    dwAuthzSvc,
  [in] OLECHAR  *pServerPrincName,
  [in] DWORD    dwAuthnLevel,
  [in] DWORD    dwImpLevel,
  [in] void     *pAuthInfo,
  [in] DWORD    dwCapabilities
);

Parameter

[in] pProxy

Penunjuk ke proksi.

[in] dwAuthnSvc

Layanan autentikasi. Ini akan menjadi nilai tunggal yang diambil dari daftar konstanta layanan autentikasi. Jika tidak ada autentikasi yang diperlukan, gunakan RPC_C_AUTHN_NONE. Jika RPC_C_AUTHN_DEFAULT ditentukan, COM akan memilih layanan autentikasi setelah algoritma negoritma negosiasi selimut keamanan normalnya.

[in] dwAuthzSvc

Layanan otorisasi. Ini akan menjadi nilai tunggal yang diambil dari daftar konstanta otorisasi. Jika RPC_C_AUTHZ_DEFAULT ditentukan, COM akan memilih layanan otorisasi setelah algoritma negoritma negosiasi selimut keamanan normalnya. Jika NTLMSSP, Kerberos, atau Schannel digunakan sebagai layanan autentikasi, RPC_C_AUTHZ_NONE harus digunakan sebagai layanan otorisasi.

[in] pServerPrincName

Nama utama server. Jika COLE_DEFAULT_PRINCIPAL ditentukan, DCOM akan memilih nama utama menggunakan algoritma negosiasi selimut keamanannya. Jika Kerberos digunakan sebagai layanan autentikasi, parameter ini harus menjadi nama utama server yang benar atau panggilan akan gagal.

Jika Schannel digunakan sebagai layanan autentikasi, nilai ini harus menjadi salah satu bentuk msstd atau fullsic yang dijelaskan dalam Nama Utama, atau NULL jika Anda tidak ingin autentikasi timbal balik.

Umumnya, menentukan NULL tidak akan mengatur ulang nama utama server pada proksi, melainkan, pengaturan sebelumnya akan dipertahankan. Anda harus berhati-hati saat menggunakan NULL sebagai pServerPrincName saat memilih layanan autentikasi yang berbeda untuk proksi, karena tidak ada jaminan bahwa nama utama yang ditetapkan sebelumnya akan valid untuk layanan autentikasi yang baru dipilih.

[in] dwAuthnLevel

Tingkat autentikasi. Ini akan menjadi nilai tunggal yang diambil dari daftar konstanta tingkat autentikasi. Jika RPC_C_AUTHN_LEVEL_DEFAULT ditentukan, COM akan memilih tingkat autentikasi setelah algoritma negoritma negosiasi selimut keamanan normalnya. Jika nilai ini diatur ke RPC_C_AUTHN_LEVEL_NONE, layanan autentikasi harus RPC_C_AUTHN_NONE. Setiap layanan autentikasi dapat memilih untuk menggunakan tingkat autentikasi keamanan yang lebih tinggi dari yang ditentukan.

[in] dwImpLevel

Tingkat peniruan. Ini akan menjadi nilai tunggal yang diambil dari daftar konstanta tingkat peniruan. Jika RPC_C_IMP_LEVEL_DEFAULT ditentukan, COM akan memilih tingkat peniruan setelah algoritma negosiasi selimut keamanan normalnya. Jika Anda menggunakan NTLMSSP dari jarak jauh, nilai ini harus RPC_C_IMP_LEVEL_IMPERSONATE atau RPC_C_IMP_LEVEL_IDENTIFY. Saat menggunakan NTLMSSP pada komputer yang sama, RPC_C_IMP_LEVEL_DELEGATE juga didukung. Untuk Kerberos, nilai ini dapat RPC_C_IMP_LEVEL_IDENTIFY, RPC_C_IMP_LEVEL_IMPERSONATE, atau RPC_C_IMP_LEVEL_DELEGATE. Untuk Schannel, nilai ini harus RPC_C_IMP_LEVEL_IMPERSONATE.

[in] pAuthInfo

Nilai RPC_AUTH_IDENTITY_HANDLE yang menunjukkan identitas klien. Parameter ini tidak digunakan untuk panggilan pada komputer yang sama. Jika pAuthInfo adalah NULL, COM menggunakan identitas proksi saat ini, yang merupakan token proses, token peniruan identitas, atau identitas autentikasi dari fungsi CoInitializeSecurity . Jika handel bukan NULL, identitas tersebut digunakan. Format struktur yang dimaksud oleh handel tergantung pada penyedia layanan autentikasi.

Untuk NTLMSSP atau Kerberos, strukturnya adalah struktur SEC_WINNT_AUTH_IDENTITY atau SEC_WINNT_AUTH_IDENTITY_EX . Jika klien mendapatkan kredensial yang ditetapkan pada proksi dengan memanggil CoQueryProxyBlanket, klien harus memastikan bahwa memori tetap valid dan tidak berubah sampai identitas yang berbeda diatur pada proksi atau semua proksi pada objek dirilis.

Jika parameter ini NULL, COM menggunakan identitas proksi saat ini (yang merupakan token proses atau token peniruan identitas). Jika handel mengacu pada struktur, identitas tersebut digunakan.

Untuk Schannel, parameter ini harus menjadi penunjuk ke struktur CERT_CONTEXT yang berisi sertifikat X.509 klien, atau NULL jika klien ingin membuat koneksi anonim ke server. Jika sertifikat ditentukan, penelepon tidak boleh membebaskannya selama proksi apa pun ke objek ada di apartemen saat ini.

Untuk Snego, anggota ini adalah NULL, menunjuk ke struktur SEC_WINNT_AUTH_IDENTITY , atau menunjuk ke struktur SEC_WINNT_AUTH_IDENTITY_EX . Jika NULL, Snego akan memilih daftar layanan autentikasi berdasarkan yang tersedia di komputer klien. Jika menunjuk ke struktur SEC_WINNT_AUTH_IDENTITY_EX , anggota PackageList struktur harus menunjuk ke string yang berisi daftar nama layanan autentikasi yang dipisahkan koma dan anggota PackageListLength harus memberikan jumlah byte dalam string PackageList . Jika PackageListNULL, semua panggilan yang menggunakan Snego akan gagal.

Jika COLE_DEFAULT_AUTHINFO ditentukan, COM akan memilih informasi autentikasi setelah algoritma negoritma negosiasi selimut keamanan normalnya.

SetBlanket akan mengembalikan kesalahan jika kedua pAuthInfo diatur dan salah satu bendera klonaking diatur dalam dwCapabilities.

[in] dwCapabilities

Kemampuan proksi ini. Bendera kemampuan ditentukan dalam enumerasi EOLE_AUTHENTICATION_CAPABILITIES . Satu-satunya bendera yang dapat diatur melalui metode ini adalah EOAC_MUTUAL_AUTH, EOAC_STATIC_CLOAKING, EOAC_DYNAMIC_CLOAKING, EOAC_ANY_AUTHORITY (bendera ini tidak digunakan lagi), EOAC_MAKE_FULLSIC, dan EOAC_DEFAULT. Baik EOAC_STATIC_CLOAKING atau EOAC_DYNAMIC_CLOAKING dapat diatur jika pAuthInfo tidak diatur dan Schannel bukan layanan autentikasi. (Lihat Kloning untuk informasi selengkapnya.) Jika ada bendera kemampuan selain yang disebutkan di sini yang ditunjukkan, SetBlanket akan mengembalikan kesalahan.

Nilai kembali

Metode ini dapat mengembalikan nilai berikut.

Menampilkan kode Deskripsi
S_OK
Metode berhasil diselesaikan.
E_INVALIDARG
Satu atau beberapa argumen tidak valid.

Keterangan

SetBlanket mengatur informasi autentikasi yang akan digunakan untuk melakukan panggilan pada proksi antarmuka yang ditentukan. Nilai yang ditentukan di sini mengambil alih nilai yang dipilih oleh keamanan otomatis. Memanggil metode ini mengubah nilai keamanan untuk semua pengguna lain dari proksi yang ditentukan. Jika Anda ingin perubahan hanya berlaku untuk instans proksi tertentu, panggil IClientSecurity::CopyProxy untuk membuat salinan privat proksi lalu panggil SetBlanket pada salinan.

Setiap kali metode ini dipanggil, DCOM akan mengatur identitas pada proksi, dan panggilan mendatang yang dilakukan menggunakan proksi ini akan menggunakan identitas ini. Panggilan sedang berlangsung ketika SetBlanket dipanggil akan menggunakan informasi autentikasi pada proksi pada saat panggilan dimulai. Jika pAuthInfo adalah NULL, identitas proksi default ke token proses saat ini (kecuali identitas autentikasi ditentukan pada panggilan ke CoInitializeSecurity). Lihat Cloaking untuk mempelajari bagaimana bendera penyelubungan memengaruhi proksi saat pAuthInfo adalah NULL.

Secara default, COM akan memilih layanan autentikasi dan layanan otorisasi pertama yang tersedia di komputer klien dan server serta nama utama yang didaftarkan server untuk layanan autentikasi tersebut. Saat ini, COM tidak akan mencoba layanan autentikasi lain jika yang pertama gagal.

Ketika konstanta default untuk dwImpLevel ditentukan dalam SetBlanket, parameter default ke nilai yang ditentukan untuk CoInitializeSecurity. Jika CoInitializeSecurity tidak dipanggil, defaultnya adalah RPC_C_IMP_LEVEL_IDENTIFY.

Nilai awal untuk dwAuthnLevel pada proksi akan menjadi nilai yang lebih tinggi yang ditetapkan pada panggilan klien ke CoInitializeSecurity dan panggilan server ke CoInitializeSecurity. Untuk proses apa pun yang tidak memanggil CoInitializeSecurity, tingkat autentikasi default RPC_C_AUTHN_CONNECT.

Tingkat autentikasi dan peniruan default untuk proses yang tidak memanggil CoInitializeSecurity dapat diatur dengan DCOMCNFG.

Jika EOAC_DEFAULT ditentukan untuk dwCapabilities, kemampuan yang valid dari CoInitializeSecurity akan digunakan. Jika CoInitializeSecurity tidak dipanggil, EOAC_NONE akan digunakan untuk bendera kemampuan.

Jika SetBlanket dipanggil secara bersamaan pada dua utas pada proksi yang sama, hanya satu set perubahan yang akan diterapkan. Jika SetBlanket dan CRpcOptions::Set dipanggil secara bersamaan pada dua utas pada proksi yang sama, kedua perubahan dapat diterapkan atau hanya satu yang dapat diterapkan.

Informasi keamanan tidak dapat diatur pada antarmuka lokal seperti antarmuka IClientSecurity . Namun, karena antarmuka tersebut hanya didukung secara lokal, tidak perlu keamanan. IUnknown dan IMultiQI adalah kasus khusus. Implementasi lokasi melakukan panggilan jarak jauh untuk mendukung antarmuka ini. SetBlanket dapat digunakan untuk IUnknown. IMultiQI akan menggunakan pengaturan keamanan pada IUnknown.

Untuk mengubah satu parameter SetBlanket tanpa harus berurusan dengan yang lain, seseorang dapat menentukan konstanta default untuk parameter lain. Aplikasi dapat mengubah parameter (seperti tingkat autentikasi) dan mengabaikan parameter lain, termasuk layanan autentikasi, dengan mengatur semua parameter lain ke konstanta default.

Perhatikan bahwa penting untuk mengatur semua parameter yang tidak digunakan ke konstanta default karena nilai default sering kali tidak jelas. Secara khusus, jika Anda mengatur layanan autentikasi ke default, Anda harus mengatur informasi autentikasi dan nama utama ke default. Alasan untuk ini adalah dua kali lipat: Pertama, jenis informasi autentikasi tergantung pada layanan autentikasi yang dipilih DCOM. Kedua, karena DCOM perlu meneruskan beberapa informasi autentikasi kompleks untuk layanan autentikasi tertentu, jika Anda mengatur layanan autentikasi ke default dan informasi autentikasi ke NULL, Anda mungkin mendapatkan pengaturan keamanan yang tidak akan berfungsi.

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 objidl.h (termasuk ObjIdl.h)

Lihat juga

CoQueryProxyBlanket

CoSetProxyBlanket

IClientSecurity