Som standard tar ett program eller skript emot data från motsvarande provider när det finns två versioner av providrar. 32-bitarsprovidern returnerar data till ett 32-bitarsprogram, inklusive alla skript, och 64-bitarsprovidern returnerar data till 64-bitars kompilerade program. Ett program eller skript kan dock begära data från nondefault-providern, om den finns, genom att meddela WMI via flaggor i metodanrop.
Kontextflaggor
__ProviderArchitecture- och __RequiredArchitecture-strängflaggor har en uppsättning värden som hanteras av WMI men som inte definieras i SDK-headerfiler eller typlibfiler. Värdena placeras i en kontextparameter för att signalera WMI att den ska begära data från nondefault-providern.
Nedan visas flaggorna och deras möjliga värden.
__ProviderArchitecture
Heltalsvärde, antingen 32 eller 64, som anger 32- eller 64-bitarsversionen.
__RequiredArchitecture
Booleskt värde som används utöver __ProviderArchitecture för att framtvinga inläsning av den angivna providerversionen. Om versionen inte är tillgänglig returnerar WMI felet 0x80041013, wbemErrProviderLoadFailure för Visual Basic och WBEM_E_PROVIDER_LOAD_FAILURE för C++. Standardvärdet för den här flaggan när den inte har angetts är FALSE.
I ett 64-bitarssystem som har sida vid sida-versioner av en provider tar ett 32-bitarsprogram eller skript automatiskt emot data från 32-bitarsprovidern, såvida inte dessa flaggor tillhandahålls och anger att 64-bitars providerdata ska returneras.
Använda kontextflaggor
C++-program kan använda gränssnittet IWbemContext med IWbemServices::ExecMethod för att kommunicera användningen av en nondefault-provider till WMI.
Du kan köra skript och program på ett säkert sätt med hjälp av kontextflaggor i äldre operativsystem, eftersom WMI ignorerar dem i system där de inte implementeras. Även om det finns 32-bitars- och 64-bitarsversioner av systemregisterprovidern bör du observera att det bara finns en version av WMI-lagringsplatsen.
Åtkomst till standardregisterstruktur
I följande serie med exempel används Registry Provider, som har 32-bitars- och 64-bitarsversioner förinstallerade på 64-bitars operativsystem sida vid sida. I de här exemplen får 32-bitarsklienter data som returneras av providern från 32-bitarsnoden HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft. 64-bitarsklienter får data som returneras av providern från 64-bitarsnoden HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Logging.
Skripten visar hur du anropar metoderna för klassen Registry StdRegProv via SWbemServices.ExecMethod för att hämta data från 32-bitars registerdatafilen.
Följande skript hämtar tillbaka data från providern som matchar bitbredden för anroparen, i det här fallet 64 bitar, eftersom det är ett skript som körs under 64-bitars Windows Script Host (WSH). Skriptet hämtar värdet från 64-bitars registernoden HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\CIMOM\Logging i stället för 32-bitarsnoden 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
Om värdet loggning i standarddatafilen är inställt på 1 bör utdata från skriptet se ut ungefär så här:
instance of __PARAMETERS
{
ReturnValue = 0;
sValue = "1";
};
WMI Logging is set to 1
Exempel: Begär specifikt 32-bitars register hive på en 64-bitars dator
I följande ändrade exempel på standardskriptet används flaggan __ProviderArchitecture sträng för att begära åtkomst till 32-bitars registerdata på en 64-bitars dator. Anroparen är ansluten till 32-bitars hive oavsett om det är ett 32- eller 64-bitarsprogram.
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
Exempel: Tvinga WMI att komma åt 32-bitars registerdatafilen på en 64-bitars dator
Följande ändring av skriptet ovan genom att lägga till flaggorna __ProviderArchitecture och __RequiredArchitecture i kontextparametern tvingar WMI att läsa in 32-bitarsprovidern och hämta 32-bitarsdata. Om tjänsteleverantören inte finns uppstår ett fel vid inläsning av tjänsteleverantör. Kontextobjektet måste anges i anslutningen till WMI genom att anropa 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
Den här utbildningsvägen omfattar Windows Management Instrumentation (WMI) och Common Information Model (CIM). Dessa tekniker hjälper till att komma åt information om en dator. Dessutom ger båda teknikerna lokal och fjärråtkomst till hanteringsinformation från operativsystemet, datormaskinvara och installerad programvara.