Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Per impostazione predefinita, un'applicazione o uno script riceve i dati dal provider corrispondente quando esistono due versioni di provider. Il provider a 32 bit restituisce dati a un'applicazione a 32 bit, inclusi tutti gli script e il provider a 64 bit restituisce i dati alle applicazioni compilate a 64 bit. Tuttavia, un'applicazione o uno script può richiedere dati dal provider non predefinito, se esistente, notificando a WMI tramite flag sulle chiamate al metodo.
Indicatori di contesto
Le bandiere di stringa __ProviderArchitecture e __RequiredArchitecture hanno un set di valori gestiti da WMI, ma non definiti nei file di intestazione o nelle librerie di tipi dell'SDK. I valori vengono inseriti in un parametro di contesto per segnalare a WMI che devono richiedere dati dal provider non predefinito.
Di seguito sono elencati i flag e i relativi valori possibili.
-
__ArchitetturaDelFornitore
-
Valore intero, 32 o 64, che specifica la versione a 32 bit o a 64 bit.
-
__RequiredArchitecture
-
Valore booleano usato oltre a __ProviderArchitecture per forzare il caricamento della versione del provider specificata. Se la versione non è disponibile, WMI restituisce l'errore 0x80041013, wbemErrProviderLoadFailure per Visual Basic e WBEM_E_PROVIDER_LOAD_FAILURE per C++. Il valore predefinito per questo flag quando non viene specificato è FALSE.
In un sistema a 64 bit con versioni side-by-side di un provider, un'applicazione a 32 bit o uno script riceve automaticamente i dati dal provider a 32 bit, a meno che non vengano forniti questi flag e indichino che i dati del provider a 64 bit devono essere restituiti.
Uso dei flag di contesto
Le applicazioni C++ possono usare l'interfacciaIWbemContextcon IWbemServices::ExecMethod per comunicare l'uso di un provider non predefinito a WMI.
In scripting e Visual Basic, è necessario creare un oggetto SWbemNamedValueSet contenente i flag per il parametro objWbemNamedValueSet di SWbemServices.ExecMethod. Per altre informazioni sulla configurazione degli oggetti parameters per questa chiamata, vedere Costruzione di oggetti InParameters e Analisi di oggetti OutParameters.
È possibile eseguire in modo sicuro script e applicazioni usando i flag di contesto nei sistemi operativi meno recenti, perché WMI li ignora nei sistemi in cui non vengono implementati. Anche se esistono versioni a 32 bit e a 64 bit del provider del Registro di sistema, si noti che esiste una sola versione del repository WMI.
Accesso all'Hive del Registro di Sistema predefinito
La serie di esempi seguente utilizza il provider del Registro di sistema , con versioni affiancate a 32 bit e a 64 bit preinstallate nei sistemi operativi a 64 bit. In questi esempi, i client a 32 bit ottengono i dati restituiti dal provider dal nodo a 32 bit HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft. I client a 64 bit ottengono i dati restituiti dal provider dal nodo a 64 bit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Logging.
Gli script illustrano come chiamare i metodi del Registro di sistema StdRegProv classe tramite SWbemServices.ExecMethod per ottenere dati dall'hive del Registro di sistema a 32 bit.
Lo script seguente recupera i dati dal provider che corrisponde alla larghezza del bit del chiamante, in questo caso a 64 bit, perché si tratta di uno script in esecuzione con l'host di script Windows a 64 bit (WSH). Lo script ottiene il valore dal nodo del Registro di sistema a 64 bit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\CIMOM\Logging anziché dal nodo a 32 bit 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
Se il valore Logging nell'hive predefinito è impostato su 1, l'output dello script dovrebbe essere simile al seguente:
instance of __PARAMETERS
{
ReturnValue = 0;
sValue = "1";
};
WMI Logging is set to 1
Esempio: richiesta specifica della sezione del Registro di sistema a 32 bit su un sistema a 64 bit
Nell'esempio modificato seguente dello script predefinito viene usato il flag stringa __ProviderArchitecture per richiedere l'accesso ai dati del Registro di sistema a 32 bit in un computer a 64 bit. Il chiamante è connesso all'hive a 32 bit indipendentemente dal fatto che si tratti di un'applicazione a 32 o a 64 bit.
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
Esempio: Forzare WMI ad accedere al "Hive" del Registro di sistema a 32 bit in un computer a 64 bit
La modifica seguente dello script precedente aggiungendo i flag __ProviderArchitecture e __RequiredArchitecture al parametro di contesto forza WMI a caricare il provider a 32 bit e ottenere dati a 32 bit. Se il provider non esiste, si verifica un errore di caricamento del provider. L'oggetto context deve essere fornito nella connessione a WMI chiamando 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
Argomenti correlati