by: Helge, published: Jul 1, 2011, updated: Sep 6, 2011, in

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
}
Previous Article PowerShell Script Switches Printer Configurations Between Sites
Next Article Script Deletes Orphaned Printer Ports