StorPortAllocatePool API query

Hi,
I am working on a non-virtual storport miniport driver, which operates in full-duplex mode and need to dynamically allocate memory for my driver data structures, specifically from my DPC routine.
MSDN indicates that StorPortAllocatePool can be invoked at <= DISPATCH_LEVEL which makes it suitable to be used from a DPC. However, MSDN also states the following in the section for HwStartIo (http://msdn.microsoft.com/en-us/library/windows/hardware/ff557423(v=vs.85).aspx):

"For storage non-virtual miniport drivers, depending on the value of SynchronizationModel set in PORT_CONFIGURATION_INFORMATION, Storport always calls HwStorStartIo the same IRQL and uses an internal spin lock to ensure that I/O requests are initiated sequentially. The IRQL is either DISPATCH_LEVEL (full-duplex mode) or DIRQL (half-duplex mode).

In this case, the HwStorStartIo routine does not have to acquire its own spin lock. Also, memory allocation using StorPortAllocatePool and mutual exclusion via StorPortAcquireSpinLock are not allowed in the HwStorStartIo routine of a storage non-virtual miniport driver."

My questions are:

a. Should the StorPortAllocatePool not be invoked in HwStorStartIo because of the StartIo lock being held? If yes, is there any reason for this, as even with StartIo lock held, the IRQL is still DISPATCH_LEVEL?
b. Does the same restriction apply to my DPC routine as well if I sycnhronize my DPC with the HwStortStartIo routine by acquiring the StartIo lock?
c. If answer to ‘b’ is yes, what is the alternative to allocate memory dynamically? My requirement is to allocate memory upon the occurrence of an event in the hardware (notified by an interrupt). Unfortunately, there is no worker thread support available to the miniport to delegate this task (at least not on Windows 2008 R2).

Also, I observe that on a Windows 2008 R2 server, StorPortAllocatePool is successful when invoked from both StartIo and DPC routine with StartIo lock held. Even though this works for me, I just want to ensure that my driver is not deviating from the documentation.

Thanks,
Girish.

Allocate in HwBuildIo

Thanks Alex. However, my requirement is to have this memory allocated upon a particular event from the hardware and is not related to the I/O requests as such.