Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Když se klientská aplikace poprvé přihlásí k rozhraní WMI (Windows Management Instrumentation), musí nastavit výchozí úroveň zabezpečení procesu voláním CoInitializeSecurity. Com používá informace ve volání k určení, kolik zabezpečení musí mít jiný proces pro přístup k procesu klientské aplikace.
V tomto tématu jsou popsány následující části:
U většiny klientských aplikací jsou argumenty uvedené v následujícím příkladu nastaveny na výchozí zabezpečení pro rozhraní WMI.
HRESULT hr = NULL;
hr = CoInitializeSecurity(
NULL, // security descriptor
-1, // use this simple setting
NULL, // use this simple setting
NULL, // reserved
RPC_C_AUTHN_LEVEL_DEFAULT, // authentication level
RPC_C_IMP_LEVEL_IMPERSONATE, // impersonation level
NULL, // use this simple setting
EOAC_NONE, // no special capabilities
NULL); // reserved
if (FAILED(hr))
{
CoUninitialize();
cout << "Failed to initialize security. Error code = 0x"
<< hex << hr << endl;
return;
}
Pro správnou kompilaci kód vyžaduje následující odkazy a příkazy #include.
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <Wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
Nastavení úrovně ověřování na RPC_C_AUTHN_LEVEL_DEFAULT umožňuje modelu DCOM vyjednat úroveň ověřování tak, aby odpovídala požadavkům na zabezpečení cílového počítače. Další informace najdete v tématu Změna výchozích přihlašovacích údajů ověřování pomocí jazyka C++ a Změna výchozího nastavení zosobnění pomocí jazyka C++.
Výchozí přihlašovací údaje pro ověřování fungují ve většině situací, ale v různých situacích možná budete muset použít jiné přihlašovací údaje pro ověřování. Můžete například chtít přidat šifrování do ověřovacích postupů.
Následující tabulka uvádí a popisuje různé úrovně ověřování.
Úroveň ověřování | Popis |
---|---|
RPC_C_AUTHN_LEVEL_DEFAULT | Výchozí ověřování zabezpečení |
RPC_C_AUTHN_LEVEL_NONE | Žádné ověřování. |
RPC_C_AUTHN_LEVEL_CONNECT | Ověřování pouze v případech, kdy klient vytvoří relaci se serverem. |
RPC_C_AUTHN_LEVEL_CALL | Ověřování pokaždé, když server obdrží RPC. |
RPC_C_AUTHN_LEVEL_PKT | Ověřování pokaždé, když server obdrží data od klienta. |
RPC_C_AUTHN_LEVEL_PKT_INTEGRITY (úroveň autenticity paketu: integrita) | Ověření, že nebyla změněna žádná data z paketu. |
RPC_C_AUTHN_LEVEL_PKT_PRIVACY | Zahrnuje všechny předchozí úrovně ověřování a šifruje hodnotu každého volání RPC. |
Výchozí přihlašovací údaje pro více uživatelů můžete zadat pomocí struktury SOLE_AUTHENTICATION_LIST v pAuthList parametru CoInitializeSecurity.
Následující příklad kódu ukazuje, jak změnit přihlašovací údaje pro ověřování.
// Auth Identity structure
SEC_WINNT_AUTH_IDENTITY_W authidentity;
SecureZeroMemory( &authidentity, sizeof(authidentity) );
authidentity.User = L"MyUser";
authidentity.UserLength = wcslen( authidentity.User );
authidentity.Domain = L"MyDomain ";
authidentity.DomainLength = wcslen( authidentity.Domain );
authidentity.Password = L"";
authidentity.PasswordLength = wcslen( authidentity.Password );
authidentity.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
SecureZeroMemory( authninfo, sizeof(SOLE_AUTHENTICATION_INFO)*2 );
// NTLM Settings
authninfo[0].dwAuthnSvc = RPC_C_AUTHN_WINNT;
authninfo[0].dwAuthzSvc = RPC_C_AUTHZ_NONE;
authninfo[0].pAuthInfo = &authidentity;
// Kerberos Settings
authninfo[1].dwAuthnSvc = RPC_C_AUTHN_GSS_KERBEROS ;
authninfo[1].dwAuthzSvc = RPC_C_AUTHZ_NONE;
authninfo[1].pAuthInfo = &authidentity;
SOLE_AUTHENTICATION_LIST authentlist;
authentlist.cAuthInfo = 2;
authentlist.aAuthInfo = authninfo;
CoInitializeSecurity(
NULL,
-1,
NULL,
NULL,
RPC_C_AUTHN_LEVEL_CALL,
RPC_C_IMP_LEVEL_IMPERSONATE,
&authentlist,
EOAC_NONE,
NULL);
Com poskytuje výchozí úrovně zabezpečení čtení ze systémového registru. Pokud ale není výslovně upraveno, nastavení registru nastaví úroveň zosobnění příliš nízkou, aby rozhraní WMI fungovalo. Výchozí úroveň zosobnění je obvykle RPC_C_IMP_LEVEL_IDENTIFY, ale rozhraní WMI potřebuje alespoň RPC_C_IMP_LEVEL_IMPERSONATE, aby fungovalo s většinou poskytovatelů, a můžete narazit na situaci, kdy potřebujete nastavit vyšší úroveň zosobnění. Další informace naleznete v tématu Připojení k rozhraní WMI na vzdáleném počítači. Následující tabulka uvádí různé úrovně zosobnění.
Úroveň | Popis |
---|---|
RPC_C_IMP_LEVEL_DEFAULT | Operační systém zvolí úroveň zosobnění. |
RPC_C_IMP_LEVEL_ANONYMOUS | Server může zosobnit klienta, ale token zosobnění se nedá použít pro nic. |
RPC_C_IMP_LEVEL_IDENTIFY | Server může získat identitu klienta a vydávat se za klienta pro ověření seznamu řízení přístupu (ACL). |
RPC_C_IMP_LEVEL_IMPERSONATE | Server může předstírat identitu klienta při překročení hranice jednoho počítače. |
RPC_C_IMP_LEVEL_DELEGATE | Server může zosobnit klienta přes více hranic a může volat jménem klienta. |