Are you writing a port driver that sits underneath the disk, tape, or CD-ROM class driver? If so, want to drop me a line and tell me why you didn't write your driver as a SCSI or IDE miniport driver? I'm collecting a list of reasons for some friends in Redmond.
Also, if you have taken on this task, be sure you read the code in the disk class driver that shows how one large request (exceeding the maximum buffer size for the underlying disk device) is broken-up into a series of smaller requests. Note how the MDL is reused for each subsequent request.
We've seen a bunch of folks burned by this logic. Which on one hand is understandable, because it's unexpected, but on the other hand it's also inexcusable, because the complete source code for the disk class driver appears in the DDK, Caveat, driver writers.
And please do drop me a line if you're writing a port driver, OK? I'd appreciate it.