【问题标题】:Invoking functions with `out` arguments, passing arguments by reference in JScript调用不带参数的函数,在 JAVAScript 中通过引用传递参数
【发布时间】:2010-11-29 20:17:03
【问题描述】:

我在 JScript (WSH) 中使用以下代码通过 WMI 连接到本地注册表:var registry = GetObject('winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\default:StdRegProv');,并且可以正常工作。

然后我必须确定是否允许我删除密钥而不真正尝试删除它(例如执行非破坏性检查)。我查看了文档,发现我需要 StdRegProv.CheckAccess() 方法。问题是 CheckAccess 将结果作为 out 参数返回,而我在 JScript 中找不到 VBScript 的 ByRef 等效项。

在 Internet 的某个地方,我发现使用 SWbemServices.ExecMethod 会有所帮助,但我还没有弄清楚如何使用它。

谁能给我提供 JScript 中的代码示例,使用通过引用传递的参数执行函数调用?

【问题讨论】:

    标签: javascript vbscript wmi jscript


    【解决方案1】:

    呵呵,搞定了。

    对于任何需要它的人,JScript 中的CheckAccess 调用看起来像这样:

    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);
    };
    

    【讨论】:

      猜你喜欢
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多