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:
IWbemServices (objek pembuatan skrip SWbemServices )
IWbemRefresher (objek skrip SWbemRefresher )
WMI Refresher adalah kasus khusus karena melewati penunjuk IWbemServices , yang pengaturan keamanannya harus diatur dengan benar. Untuk informasi selengkapnya tentang menggunakan objek penyegaran, lihat Mengakses Data Performa di C++.
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.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk