DsGetDcName Timeout
Today I was looking for the source of frequent delays when setting permissions from my new application SetACL Studio. I sprinkled the code with timestamped debug statements like these…
System.Diagnostics.Debug.WriteLine(DateTime.Now + " - 1");
// Do something
System.Diagnostics.Debug.WriteLine(DateTime.Now + " - 2");
…and found that the delays always had a duration of seven seconds. Wait – “inexplicable” delays of constant length – that smells of timeouts!
And indeed, by stepping into the underlying unmanaged code it was pretty easy to identify the call causing the timeouts:
if (DsGetDcName (NULL, sDomainName, NULL, NULL, 0, &pdcInfo) == ERROR_SUCCESS)
This happened if sDomainName was equal to the local computer name, i.e. when looking for a (nonexistent) domain with the name of my computer.
I fixed that line by adding a check if sDomainName is different from the local computer name:
CString sComputername;
sComputername.GetEnvironmentVariable(L"computername");
if (sComputername.CompareNoCase(sDomainName) != 0)
{
// Call DsGetDcName here
}