【问题标题】:GetVolumeInformation for network drives when admin returns 0管理员返回 0 时网络驱动器的 GetVolumeInformation
【发布时间】:2010-12-06 07:47:06
【问题描述】:

我正在使用此代码检索卷序列

    [DllImport("Kernel32.dll", SetLastError = true)]
    extern static bool GetVolumeInformation(string vol, StringBuilder name, int nameSize, out uint serialNum, out uint maxNameLen, out uint flags, StringBuilder fileSysName, int fileSysNameSize);


    public static uint GetVolumeSerial(string strDriveLetter)
    {
        uint serialNum, maxNameLen, flags;
        bool ok = GetVolumeInformation(strDriveLetter, null, 0, out serialNum,out maxNameLen, out flags, null, 0);
        return serialNum;
    }

效果很好,除非我以管理员身份通过应用程序清单 UAC 提升运行它总是为映射的网络驱动器返回 0(但它可以正常工作)

也许管理员用户出于某种原因看不到映射的驱动器(您会认为它是相反的)。有什么办法可以解决这个问题,或者只是以登录用户的身份调用该代码?

我在 64 位 Windows 7 上,但在 x86 模式下运行应用程序

【问题讨论】:

    标签: c# windows winapi


    【解决方案1】:

    映射的网络驱动器是为一个用户映射的。当您以其他用户身份连接时,就其他用户而言,该驱动器不存在。

    如果您需要多个用户访问同一网络路径,请使用实际的 UNC 路径(“\\server\path”)。映射网络驱动器只是为人类提供便利。

    如果您确实需要多个用户访问映射的网络驱动器,则需要分别为每个用户映射它。例如,您可以在每个用户登录时运行并调用 net use 的批处理文件中执行此操作(不过,我不太确定它是否会对 SYSTEM 等用户有所帮助)。

    【讨论】:

    • 我无法影响人们如何映射他们的驱动器,不幸的是我需要通过它的驱动器号访问串行
    • 那么您必须在以映射驱动器的同一用户身份运行时执行此操作(或者您必须自己实现一些逻辑,在提升之前将映射驱动器的“含义”保存在某处) .
    猜你喜欢
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2011-10-04
    • 2019-01-19
    • 2023-03-28
    • 2017-01-22
    • 2011-06-12
    相关资源
    最近更新 更多