Article ID: 199311 - View products that this article applies to.
This article was previously published under Q199311
This article has been archived. It is offered "as is" and will no longer be updated.
In the Windows NT 4.0 Service Pack 3 and earlier versions, MmMapLockedPages returns the base virtual address (a page-aligned address) that maps the locked pages for the range described by the MDL. However, this has been changed in Service Pack 4 and later versions to return the actual virtual address including the byte offset within a page of the buffer described by the MDL.
In Windows NT 4.0 Service Pack 3 and earlier versions, if the buffer described by the MDL is not page-aligned then you have to add the offset stored in the MDL with the base virtual address returned by the function to get the actual address as shown here:
In Service Pack 4 and later versions, this function has been altered to consider the byte offset stored in the MDL and returns the actual virtual address as shown here:
To fix the above mentioned inconsistencies and make the code portable across all versions of Windows NT, use the following:
Microsoft has confirmed the pre-Service Pack 4 behavior of this function to be a bug and has fixed it in order to resolve memory addressing issues on future releases of Windows NT; Windows NT 64-bit in particular.
Article ID: 199311 - Last Review: January 10, 2015 - Revision: 2.2