检查两个NTAccount对象的相等性

检查两个NTAccount对象的相等性,第1张

概述检查两个NTAccount对象的相等性

我正在尝试检查一个服务是否具有对特定本地目录的访问权限:

public static bool HasDirectoryPermissions(String path,fileSystemRights rights,String servicename) { try { var directoryAccessControl = Directory.GetAccessControl(path); ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * FROM Win32_Service where name='" + servicename + "'"); var queryResults = (from ManagementObject x in query.Get() select x); if (queryResults.Count() > 0) { var serviceUser = (string)queryResults.FirstOrDefault().PropertIEs["Startname"].Value; var serviceUserAccount = new NTAccount(serviceUser); var rules = directoryAccessControl.GetAccessRules(true,true,typeof(NTAccount)); foreach (var rule in rules) { if (rule.GetType() == typeof(fileSystemAccessRule)) { var accessRule = (fileSystemAccessRule)rule; if (accessRule.IDentityReference == serviceUserAccount && (accessRule.fileSystemRights & rights) == rights && accessRule.AccessControlType == AccessControlType.Allow) { Console.Writeline("The {0} service has permissions to {1}.",servicename,path); return true; } } } Console.Writeline("The {0} service does not have directory permissions for {1}.",path); return false; } else { Console.Writeline("Could not get directory permissions for {0} because the {1} service is not installed.",path,servicename); return false; } } catch (Exception exception) { Console.Writeline("Directory permissions Could not be obtained for the {0} service against {1}. {2}",exception.ToString()); return false; } }

但是,问题是accessRule.IDentityReference == serviceUserAccount永远不是真的,因为一方面,我有一个NTAccounttypes的IDentityReference,他的名字是NT AUTHORITYNETWORK SERVICE ,而我计算的serviceUserAccount对象是NT AUTHORITYNetworkService 。 虽然这两个是相同的帐户,但是由于这些string不完全匹配,所以平等testing失败。 如何正确地testing两个NTAccount对象是否相同,尽pipe它们的语法稍有不同?

Wpf绝对与相对包装URI

从PathToolongException中检索path信息

为什么在windows7(.net 3.5)中运行的应用程序在Win8(.net4.5)中不起作用

我怎样才能得到在C#中共同的桌面和开始菜单目录的path?

MMC证书在哪里pipe理“服务帐户”的导入证书?

我刚刚尝试过的一个解决方案是将每个帐户转换为各自的SecurityIDentifIEr,然后进行比较:

accessRule.IDentityReference.Translate(typeof(SecurityIDentifIEr)) == serviceUserAccount.Translate(typeof(SecurityIDentifIEr))

PS:并不是所有的IDentityReference对象都可以转换成SID,所以一定要把它包装在try-catch块中。

总结

以上是内存溢出为你收集整理的检查两个NTAccount对象的相等性全部内容,希望文章能够帮你解决检查两个NTAccount对象的相等性所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1277439.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存