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.
Speciální klientské aplikace můžou vyvolat privilegované operace. Aplikace může například umožnit správci restartovat nereagující kancelářský počítač. Pomocí rozhraní WMI (Windows Management Instrumentation) můžete spustit privilegovanou operaci voláním zprostředkovatele rozhraní WMI pro privilegovanou operaci.
Následující postup popisuje, jak volat zprostředkovatele pro privilegovanou operaci.
Volání poskytovatele pro privilegovanou operaci
Získejte oprávnění pro proces klienta ke spuštění privilegované operace.
Správce obvykle nastaví oprávnění pomocí systémových nástrojů pro správu – před spuštěním procesu.
Získejte oprávnění pro proces zprostředkovatele, abyste povolili privilegovanou operaci.
Obvykle můžete nastavit oprávnění zprostředkovatele pomocí funkce AdjustTokenPrivileges.
Získejte oprávnění pro proces klienta, abyste povolili privilegovanou operaci.
Tento krok je nezbytný pouze v případě, že je poskytovatel místním pro klienta. Pokud klient a poskytovatel existují na stejném počítači, musí klient konkrétně povolit privilegovanou operaci pomocí jedné z následujících technik:
- Pokud klient vlastní proces, může použít AdjustTokenPrivileges k tomu, aby upravil token procesu před voláním rozhraní WMI. V takovém případě už nemusíte kódovat.
- Pokud klient nemá přístup k tokenu klienta, může pomocí následujícího postupu vytvořit token vlákna a použít AdjustTokenPrivileges k tomuto tokenu.
Následující postup popisuje, jak vytvořit token vlákna a použít AdjustTokenPrivileges pro tento token.
Vytvořit token vlákna a použít funkci AdjustTokenPrivileges na tento token
Vytvořte kopii tokenu procesu voláním ImpersonateSelf.
Načtení nově vytvořeného tokenu vlákna voláním GetTokenInformation.
Povolte privilegovanou operaci na novém tokenu pomocí volání AdjustTokenPrivileges.
Získejte ukazatel na IWbemServices.
Zakryjte ukazatel na IWbemServices pomocí volání CoSetProxyBlanket.
Opakujte kroky 1 až 5 při každém volání rozhraní WMI.
Poznámka
Kroky je nutné zopakovat, protože tokeny MODELU COM jsou nesprávně uložené v mezipaměti.
Příklad kódu v tomto tématu vyžaduje, aby se správně zkompiloval následující příkaz #include.
#include <wbemidl.h>
Následující příklad kódu ukazuje, jak povolit oprávnění na místním počítači.
// Get the privileges
// The token has been obtained outside the scope of this code sample
// ==================
DWORD dwLen;
bool bRes;
HANDLE hToken;
// obtain dwLen
bRes = GetTokenInformation(
hToken,
TokenPrivileges,
NULL,
0,
&dwLen
);
BYTE* pBuffer = new BYTE[dwLen];
if(pBuffer == NULL)
{
CloseHandle(hToken);
return WBEM_E_OUT_OF_MEMORY;
}
bRes = GetTokenInformation(
hToken,
TokenPrivileges,
pBuffer,
dwLen,
&dwLen
);
if (!bRes)
{
CloseHandle(hToken);
delete [] pBuffer;
return WBEM_E_ACCESS_DENIED;
}
// Iterate through all the privileges and enable them all
// ======================================================
TOKEN_PRIVILEGES* pPrivs = (TOKEN_PRIVILEGES*)pBuffer;
for (DWORD i = 0; i < pPrivs->PrivilegeCount; i++)
{
pPrivs->Privileges[i].Attributes |= SE_PRIVILEGE_ENABLED;
}
// Store the information back in the token
// =========================================
bRes = AdjustTokenPrivileges(
hToken,
FALSE,
pPrivs,
0, NULL, NULL
);
delete [] pBuffer;
CloseHandle(hToken);
if (!bRes)
return WBEM_E_ACCESS_DENIED;
else
return WBEM_S_NO_ERROR;