According to this link, NetBIOS is no longer supported starting from Windwos Vista. Sure enough, I can no longer see any NetBIOS name from the network properties.
However, when I am writing codes on my Windows 7, I still encounter NetBIOS names in many places. For example
- I can still use "MYDOMAIN\Harvey" to logon my machine, where I believe MYDOMAIN is a NetBIOS name.
- The environment variables COMPUTERNAME and USERDOMAIN are still NetBIOS names. I am expecting to see a DNS names here
- My SQL Server instance names coming up from my SQL Server Management Studio is still something like MYMACHINE\Instance1.
I am guessing Microsoft still maintains some pieces of it for backward compatibility. I want to understand how Windows 7 going to resolve the NetBIOS name to an IP address. I found this article explaining how the NetBIOS name resolution works but I am afraid this is no longer true in Windows 7. At least there is no WINS server for me.
My last question is how do I do the NetBIOS name resolution programmatically, preferrably in C#. I am okay to use PInvoke.
UDAPTE
Tridus was right. I can use System.Net.Dns.GetHostAddresses("hostname") to resolve NetBIOS name. I used reflector to see what's happening under the hood. It is calling gethostbyname() from ws2_32.dll
Here, it explains the gethostbyname() will do NetBIOS name resolution.
- Check the local host name for a matching name.
- Check the Hosts file for a matching name entry.
- If a DNS server is configured, query it.
- If no match is found, attempt NetBIOS name-resolution.
About the mystery of NetBIOS not supported in this link, I think it just means the API is not supported. People in ServerFault think that NetBIOS is still supported in Windows 7.