在本主题中如何在 Windows 7 中为特定用户隐藏驱动器?它讨论了如何隐藏特定用户的驱动器号。我试图遵循 Nathan Hinkle 的答案,但我被卡住了。我需要找到注册表中 3 个不同用户需要使用的 3 个十六进制值。
我需要知道必须使用的十六进制值:
用户 1:禁用驱动器 N,保留其他所有驱动器
用户 2:禁用 M 盘,其他所有盘保持不变
用户 3:禁用驱动器 N 和 M,保留其他所有驱动器
我知道这可能很简单,但我只是不明白如何获取这些值。所以有人能告诉我我需要的 3 个十六进制值吗?此外,如果您觉得需要做一个简短的教程(供将来参考)来说明如何获得这些精确的值,请随意这样做。
请参阅上面的线程链接来了解我需要十六进制值的外观。
答案1
我知道这可能非常简单但我就是不明白……
我理解你的痛苦。我想说的是,你不理解的原因是nhinkle 对另一个问题的回答是因为它没有任何意义。我发现Microsoft TechNet 上的这个解释,其实际含义为:
以这个模板为例:
**** **ZY XWVU TSRQ PONM LKJI HGFE DCBA
在要隐藏的驱动器号下写上 1。在
*
s 和您不想隐藏的驱动器号下写上 0。现在您应该有 32 个1
s 和0
s。转换为十六进制。
我假设你问的是驱动器N:
和M:
,而不是否和米。要隐藏驱动器N:
,您需要
**** **ZY XWVU TSRQ PO否M LKJI HGFE DCBA 0000 0000 0000 0000 0010 0000 0000 0000
结果为 00002000(即2000
十六进制)。用同样的方法,M:
是1000
,而“用户 3”(N:
和 M:
)是3000
。
答案2
不要使用这里给出的答案——它的十六进制转换不正确,就像另一个顶级谷歌结果一样。
您需要做的是前往此处:https://ss64.com/nt/syntax-nodrives.html 如果你想将十进制值转换为十六进制,请使用此网站https://www.rapidtables.com/convert/number/hex-to-decimal.html如果需要,请填写前面的零(例如 0001823F,因为我们需要 8 位十六进制)。
答案3
您可以使用 PowerShell!
'{0:x}' -f [int]('MN'.ToCharArray() | % { 1 -shl ($_ - [char]'A') } | measure -Sum).Sum
# note: ^^ change this to the uppercase letters of all drives you want to hide
上述示例生成3000
(针对用户 3)。使用 justM
生成1000
(针对用户 2);只N
生成2000
(用户 1)。其工作原理如下:
.ToCharArray()
将驱动器说明符字符串拆分成单独的字符,这些字符将独立地沿管道移动%
是 的简写ForEach-Object
;它允许为管道上的每一项运行一段代码,或者在我们的例子中,在将每一项传递到管道之前对其进行转换$_ - [char]'A'
A
从管道上的当前字母字符中减去该字符,计算一个驱动器字母的位位置(例如C
-A
= 2)1 -shl (...)
通过在相应的位位置放置二进制数字 1 来计算仅隐藏一个当前驱动器的数值measure -Sum
收集并累加流水线中传来的所有数字,将所有单个驱动器隐藏值合并为一个数字[int](...).Sum
从测量结果对象中获取Sum
属性并将其转换为整数(而不是双精度浮点数,后者不容易格式化为十六进制)'{0:x}' -f
将右侧的数字格式化为十六进制字符串