Many NT drivers use only the memory allocated for their device objects’ device extensions as their global storage areas and their I/O stack locations in IRPs as operation-specific local storage areas. However, an NT driver can allocate additional system-space memory for its needs and can use the kernel stack to pass small amounts of data in calls to internal driver routines.