They call library functions in the DLL, which in turn handle all communications with DNS servers (over UDP or TCP) and return the final results of the lookup back to the applications.
If there is one, and if such a connection can be made, they hand the actual work of dealing with the lookup over to the DNS Client service.
The exact algorithm varies according to the version, and service pack level, of the operating system; but in general all communication is with a preferred DNS server until it fails to answer, whereupon communication switches to one of several alternative DNS servers.
There are several minor differences in system behavior depending on whether the DNS Client service is started: Linux distributions and various versions of Unix have a generalized name resolver layer.
Servers running Microsoft Windows also attempt to register other information, in addition to their names and IP addresses, such as the locations of the LDAP and Kerberos services that they provide.
DNS notification implements a push mechanism for notifying a select set of secondary servers for a zone when it is updated.
It became notorious for incompatibility with BIND configuration files, in particular by lacking support for DNS wildcards and differing in its IPv6 implementation.
(Contrast this with BIND, where when such changes are made, the list of zones, in the /etc/named.conf file, has to be explicitly updated on each individual server.)