This is only a half-way programming question. First of all I have a PCI-Express card and 32/64 bit drivers. The target operating system has to be a Windows 64 bit system. I read that under Vista64 all drivers have to be certified 64 bit drivers. Is this a general restriction under 64 bit operating systems and does this also apply to ‘XP 64’ or any Linux system?
So for simplicity let’s say I use a 64 bit driver for my PCIe card under Vista64 and have a bunch of 64 bit DLLs to use the cards functionality. On the other side there’s a large, legacy 32 bit exe program which needs to use the PCIe device. Converting the program to 64 bit would be a really huge effort.
So what can be done to bring that 32 bit program and the 64 bit driver together? I read that mixing 32/64 bit binaries and DLLs is not possible at all but this is hard to believe for me. I’m sure you can print out a document under Vista64 from within a 32 bit app and Windows will somehow wrap this around to a 64 bit printer driver.
64-bit certification is only required under Vista; there is no certifying authority for non-Windows platforms, and I don’t believe that XP or Windows Server checks for certification (not sure though, and it may depend on which service pack you’re on).
If you’re using the driver via the Windows API, then there shouldn’t be any problem; Windows will do the 32<->64-bit translations in the kernel. If you’re trying to load the driver inside your own process, that probably won’t be possible. As Dirk says you’ll have to run it inside its own process and communicate through a COM server. I’m not sure what hoops you’ll have to jump through if you have to run your driver in a higher-privilege execution level and want to make calls to it from user mode.
Hopefully your 64-bit DLLs offer a 32-bit API, or Windows offers a standard driver interface (if it’s a common I/O device like a display or network card).