In the AllocateAddressRange structure, within a 1394 IRB, a submitter can
request addresses in the computer’s 1394 address space. On input, the MDL,
fulNotificationFlags, FifoSListHead, and FifoSpinLock fields help to
determine how the address range is allocated, who handles the data transfer,
and when notifications occur.

My question stems from watching some of the REQUEST_ALLOCATE_ADDRESS_RANGE
IRBs being sent from SBP2PORT.SYS. Here are some of the fields I see on

Mdl 0x00000000
nLength 0x1000
Callback 0x00000000
Context 0x00000000
FifoSListHead 0x00000000
FifoSpinLock 0x00000000

The DDK does not describe this as one of its supported input values. The
closest you can get is the “Case 4” described in the DDK that states that
when Mdl=NULL and FifoSListHead=NULL and FifoSpinLock=NULL you get:

“Client handles the request packet. Instead of using the callback routine to
send a notification, the bus driver uses the callback routine to pass the
request packet to the client driver. In this case, the client driver must
also send its own response packet”

However, in this example, the callback address is NULL so this case is not

In tracing through this, upon return from the bus driver, the Mdl pointer is
initialized and set. My assumption is that this is an undocumented feature
to let the bus driver manage allocating the buffer. I would also assume
that when the REQUEST_FREE_ADDRESS_RANGE request is sent, the bus driver
would free the buffer and Mdl. Both the client driver and bus driver share
this buffer, but the bus driver is ultimately responsible for it.

Is there any official documentation on this feature? Thanks.


Express yourself instantly with MSN Messenger! Download today - it’s FREE!