Home
+
Products
+
Services
+
Support
 
References
 
Downloads
 
Contact Us
 
Company Profile

Introduction

apcupsd 3.14.10 is an excellent control software used in conjunction with the uninterruptible power supplies from American Power Conversion (APC), now available from Schneider Electric.

Problem

The binary distribution of apcupsd is supposed to run on Windows NT4, albeit without USB capability.

However, apcupsd can only be installed on NT4. After installation, apcupsd fails to appear as a service. Attempts to run it manually causes it to terminate immediately with unable to find SetupDiEnumDeviceInterface in setupapi.dll.

The API SetupDiEnumDeviceInterface first appeared only in Windows 2000. Understandably, apcupsd cannot run in NT4 out of the box.

Solution

The API SetupDiEnumDeviceInterface is associated with USB support. Since we do not have USB support on Windows NT4 in the first place, the solution is to comment out the call to SetupDiEnumDeviceInterface, and recompile.

Comment out lines 163 and 164 in src/win32/libusb-winusb-bridge.c, which is as follows, in red:

int usb_find_devices(void)
{
   // Get the set of device interfaces that have been matched by our INF
   HDEVINFO deviceInfo = SetupDiGetClassDevs(
      &APCUPSD_DEVICE_GUID, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
   if (!deviceInfo)
   {
      return 0;
   }

   // Iterate over all interfaces
   int ndevs = 0;
   int devidx = 0;
   while (ndevs < MAX_USB_DEVICES)
   {
      // Get interface data for next interface and attempt to init it
      SP_DEVICE_INTERFACE_DATA interfaceData;
      interfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
      /*
      if (!SetupDiEnumDeviceInterfaces(
            deviceInfo, NULL, &APCUPSD_DEVICE_GUID, devidx++, &interfaceData))
      */
      {
         break;
      }

      // Determine required size for interface detail data

Make the installable target winapcupsd.

Notes

The apctray.exe program will not run on Windows NT4. It fails with The procedure entry point GetWindowInfo could not be located in the dynamic link library USER32.dll. This is due to the API introduced for the first time only in Windows 2000.

However, apctray.exe is not critical to apcupsd operation.

Last updated on 28 Mar 2013