【问题标题】:How to check programatically that 8.3 short path name is enabled on system?如何以编程方式检查系统上是否启用了 8.3 短路径名?
【发布时间】:2013-08-31 00:29:10
【问题描述】:

我知道我们可以通过设置 NtfsDisable8dot3NameCreation 手动启用或禁用 8.3 短路径名支持。

但是如何通过代码读取这个系统信息呢?实际上,我必须根据系统是否启用了 8.3 来禁用某些功能。

请帮忙

谢谢

【问题讨论】:

  • 您是否考虑过创建一个文件,然后尝试使用它的 8.3 名称读取它?
  • 感谢您的回复。不我没有。所以你的意思是我使用 getshortpathname() 如果它返回非 NULL 长度那么这意味着系统启用了 8.3 短路径名?我会试试这个。谢谢
  • 不,我的意思是您将文件写入磁盘,然后尝试使用其 8.3 名称将其读回。
  • 为什么不直接检查注册表?
  • 请记住,此功能的当前设置不一定与过去或将来相同,也不控制网络服务器上的设置。

标签: windows path filesystems


【解决方案1】:

fsutil 提供此功能:

PS C:\Windows\system32> FSUTIL.EXE 8dot3name query D: 
The volume state is: 0 (8dot3 name creation is enabled). 
The registry state is: 2 (Per volume setting - the default).

Based on the above two settings, 8dot3 name creation is enabled on D:

如果您需要 API,请使用 GetVolumeInformation,它提供了以下功能:

lpMaximumComponentLength [out, optional]

指向接收最大长度的变量的指针,以 TCHAR 为单位, 指定文件系统支持的文件名组件。

文件名组件是文件名之间的部分 反斜杠。存储在变量中的值 *lpMaximumComponentLength 指向用于指示指定的文件系统支持长名称。例如,对于 FAT 文件 支持长名称的系统,该函数存储值 255, 而不是之前的 8.3 指标。长名字也可以 在使用 NTFS 文件系统的系统上受支持。

【讨论】:

  • 我测试了上述方法。当我在启用和禁用 8.3(使用 regedit)之间切换时,我总是在 *lpMaximumComponentLength 中得到 255 值。查询:PS C:\Windows\system32> FSUTIL.EXE 8dot3name 查询“CurrentWorkingDir”显示修改regedit的效果。我要不要做点别的?
  • 支持该评论。这使您可以区分不支持长名称的 FAT 卷和支持长名称的 FAT 卷,但似乎没有一个标志可以区分不支持短名称的 NTFS 卷和支持短名称的 NTFS 卷。
猜你喜欢
  • 2011-06-18
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多