Wykonywanie operacji uprzywilejowanych
Operacje uprzywilejowane wymagają uprawnień zabezpieczeń, takich jak SeLoadDriverPrivilege (wbemPrivilegeLoadDriver w stałe interfejsu API skryptów), uprawnienia, które muszą być włączone dla konta ładującego sterownik urządzenia. Nie można dodać uprawnień do administratora lub użytkownika za pośrednictwem usługi WMI. Możesz włączyć tylko uprawnienia, które już ma konto. Aby uzyskać listę uprawnień, zobacz Privilege_Constants.
Domyślnie użytkownik lokalny na komputerze może odczytywać dane statyczne z repozytorium WMI, zapisywać w wystąpieniach dostarczanych przez dostawców i wykonywać metody dostawcy, chyba że dostawca wymusza własne wymagania dotyczące zabezpieczeń. Tylko administratorzy mogą łączyć się z komputerem zdalnym, zmieniać deskryptory zabezpieczeń lub zmieniać statyczne dane repozytorium WMI, takie jak definicja klasy WMI. Wszystkie uprawnienia są włączone dla połączenia zdalnego. Aby uzyskać więcej informacji, zobacz Zabezpieczanie zdalnego połączenia WMI.
Stałe uprawnień dla języka C++ różnią się od tych, które są używane przez języki automatyzacji, takie jak Visual Basic. Skrypty muszą używać wartości stałej, a nie nazwy. Aby uzyskać więcej informacji, zobacz wykonywanie operacji uprzywilejowanych przy użyciu języka C++ lub wykonywanie operacji uprzywilejowanych przy użyciu języka VBScript.
Częstą przyczyną błędów odmowy dostępu podczas korzystania z usługi WMI jest brak włączonego uprawnienia do operacji, takich jak pobieranie wszystkich wystąpień Win32_NTEventlogFile. Bez włączania uprawnień SeSecurity nie można uzyskać dostępu do pliku dziennika zabezpieczeń.
Poniższy przykład kodu VBScript pokazuje, jak ustawić uprawnienia SeSecurity w ciągu monikera. Kiedy używana jest w nazwie, nazwa uprawnień w nawiasach opuszcza początkowe "Se". Aby uzyskać więcej informacji, zobacz Konstruowanie łańcucha identyfikatorów.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Security)}!\\" _
& strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
("Select * from Win32_NTEventLogFile " _
& "Where LogFileName='Security'")
For Each LogFile in colFiles
Wscript.Echo LogFile.NumberOfRecords
Next
Tematy pokrewne