2

我在 JScript (WSH) 中使用以下代码使用 WMI: 连接到本地注册表var registry = GetObject('winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\default:StdRegProv');,这很有效。

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

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

任何人都可以为我提供 JScript 中的代码示例,使用通过引用传递的参数执行函数调用吗?

4

1 回答 1

3

呵呵,搞定了。

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

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);
};
于 2010-11-29T20:40:05.420 回答