为什么System.Environment.MachineName值大写?

时间:2010-12-18 13:41:05

标签: .net windows security .net-4.0 principalpermission

我的机器名称是小写的(我在“高级系统设置”对话框的“计算机名称”选项卡中看到),但System.Environment.MachineName报告它是大写的。这是为什么?这对我来说是一个真正的问题,因为我的测试PrincipalPermissionAttribute对角色名称执行区分大小写的比较(我将自定义角色映射到Windows组,而我的环境是非域名)。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

使用Dns.GetHostName代替,应该使用正确的大小写(至少在我的计算机上返回)。

答案 1 :(得分:3)

.NET 4.7.1的Environment.MachineName源代码位于:https://referencesource.microsoft.com/#mscorlib/system/environment.cs,be0b5c103d248dce

它可以调用GetComputerName,如下所示:https://referencesource.microsoft.com/#mscorlib/microsoft/win32/win32native.cs,0c7d7f4f83d4ddd0

以下是GetComputerName函数:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724295(v=vs.85).aspx,其中声明:

  

GetComputerName仅检索本地计算机的NetBIOS名称。   检索DNS主机名,DNS域名或完全限定名   DNS名称,调用GetComputerNameEx函数。

计算机名称的MSDN https://msdn.microsoft.com/en-us/library/ms724220(VS.85).aspx声明:

  

NetBIOS名称由最多15个字节的OEM字符组成,包括   字母,数字,连字符和句号。有些字符是特定的   字符集。 NetBIOS名称通常在OEM中表示   字符集。 OEM字符集取决于区域设置。一些OEM   字符集将某些字符表示为两个字节。的的NetBIOS   按照惯例,名称用大写字母表示   从小写到大写的翻译算法是OEM字符集   依赖

因此,NetBIOS名称按惯例为大写,System.Environment.MachineName返回系统的NetBIOS名称。

答案 2 :(得分:1)

根据这篇MSDN文章,它的案例不敏感 http://msdn.microsoft.com/en-us/library/ms724220(VS.85).aspx

在哪种情况下,它会进行区分大小写的比较?