Rolf Kalbermatter wrote: > Saulius Krasuckas [EMAIL PROTECTED] wrote: > >> Today I have tried to compile ntoskrnl.exe, then checked out master >> branch, compiled stock Wine, then tried to run win32 app which do simple >> port I/O after it loads (GIVE)IO.SYS driver. Driver simply loaded, did >> its initialization and immediatelly exited. > > The IO sys driver I have worked with and made myself in the past > > http://opengtoolkit.cvs.sourceforge.net/opengtoolkit/portIO/c_source/ > > (The whole opengtoolkit project is really related to a software called LabVIEW > and this was a driver to give direct IO access to it, but the portio kernel > driver and its user space DLL can be used from any application that can call > DLLs). > > did use a number of specific kernel functions such as > > NTKERNELAPI void Ke386SetIoAccessMap(int, IOPM *); > NTKERNELAPI void Ke386QueryIoAccessMap(int, IOPM *); > NTKERNELAPI void Ke386IoSetAccessProcess(PEPROCESS, int); > NTKERNELAPI NTSTATUS PsLookupProcessByProcessId(IN ULONG ulProcId, OUT > PEPROCESS * pEProcess); > > which all were and maybe still are considered undocumented. These are for > manipulating the IO permission map so that applications can directly use the > inp and outp opcode in application space for enabled IO adresses. > > Alternatively it can access IO ports through a kernel driver call using a > combination > of: > > HalTranslateBusAddress > MmMapIoSpace > > So all these functions together with several more for standard kernel driver > interaction with the system need to be exported by the subsystem that loads > them (eg. ntoskrnl.exe or its helpers like hal.dll etc). > > I'm not positive these can all be easily added to a process operating in user > space > without some specific kernel support for this functionality and in fact > allowing > full IO access to a user space application such as Wine just doesn't seem safe > to me. > > Especially the first method while being a bit faster for standard IO access is > probably a real trouble to implement. I have not found a way to manipulate the > Linux IO permission map without a specific kernel extension and don't think > such > an extension would ever make it in the mainstream kernel. > > Rolf Kalbermatter >
Why do we need to give an application direct access to IO space?
