Mengatur Keamanan pada IWbemServices dan Proksi Lainnya

Sementara di C++ Anda dapat mengatur keamanan pada seluruh proses dengan memanggil CoInitializeSecurity sebelum menyambungkan ke WMI melalui IWbemLocator::ConnectServer. Anda juga dapat mengubah tingkat autentikasi, tingkat peniruan identitas, atau layanan autentikasi dalam panggilan yang mendapatkan pointer ke proksi WMI, seperti IWbemServices atau IWbemCallResult. Memanggil CoSetProxyBlanket juga memungkinkan Anda untuk mengubah layanan autentikasi (Kerberos, NTLM, atau negosiasi).

Skrip dan aplikasi Visual Basic hanya mengatur keamanan pada proksi secara tidak langsung melalui panggilan ke SWbemServices dan objek otomatisasi lainnya. Untuk informasi selengkapnya tentang mengatur dan mengubah autentikasi dan peniruan identitas dalam skrip, lihat Mengatur Tingkat Keamanan Proses Default Menggunakan VBScript.

Mengubah tingkat keamanan atau layanan terutama menjadi perhatian saat menyambungkan ke WMI pada komputer jarak jauh yang menjalankan sistem operasi yang berbeda. Untuk informasi selengkapnya, lihat Menyambungkan Antara Sistem Operasi yang Berbeda.

Aplikasi klien terhubung ke proksi WMI menggunakan identitas. Identitas adalah objek data yang terdiri dari pengaturan nama pengguna, kata sandi, dan otoritas. Untuk aplikasi klien WMI, panggilan ke antarmuka IWbemLocator::ConnectServer membuat identitas awal. Metode ConnectServer mengambil identitas dalam satu set tiga parameter, yang dapat Anda atur ke NULL untuk menunjukkan pengguna saat ini. Anda juga dapat menentukan parameter non-NULL untuk menunjukkan pengguna dan domain tertentu. Jika panggilan berhasil, ConnectServer mengembalikan pointer tempat Anda dapat mengakses berbagai proses jarak jauh, seperti layanan WMI atau sistem operasi Windows secara langsung.

Seperti banyak antarmuka COM, ConnectServer mengembalikan pointer ke proksi. Proksi adalah objek data yang mewakili proses jarak jauh, seperti WMI atau penyedia jarak jauh. COM menggunakan proksi untuk memungkinkan pengembang mengakses data jarak jauh seolah-olah datanya lokal.

Antarmuka WMI berikut menggunakan proksi:

Setelah Anda menerima pointer ke proses jarak jauh, Anda dapat melakukan salah satu dari dua hal. Jika Anda tahu apa yang dilakukan prosesnya, Anda dapat memilih untuk mengatur keamanan pada penunjuk dan mengakses proses secara normal. Ini adalah kasus dengan sebagian besar pointer ke layanan WMI. Untuk informasi selengkapnya, lihat Mengatur Tingkat Keamanan pada Koneksi WMI. Secara bergantian, Anda perlu mengakses antarmuka COM yang berbeda pada proksi, seperti IUnknown::Release, melalui panggilan ke antarmuka IUnknown pada proksi.

Default dan Rekomendasi

Versi terdistribusi Model Objek Komponen (DCOM) menegosiasikan layanan autentikasi default (Kerberos, NTLM, atau Negosiasi), dan Anda tidak dapat menentukan layanan autentikasi default menggunakan CoInitializeSecurity. Menentukan RPC_C_AUTHN_DEFAULT dalam parameter layanan autentikasi CoSetProxyBlanket memungkinkan DCOM untuk memilih layanan yang sesuai. Untuk koneksi jarak jauh, layanan default adalah Negosiasi, yang merupakan layanan yang direkomendasikan untuk aplikasi yang berfungsi di domain Kerberos dan non-Kerberos. Untuk koneksi lokal, layanan autentikasi default adalah NT LAN Manager (NTLM).

Contoh kode berikut menunjukkan layanan autentikasi default yang digunakan.

// The pWbemServices variable is of type IWbemServices*

HRESULT hr = CoSetProxyBlanket(
     pWbemServices,                //Proxy
     RPC_C_AUTHN_DEFAULT,          //Authentication service 
     RPC_C_AUTHZ_DEFAULT,          //Authorization service 
     COLE_DEFAULT_PRINCIPAL,       //Server principal name used 
                                       // by authentication service
     RPC_C_AUTHN_LEVEL_DEFAULT,    //Authentication level
     RPC_C_IMP_LEVEL_IMPERSONATE,  //Impersonation level
     COLE_DEFAULT_AUTHINFO,       //Client identity
     EOAC_DEFAULT                  //Capability flags
     );

Contoh kode dalam topik ini memerlukan referensi dan pernyataan #include berikut.

#define _WIN32_DCOM
#include <wbemidl.h>
#include <comdef.h>

#pragma comment(lib, "wbemuuid.lib")

Untuk pembuatan skrip, disarankan agar Anda menggunakan default yang dipilih DCOM untuk panggilan jarak jauh. Pada komputer lokal Anda tidak dapat menentukan layanan autentikasi untuk panggilan ke WMI. Untuk informasi selengkapnya, lihat Mengatur Layanan Autentikasi Menggunakan VBScript dan Membuat String Moniker.