Hi devs:
My FSF application defers file reads to a server user mode application,
which reads data, decrypts it, and passes it back to my driver which in turn
passes it to the application that issued the file read request.
The problem is that, as I already expected, this scheme doesn´t work with
memory mapped files.
When an application creates a memory mapping and reads from the mapped
memory area, a page fault occurs which is caught by the memory manager. If
the requested page is not already in memory, it issues a read IRP with
IRP_PAGING_IO flag set, that arrives to my dispatch routine.
Then, I suspend the requesting thread and queue a read request for the
server process. But when the server process gets the request and tries to
fulfill it with a simple read operation, the call never returns (note that
this read also comes to my driver but it recognizes it´s coming from the
server process and lets it pass through).
The system seems to be deadlocked at that point, but only for that file,
since I can still continue performing file operations on other files on the
same drive.
So I guess that someone (the memory manager ?, the I/O manager ?) acquires
some mutex before accessing the memory mapped file, and when my server
process tries to access the same file, it deadlocks.
I knew I was going to find this problem more or less. My questions are:
1- Can anyone develop on what´s exactly happening (what´s exactly the
deadlock) ?. (just curious)
2- Does anybody know a way around this ?.
-IGP-
You are currently subscribed to ntfsd as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntfsd-$subst(‘Recip.MemberIDChar’)@lists.osr.com