【发布时间】:2021-11-23 11:59:15
【问题描述】:
我正在尝试读取 HKCR\CLSID\ 子项中的特定子项。 {04271989-C4D2-####-####-############}
我将 # 用于可能因用户而异的值。此 CLSID 与 OneDrive 客户端相关。我想阅读并更改 DWORD。通过一些谷歌工作,我整理了以下代码。
const HKEY_CLASSES_ROOT = &H80000000
const REG_PATH = "CLSID\"
const ONEDRIVE_MASK = "{04271989-C4D2-*"
dim re: set re = New RegExp
re.IgnoreCase = True
re.Global = True
re.Pattern = ONEDRIVE_MASK
dim oReg: set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
oReg.EnumKey HKEY_CLASSES_ROOT, REG_PATH, arrSubKeys
Set WshShell = CreateObject( "WScript.Shell" )
dim intValue
dim intCnt
for each subkey In arrSubKeys
if re.test(subkey) then
oReg.GetExpandedStringValue HKEY_CLASSES_ROOT, REG_PATH & subkey, "System.IsPinnedToNameSpaceTree", intValue
WScript.Echo "CLSID Value: " & subkey
WScript.Echo "System.IsPinnedToNameSpaceTree Value: " & intValue
'WshShell.RegWrite "HKCR" & REG_PATH & subkey & "\System.IsPinnedToNameSpaceTree", 1,"REG_DWORD"
end if
next
结果是我正在寻找的(子项)永远找不到。我修改了脚本以仅输出它可以看到的所有子项,然后将该列表与 CLSID 注册表的导出进行比较,然后我将其清理为仅显示 CLSID 下一级内的子项列表。总列表超过 7800 个条目,在导出中找到以下子项列表,但对 vbscript 不可见。
{00425F68-FFC1-445F-8EDF-EF78B84BA1C7}
{018D5C66-4533-4307-9B53-224DE2ED1FE6}
{021E4F06-9DCC-49AD-88CF-ECC2DA314C8A}
{1BF42E4C-4AF4-4CFD-A1A0-CF2960B8F63E}
{20894375-46AE-46E2-BAFD-CB38975CDCE6}
{2DAEC322-90B2-47E4-BB08-0DA841935A6B}
{389510b7-9e58-40d7-98bf-60b911cb0ea9}
{4410DC33-BC7C-496B-AA84-4AEA3EEE75F7}
{47E6DCAF-41F8-441C-BD0E-A50D5FE6C4D1}
{5AB7172C-9C11-405C-8DD5-AF20F3606282}
{71DCE5D6-4B57-496B-AC21-CD5B54EB93FD}
{7AFDFDDB-F914-11E4-8377-6C3BE50D980C}
{82CA8DE3-01AD-4CEA-9D75-BE4C51810A9E}
{8F3C945C-4222-45BD-BFFF-3B1A67BE13E3}
{917E8742-AA3B-7318-FA12-10485FB322A2}
{94269C4E-071A-4116-90E6-52E557067E4E}
{9489FEB2-1925-4D01-B788-6D912C70F7F2}
{9AA2F32D-362A-42D9-9328-24A483E2CCC3}
{A0396A93-DC06-4AEF-BEE9-95FFCCAEF20E}
{A78ED123-AB77-406B-9962-2A5D9D2F7F30}
{A926714B-7BFC-4D08-A035-80021395FFA8}
{BBACC218-34EA-4666-9D7A-C78F2274A524}
{C5FF006E-2AE9-408C-B85B-2DFDD5449D9C}
{CB3D0F55-BC2C-4C1A-85ED-23ED75B5106B}
{CBDC4B31-CBE4-4A5B-BECF-64B29E47D2AD}
{d1b22d3d-8585-53a6-acb3-0e803c7e8d2a}
{D39E7BDD-7D05-46b8-8721-80CF035F57D7}
{ED81C073-1F84-4ca8-A161-183C776BC651}
{F241C880-6982-4CE5-8CF7-7085BA96DA5A}
我在一些互联网搜索中发现有人谈论 64 位与 32 位注册表项。我见过引用 64vs32 的注册表子项。
示例: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node
但是有一些 32 位的注册表项不能被 64 位读取,反之......对我来说是新的概念。真的有这样的事情,还是我误读了我所看到的?如果它是一个东西,那么在 HKCR 内部是否存在这种差异?还有……你怎么分辨?
如果我错了,vbscript 能够看到上述条目的问题是什么?
【问题讨论】:
-
您是否尝试过从提升的(管理员:)Cmd 提示符运行脚本?
-
这能回答你的问题吗? How to run vbs as administrator from vbs?
-
从提升的命令提示符运行脚本会产生相同的结果。它仍然看不到已识别的子键。
-
我还对脚本可以看到的子键和它不能看到的子键的权限进行了比较。我看不出有什么区别。
-
任何人都可以对自己的注册表运行脚本,看看这是否常见?添加以下行 在当前行 10 之前添加以下内容 outFile=".\OneDriveScriptOutput.txt" 在当前行 14 之后添加以下内容 objFile.Write subkey & vbCrLf 在脚本末尾添加以下内容 objFile.Close 比较该列表,以从注册表的 clsid 导出。 1. 对所有条目进行排序,这样所有的 {clsid 条目} 就组合在一起了。 2.删除所有不以“{”开头的记录 3.添加一个FIND("]", A1:A25000) 4.按新列排序 5.删除所有找到“]”的条目
标签: vbscript registry 32bit-64bit