Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Domyślnie aplikacja lub skrypt odbiera dane od odpowiedniego dostawcy, gdy istnieją dwie wersje dostawców. Dostawca 32-bitowy zwraca dane do aplikacji 32-bitowej, w tym wszystkich skryptów, a dostawca 64-bitowy zwraca dane do 64-bitowych aplikacji skompilowanych. Jednak aplikacja lub skrypt może żądać danych od dostawcy niedomyślnego, jeśli istnieje, powiadamiając o tym usługę WMI za pomocą flag w wywołaniach metod.
Flagi kontekstu
Flagi ciągów __ProviderArchitecture i __RequiredArchitecture mają zestaw wartości obsługiwanych przez usługę WMI, ale nie są zdefiniowane w plikach nagłówka zestawu SDK ani w plikach biblioteki typów. Wartości są umieszczane w parametrze kontekstu, aby zasygnalizować WMI, że powinno żądać danych od dostawcy spoza ustawień domyślnych.
Poniżej wymieniono flagi i ich możliwe wartości.
-
__ProviderArchitecture
-
Wartość całkowita, 32 lub 64, określająca wersję 32-bitową lub 64-bitową.
-
__WymaganaArchitektura
-
Wartość logiczna używana oprócz __ProviderArchitecture w celu wymuszenia załadowania określonej wersji dostawcy. Jeśli wersja jest niedostępna, usługa WMI zwraca błąd 0x80041013, wbemErrProviderLoadFailure dla języka Visual Basic i WBEM_E_PROVIDER_LOAD_FAILURE dla języka C++. Wartość domyślna dla tej flagi, jeśli nie jest określona, jest FALSE.
W 64-bitowym systemie, który ma równoległe wersje dostawcy, aplikacja 32-bitowa lub skrypt automatycznie odbiera dane od dostawcy 32-bitowego, chyba że te flagi są dostarczane i wskazują, że dane dostawcy 64-bitowego powinny zostać zwrócone.
Używanie flag kontekstu
Aplikacje języka C++ mogą używać interfejsu IWbemContext razem z IWbemServices::ExecMethod do przekazywania informacji o użyciu niestandardowego dostawcy do usługi WMI.
W skryptach i Visual Basic trzeba utworzyć obiekt SWbemNamedValueSet, który zawiera flagi dla parametru objWbemNamedValueSet w metodzie SWbemServices.ExecMethod. Aby uzyskać więcej informacji na temat konfigurowania obiektów parametrów dla tego wywołania, zobacz Konstruowanie obiektów InParameters i analizowanie obiektów OutParameters.
Skrypty i aplikacje można bezpiecznie uruchamiać przy użyciu flag kontekstowych w starszych systemach operacyjnych, ponieważ usługa WMI ignoruje je w systemach, w których nie są implementowane. Chociaż istnieją wersje 32-bitowe i 64-bitowe dostawcy rejestru systemowego, należy pamiętać, że istnieje tylko jedna wersja repozytorium WMI.
Dostęp do domyślnego hive rejestru
W poniższej serii przykładów użyto Registry Provider, który ma równoległe 32-bitowe i 64-bitowe wersje wstępnie zainstalowane w 64-bitowych systemach operacyjnych. W tych przykładach klienci 32-bitowi uzyskują dane zwracane przez dostawcę z 32-bitowego węzła HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft. Klienci 64-bitowi uzyskują dane zwrócone przez dostawcę z węzła 64-bitowego HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Logging.
Skrypty pokazują, jak wywołać metody Rejestru StdRegProv klasy za pomocą SWbemServices.ExecMethod uzyskać dane z 32-bitowego rejestru hive.
Poniższy skrypt pobiera dane od dostawcy zgodne z szerokością bitową wywołującego, czyli 64 bity, ponieważ działa w 64-bitowym hostie skryptów Windows (WSH). Skrypt pobiera wartość z 64-bitowego węzła rejestru HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\CIMOM\Logging zamiast węzła 32-bitowego HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\WBEM\CIMOM.
strComputer = "."
Const HKLM = &h80000002
Set objReg = Getobject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer _
& "\root\default:stdregprov")
'Set up inParameters object
Set Inparams = objReg.Methods_("GetStringValue").Inparameters
Inparams.Hdefkey = HKLM
Inparams.Ssubkeyname = "Software\Microsoft\Wbem\CIMOM"
Inparams.Svaluename = "Logging"
set Outparams = objReg.ExecMethod_("GetStringValue", Inparams)
'Show output parameters object and the registry value HKLM\SOFTWARE\
WScript.Echo Outparams.GetObjectText_
WScript.Echo "WMI Logging is set to " & Outparams.SValue
Jeśli wartość Rejestrowania w domyślnym hive jest ustawiona na 1, dane wyjściowe skryptu powinny wyglądać mniej więcej tak:
instance of __PARAMETERS
{
ReturnValue = 0;
sValue = "1";
};
WMI Logging is set to 1
Przykład: Specyficzne żądanie 32-bitowego obszaru rejestru na komputerze 64-bitowym
Poniższy zmodyfikowany przykład skryptu domyślnego używa flagi ciągu __ProviderArchitecture do żądania dostępu do danych rejestru 32-bitowego na komputerze 64-bitowym. Obiekt wywołujący jest połączony z 32-bitową gałęzią niezależnie od tego, czy jest to aplikacja 32-bitowa, czy 64-bitowa.
strComputer = "."
Const HKLM = &h80000002
Set objCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
objCtx.Add "__ProviderArchitecture", 32
Set objLocator = CreateObject("Wbemscripting.SWbemLocator")
Set objServices = objLocator.ConnectServer(strComputer,"root\default","","",,,,objCtx)
Set objStdRegProv = objServices.Get("StdRegProv")
Set Inparams = objStdRegProv.Methods_("GetStringValue").Inparameters
Inparams.Hdefkey = HKLM
Inparams.Ssubkeyname = "Software\Microsoft\Wbem\CIMOM"
Inparams.Svaluename = "Logging"
set Outparams = objStdRegProv.ExecMethod_("GetStringValue", Inparams,,objCtx)
'show output parameters object and the registry value HKLM\SOFTWARE\
WScript.Echo Outparams.GetObjectText_
WScript.Echo "WMI Logging is set to " & Outparams.SValue
Przykład: Wymuszanie w usłudze WMI dostępu do 32-bitowej gałęzi rejestru na komputerze 64-bitowym
Następująca modyfikacja powyższego skryptu przez dodanie flag __ProviderArchitecture i __RequiredArchitecture do parametru kontekstu wymusza w usłudze WMI załadowanie dostawcy 32-bitowego i pobranie danych 32-bitowych. Jeśli dostawca nie istnieje, wystąpi błąd ładowania dostawcy. Obiekt kontekstu należy podać w połączeniu z usługą WMI, wywołując SWbemLocator.ConnectServer.
strComputer = "."
Const HKLM = &h80000002
Set objCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
objCtx.Add "__ProviderArchitecture", 32
objCtx.Add "__RequiredArchitecture", TRUE
Set objLocator = CreateObject("Wbemscripting.SWbemLocator")
Set objServices = objLocator.ConnectServer(strComputer,"root\default","","",,,,objCtx)
Set objStdRegProv = objServices.Get("StdRegProv")
' Use ExecMethod to call the GetStringValue method
Set Inparams = objStdRegProv.Methods_("GetStringValue").Inparameters
Inparams.Hdefkey = HKLM
Inparams.Ssubkeyname = "Software\Microsoft\Wbem\CIMOM"
Inparams.Svaluename = "Logging"
set Outparams = objStdRegProv.ExecMethod_("GetStringValue", Inparams,,objCtx)
'Show output parameters object and the registry value HKLM\SOFTWARE\
WScript.Echo Outparams.GetObjectText_
WScript.Echo "WMI Logging is set to " & Outparams.SValue
Tematy pokrewne