You've come to this page because you've asked a question similar to the following:
I have an ISA device that needs to have its base memory address software configured. However, I need to ensure that the address I configure isn't used by another device. This device is not plug-and-play and can't be hardware configured for its base memory address.
This is the Frequently Given Answer to that question.
If you are targetting Windows NT version 4, then
IoReportResourceUsage() is the correct mechanism to use.
If, however, you are targetting Windows NT version 5.0 or later, then the correct mechanism is, surprisingly, to write a Plug and Play device driver. It doesn't matter that your ISA device isn't an ISA P&P device. You still write a P&P device driver to drive it.
The key lies in your INF file. The list of resource requirements that, in the case of a device on a "software enumerable" bus such as a PCI or ISA P&P device, would be obtained from the device's configuration space can, for a non-P&P ISA device, be specified in the INF file.
What you do is specify in the
DDInstall section for your ISA
LogConfig directive pointing to a section that
defines the resource requirements for the device with a group of
suchlike directives. (For convenience you would also add a
FactDef section, which will help the Add Hardware Wizard to
skip one of the more tedious parts of the installation procedure.) The
IRQConfig directives specify ranges
containing a single value, which are whatever IRQ/Ports your device is
hardwired to. The
MemConfig specifies the allowable ranges
of memory that your device can be programmed to occupy.
The Add Hardware Wizard will take this information from the INF file and insert it into the Registry. The P&P Manager will then use this information as the device's resource requirements, just as if it had read them from a configuration space. It will arbitrate the resources amongst the devices on the system using the requested ranges, and eventually end up passing your P&P driver a "start device" IORP. Attached to this IORP will be the memory range that the P&P Manager has arbitrated for your device. All that your driver needs to do is at that point to program the allocated memory range into your device.
Apart from that, your driver should treat your device exactly as if it were a P&P device. In particular, unlike in Windows NT 4 model, there is no need to go probing for the existence of your ISA device in various "known" places and manually requesting the resources that you need. The user, the Device Manager, the Add Hardware Wizard, and the P&P Manager in concert will handle all of that for you. As far as your driver is concerned, your device is a P&P device. Your driver will be told when and if the device exists, and where (in terms of resource allocations) it can physically find it.
In fact, as far as most of the system is concerned, your device is a P&P device. It is just a P&P device that is very fussy about its resource requirements, that has a rather odd configuration space access mechanism, and that cannot be enabled or disabled without rebooting.