We are using the Port and Memory Utilities for Windows (http://sine.ni.com/apps/we/niepd_web_display.display_epd4?p_guid=B45EACE3DEBD56A4E034080020E74861) to get data from a legacy/custom piece of hardware that is memory mapped on the ISA bus at 0xE0000. Specifically, we are using ReadMemory16.vi from AccessHW.zip to read 2 bytes data samples in a LabVIEW 7.1 application under Windows XP.
On a clean, dual boot (Windows 2000 and XP) system, the ReadMemory16.vi is about 5.5 times faster when called under Windows 2000 than under Windows XP. (100000 calls = 2.3 sec vs. 12.9 sec) I see 2 possible reasons for this: the CVI code under the hood in AccessHW is not optimized for XP, or XP is not optimized for memory-mapped devices on the ISA bus.
Have you tried using the native In Port and Out Port functions that come with 7.1. As I understand it, you would only need the AccessHW if you wanted to do 32 bit access. I don't know if they'll run any faster under XP than 2K since I's still using 2K but it would be worth trying.
indeed, we are using the native LabVIEW 7.1 Outport.vi to control a 3rd party PIO card. Unfortunately, the traditional memory-mapping space for ISA devices was 0xD0000-0xEFFFF which cannot be accessed using 16 bit addressing. That's why I am using ReadMemory16 to do the 32 bit access.
Since most legacy ISA buses are an expansion of the PCI bus, I'm wondering if XP handles the crazy memory mapping differently. In essence, if no PCI card responds to a given address, then the PCI bus expansion gets it, the so-called "if no one claims it, it must be yours" logic.