2010-11-29 52 views
2

J'utilise le code suivant dans JScript (WSH) pour me connecter au registre local en utilisant WMI: var registry = GetObject('winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\default:StdRegProv'); et cela fonctionne.Invoquer des fonctions avec des arguments `out`, en passant des arguments par référence dans JScript

Ensuite, je dois déterminer si je suis autorisé à supprimer la clé sans vraiment essayer de la supprimer (par exemple, effectuer une vérification non destructive). J'ai regardé des docs et j'ai trouvé que j'avais besoin de la méthode StdRegProv.CheckAccess(). Le problème est que CheckAccess renvoie le résultat comme argument out et je n'ai pas pu trouver l'équivalent ByRef de VBScript dans JScript.

Quelque part sur Internet, j'ai trouvé que l'utilisation de SWbemServices.ExecMethod aiderait en quelque sorte, mais je n'avais pas compris comment je peux l'utiliser pour le moment.

Quelqu'un pourrait-il me fournir un exemple de code dans JScript en effectuant un appel de fonction avec un argument passé par référence?

Répondre

2

Heh, ça marche.

Pour tous ceux qui en auront besoin, CheckAccess invokation dans JScript ressemble à quelque chose comme ceci:

function CheckAccess(defKey, subkeyName, required) { 
    var providerName = "StdRegProv"; 
    var funcName = "CheckAccess"; 

    // connect to WMI 
    var services = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\default"); 

    // get provider 
    var registry = services.Get(providerName); 

    var in_params = registry.Methods_(funcName).InParameters.SpawnInstance_(); 
    in_params.hDefKey = defKey; 
    in_params.sSubKeyName = subkeyName; 
    in_params.uRequired = required; 

    var outParams = services.ExecMethod(providerName, funcName, inParams); 

    return Boolean(outParams.bGranted); 
};