I'll just like to add a few comments;
(I had a simlar problem in Windows XP Professional - but it should be the
same in Embedded)
Please make a post in development.device.drivers or in ntdev at
osronline.com,
they know about the issues regarding the memory-bridge (memory-window) in
the LPC/ISA-to-PCI-bridge.
1. The "PortIn" in IO.DLL should be OK,
even though that the IO-address is not really "claimed" by the right device
driver.
(It does not conform to WHQL to claim a port range that does not belong to
"you")
The right way is to define both the IO-range and the MEM-range in the
ACPI-table of the BIOS.
Then, the PnP manager in Windows XP will load the correct driver and assign
it the correct port- and memory-ranges.
2. GetMem1 is wrong.
GetMem will only get the virtual memory of the current process.
It will not get the physical ISA / LPC memory.
You will have to map the physical memory to a valid kernel address inside
the "real" Windows XP kernel (not kernel32.dll!).
And then perform a memory copy between the user-mode buffer and the kernel
address.
I think that you might have to open a "memory window" in the PCI-bridge
controller
between the ISA / LPC to the PCI-memory bus.
It's a bit complicated.
Make a post in the other (two) newsgroups, if you need a more detailed
answer.
.... but a few notes here anyway;
-----------------------------------------------------------------------------------
A shortcut (if you do not want to encode a ACPI-table in the BIOS)
is to use the the "LogConfig" directive of the device driver INF-file.
The PnP-manager will handle the IO-ranges and the memory-bridges by itself,
you will only have to declare your LogConfig-section and
write (find) a proper device-driver (using KMDF, of course! - see
www.microsoft.com/whdc)
that will handle the routing between your user mode code and the mapped
addresses.