测试是否在域控制器上运行

以下代码使用 VerifyVersionInfo 函数来确定调用进程是否在 Windows 2000 Server 域控制器上运行。 在 LocalSystem 帐户下安装服务之前,服务安装程序可以使用此测试。 如果测试指示正在域控制器上运行,则安装服务以在用户帐户下运行,或显示一个对话框警告域控制器上作为 LocalSystem 运行的危险(即服务随后将不受限制地访问 Active Directory 域服务,这是一个极强大的安全上下文,有可能损害整个网络)。

BOOL Is_Win2000_DomainController () 
{
   OSVERSIONINFOEX osvi;
   DWORDLONG dwlConditionMask = 0;
 
   // Initialize the OSVERSIONINFOEX structure.
   ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
   osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
   osvi.dwMajorVersion = 5;
   osvi.wProductType = VER_NT_DOMAIN_CONTROLLER;
 
   // Initialize the condition mask.
   VER_SET_CONDITION( dwlConditionMask, VER_MAJORVERSION, 
      VER_GREATER_EQUAL );
   VER_SET_CONDITION( dwlConditionMask, VER_PRODUCT_TYPE, 
      VER_EQUAL );
 
   // Perform the test.
   return VerifyVersionInfo(
      &osvi, 
      VER_MAJORVERSION | VER_PRODUCT_TYPE,
      dwlConditionMask);
}