WMI Win32_Share Windows 10 拒绝访问
WMI Win32_Share Access Denied on Windows 10
我们使用以下代码在 Windows 7 中创建共享:
public static CreateUncShareResult Create(string path, string shareName, string description, AccessControlList permissions) {
ManagementClass managementClass = new ManagementClass(WIN32_Share);
const string METHOD_NAME = "Create";
ManagementBaseObject inParams = managementClass.GetMethodParameters(METHOD_NAME);
inParams["Description"] = description;
inParams["Name"] = shareName;
inParams["Path"] = path;
inParams["Type"] = 0x0; // Disk Drive
inParams["Access"] = permissions;
ManagementBaseObject outParams = managementClass.InvokeMethod(METHOD_NAME, inParams, null);
return (CreateUncShareResult)(outParams.Properties["ReturnValue"].Value);
}
public enum CreateUncShareResult: uint {
Success = 0,
[Description("Access Denied")]
AccessDenied = 2,
[Description("Unknown failure")]
UnknownFailure = 8,
[Description("Invalid Name")]
InvalidName = 9,
[Description("Invalid Level")]
InvalidLevel = 10,
[Description("Invalid Parameter")]
InvalidParameter = 21,
[Description("Duplicate Share")]
DuplicateShare = 22,
[Description("Redirected Path")]
RedirectedPath = 23,
[Description("Unknown Device or Directory")]
UnknownDeviceOrDirectory = 24,
[Description("Net Name Not Found")]
NetNameNotFound = 25,
}
它一直运行良好。最近,我们得到了 Windows 10 的新开发机器。上面的代码现在失败了,返回值 2:拒绝访问。
我们一直在四处寻找发生这种情况的原因。运行此代码的用户具有本地管理员权限。
Windows 7 和 Windows 10 之间有什么不同会导致这种情况吗?是否需要在 Windows 10 中授予某些在 Windows 7 中不需要的特殊权限?
编辑:我们在 Asp.Net MVC 5 网络应用程序中执行此操作,而不是在桌面应用程序或 Windows 服务中执行此操作。我们确实有一个运行此代码的自动化测试,并且出现了相同的结果。调用此代码的代码会提升(模拟)计算机上的本地管理员用户。
事实证明,我们的首席系统工程师对此有答案。这是UAC的问题。但是,如上所述,由于这是一个 Web 应用程序,因此该解决方案不涉及使用应用程序清单提升权限。我需要编辑组策略。
使用 gpedit:
计算机配置 -> Windows 设置 -> 安全设置 -> 本地策略 -> 安全选项
需要禁用 "User Account Control: Run all administrators in Admin Approval Mode" 的设置。
我们使用以下代码在 Windows 7 中创建共享:
public static CreateUncShareResult Create(string path, string shareName, string description, AccessControlList permissions) {
ManagementClass managementClass = new ManagementClass(WIN32_Share);
const string METHOD_NAME = "Create";
ManagementBaseObject inParams = managementClass.GetMethodParameters(METHOD_NAME);
inParams["Description"] = description;
inParams["Name"] = shareName;
inParams["Path"] = path;
inParams["Type"] = 0x0; // Disk Drive
inParams["Access"] = permissions;
ManagementBaseObject outParams = managementClass.InvokeMethod(METHOD_NAME, inParams, null);
return (CreateUncShareResult)(outParams.Properties["ReturnValue"].Value);
}
public enum CreateUncShareResult: uint {
Success = 0,
[Description("Access Denied")]
AccessDenied = 2,
[Description("Unknown failure")]
UnknownFailure = 8,
[Description("Invalid Name")]
InvalidName = 9,
[Description("Invalid Level")]
InvalidLevel = 10,
[Description("Invalid Parameter")]
InvalidParameter = 21,
[Description("Duplicate Share")]
DuplicateShare = 22,
[Description("Redirected Path")]
RedirectedPath = 23,
[Description("Unknown Device or Directory")]
UnknownDeviceOrDirectory = 24,
[Description("Net Name Not Found")]
NetNameNotFound = 25,
}
它一直运行良好。最近,我们得到了 Windows 10 的新开发机器。上面的代码现在失败了,返回值 2:拒绝访问。
我们一直在四处寻找发生这种情况的原因。运行此代码的用户具有本地管理员权限。
Windows 7 和 Windows 10 之间有什么不同会导致这种情况吗?是否需要在 Windows 10 中授予某些在 Windows 7 中不需要的特殊权限?
编辑:我们在 Asp.Net MVC 5 网络应用程序中执行此操作,而不是在桌面应用程序或 Windows 服务中执行此操作。我们确实有一个运行此代码的自动化测试,并且出现了相同的结果。调用此代码的代码会提升(模拟)计算机上的本地管理员用户。
事实证明,我们的首席系统工程师对此有答案。这是UAC的问题。但是,如上所述,由于这是一个 Web 应用程序,因此该解决方案不涉及使用应用程序清单提升权限。我需要编辑组策略。
使用 gpedit:
计算机配置 -> Windows 设置 -> 安全设置 -> 本地策略 -> 安全选项
需要禁用 "User Account Control: Run all administrators in Admin Approval Mode" 的设置。