Hi,
Recently I found that occasionally my file system filter driver dispatch
routine, the one that is attached to file system dispatch routine, is called
at IRQL equal to APC_LEVEL. I don’t rise IRQL, use fast mutex or spin locks
to lock driver dispatch routine.
In this dispatch routine, I call some kernel system routines like
PsGetCurrentProcess() or RtlUnicodeStringToAnsiString(…). I have checked
the latest MSDN distributed “Windows 2000 DDK” documentation, where it is
explicitly written that this two routines must(!) be called at IRQL
PASSIVE_LEVEL.
My questions are:
- How exact this information in DDK help file is, since the PAGED_CODE()
macro from DDK asserts if IRQL<dispatch_level another confusing item here>is that for example the “IFS Kit Documentation” specifies
IRQL<dispatch_level for its description of rtlunicodestringtoansisize>while the “Windows 2000 DDK” documentation for the same function(!)
specifies IRQL PASSIVE_LEVEL.
2. What are the consequences if such (must PASSIVE_LEVEL) system functions
are called at IRQL APC_LEVEL? My understanding is that in that case the APC
calls delivery will be masked and this can be the problem if
RtlUnicodeStringToAnsiString(…) or other must PASSIVE_LEVEL functions,
will register an APC and wait for their completion. Right?
Thanks for any information that will help me to understand better “How it
works”.
WBR Primoz
p.s: I posted this question to the NTFSD mailing list, but got no responses.
It can be that I’m asking stupid questions, but I’m new to driver
development.
—
You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com</dispatch_level></dispatch_level>