gpt4 book ai didi

c# - UWF_Volumes 没有 CurrentSession=False 的条目

转载 作者:行者123 更新时间:2023-12-04 17:48:45 38 4
gpt4 key购买 nike

一段时间以来,我一直在尝试弄清楚如何正确设置这个新的 UWF(统一写入过滤器)。不幸的是,似乎只有 Win 8.1 行业 ( here ) 的文档,而不是 Win 10。我希望此后没有相关的更改。

我也在 WindowsDevCenter 上询问过这个问题,但到目前为止没有得到任何回应。

这是我的问题:

通过 WMI 提供程序,我现在启用了 UWF (UWF_Filter.Enable()),但我无法保护任何卷。

音量列表看起来也很奇怪:有 4 个条目,每个条目都是 CurrentSession=True

  • 第一个是没有驱动器盘符的卷,只有卷 ID。
  • 第二个是 C:
  • 然后有 2 个相同的 D: 。

通常每个卷不应该有 2 个条目,一个 CurrentSession 为 true,另一个为 false,这意味着它是在重启后应用的设置?

如果我尝试使用 DriveLetter=C: 在 ManagementObject 上执行 Protect,我会得到一个 Access denied 异常,我假设是因为它当前 session 的对象。

此外,如果我在控制台上尝试 uwfmgr.exe Volume Protect C:,它就会挂起:没有反应,没有错误,只有一个永远闪烁的光标。 编辑: 原来这是由另一个安装的软件引起的问题。另见下文。

在保护卷之前,我是否必须启用或禁用或执行任何其他操作?

提前致谢

塞巴斯蒂安

我的系统:

  • Windows 10 物联网企业版 2016 LTSB x64
  • 1 个 250GB 固态硬盘,带引导、C: 和 D:

编辑:

Here我问了一个跟进问题,其中包含一些其他细节和解决方法。例如,如果我使用 uwfmgr.exe volume protect c:,它可以工作并且 UWF_Volume 现在突然有(正确的)2 个 C: 条目,一个用于当前,一个用于下届 session 。

但是我想避免这种情况,因为恕我直言,它应该只能通过 WMI 解决。

编辑 2: @sommmen

分区布局如下:一个磁盘4个分区。

  1. 启动,500MB
  2. C:/, 45GB
  3. 未知,500MB(我认为是启动备份)
  4. D:/, ~200GB

附言:

任何人都可以创建标签 uwfuwfmgr 吗?会很好:-)

最佳答案

在我的测试中,重启后经常会出现丢失的 UWF_Volume 实例。但如果没有,您可以使用 ManagementClass.CreateInstance() 直接创建它们。

这里的问题是官方文档并不完全正确。 UWF_Volume.VolumeName 属性的描述是:

The unique identifier of the volume on the current system. TheVolumeName is the same as the DeviceID property of the Win32_Volumeclass for the volume.

来自:https://learn.microsoft.com/en-us/windows-hardware/customize/enterprise/uwf-volume#properties

事实上,DeviceID 在将其用作 UWF_Volume.VolumeName 的值之前需要稍作修改:

DeviceID.Substring(4).TrimEnd('\\')

因此,在删除前缀 \\?\ 并删除任何尾部斜杠后,您可以为指定设备创建具有 CurrentSession=false 的实例。

这也适用于没有任何 uwfmgr.exe 的 Windows 10 Pro。虽然,官方不推荐/支持。

此外,我还不能删除实例。因此请务必仅添加正确的值。

完整示例:

// example value
var DeviceId_From_Win32_Volume = @"\\?\Volume{c2eac053-27e3-4f94-b28c-c2c53d5f4fe1}\";

// example value
var myDriveLetter = "C:";
var myDeviceId = DeviceId_From_Win32_Volume.Substring(4).TrimEnd('\\');

var wmiNamespace = "root\\standardcimv2\\embedded";
var className = "UWF_Volume";

var mgmtScope = new ManagementScope {Path = {NamespacePath = wmiNamespace}};
var mgmtPath = new ManagementPath(className);
var mgmtClass = new ManagementClass(mgmtScope, mgmtPath, null);

// prepare the new object
var newObj = mgmtClass.CreateInstance();
newObj.SetPropertyValue("DriveLetter", myDriveLetter);
newObj.SetPropertyValue("VolumeName", myDeviceId);
newObj.SetPropertyValue("CurrentSession", false);
newObj.SetPropertyValue("CommitPending", false);
newObj.SetPropertyValue("BindByDriveLetter", false);

// create the WMI instance
newObj.Put(new PutOptions {Type = PutType.CreateOnly});

关于c# - UWF_Volumes 没有 CurrentSession=False 的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46784675/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com