ADSI 和用户帐户控制
Windows 和 Windows Server 具有用户帐户控制,该控制会对使用 Active Directory 服务接口 (ADSI) 的应用程序产生影响。 具体而言,这些接口旨在由在本地计算机上具有管理员权限的用户帐户运行。
问题
每当应用程序连接到目录并尝试创建 ADSI 对象时,都会检查 Active Directory 架构是否有更改。 如果自上次连接以来有更改,将下载架构并将其存储在本地计算机上的缓存中。 在 Windows Vista 之前的 Windows 版本中,此缓存的默认位置为
%systemroot%\SchCache\
但是,由标准(即非管理员)帐户运行的应用程序将无法访问此目录,因此使用在此模式下运行的 ADSI 接口的应用程序将在每个连接上下载架构,这将影响吞吐量和性能。
解决方案
单用户 - 若要解决此问题,有新的 ADSI 提供程序注册表控制项可用于确定缓存 Active Directory 架构对象的注册表位置和文件位置。 如果注册表项
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\adsi\Cache\PerMachine
设置为 0(零),每个用户将为 ADSI 使用不同的存储位置;注册表项将存储在
HKEY_CURRENT_USER\Software\Microsoft\ADs\Providers\LDAP\
并且缓存文件将存储在
%LOCALAPPDATA%\Microsoft\Windows\SchCache
这些设置是运行 Windows Server 2008 或 Windows Vista 的计算机上的默认设置。
多用户 - 如果在具有多个用户帐户的计算机(例如 Web 服务器)上运行 ADSI 应用程序,则最好不要使用大量磁盘空间来拥有 Active Directory 架构缓存的许多副本。 设置注册表项
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\adsi\Cache\PerMachine
到 1(一)会将 ADSI 还原到以前的行为;所有 Active Directory 架构对象都将存储在其以前的位置;注册表项将位于
HKEY_LOCAL_MACHINE\Software\Microsoft\ADs\Providers\LDAP
并且缓存文件将位于
%systemroot%\SchCache
在这种情况下,管理员帐户应运行应用程序,这将导致在全局位置缓存架构文件,供特权较低的用户将来使用。