The RootDSE does not require credentials to check the value of 'defaultNamingContext'. It is intentionally used for anonymous access to read and bootstrap the process. So, just because you can use the 'defaultNamingContext' does not mean you can read the directory otherwise.
Now, since you are using a Windows Forms application, this means that it will run under the security context of the current user. If you are logged into the workstation (CTRL-ALT-DEL) as a domain user or the administrator in the domain, you would have sufficient credentials.
This means that Joe is likely right that you have a mistake in the LDAP:// path you are using. If you take a look at:
[String].Format("LDAP://OU=CS Users,OU=CS,OU=HO,{0}", defaultNamingContext)
This path is likely incorrect. You can check this using ldp.exe or the ADUC MMC. To workaround this for now, simply use the 'defaultNamingContext' and do not add to it. It will be a wider scoped search, but should be fine if you have a decent query filter (with index).
Ryan Dunn
Extemporaneous MumblingsThe .NET Developer's Guide to Directory Services Programming