我目前正在使用Windows內核驅動程序玩弄用戶空間的緩衝區。作爲一個玩具項目,我編寫了一個內核驅動程序,其作用是分配可在進程之間共享的內存。共享不是「4GO - PAGE_SIZE」更多的是爲了更好地瞭解Windows內部從內核空間與在Windows內核驅動
應用程序可以要求驅動程序創建任意大小的內存緩衝區。然後,驅動程序創建內核空間這個緩衝器與MmAllocatePagesForMdl,然後映射在用戶模式下此緩衝液MmMapLockedPagesSpecifyCache。生成的指針返回給可以直接在其中寫入的應用程序,就像在普通緩衝區中一樣。然後另一個應用程序可以要求驅動程序訪問該內存以讀取它(甚至可以寫入);驅動程序只需在新進程的上下文中已經存在的緩衝區上調用MmMapLockedPagesSpecifyCache。到目前爲止,一切都很好。
這個小更迭之後,我想創造在內核空間更大的緩衝區,我碰了壁。 MDL只能管理「4Go - PAGE_SIZE」。
我的第一個想法是使用MmAllocatePagesForMdl直到我滿足規模要求,使用下一頁指針鏈MDL創建幾個MDL,然後將指針返回到使用MmMapLockedPagesSpecifyCache用戶空間。但MmMapLockedPagesSpecifyCache不適用於鏈接的MDL,它只在用戶空間映射第一個MDL。
到現在爲止,我還沒有找到一種方法來比的連續虛擬內存4GO在用戶空間返回更多的從內核空間。內核空間中的分配不是問題,因爲我使用分頁內存,因此物理內存不必是連續的,但我無法找到如何映射連續虛擬內存中用於用戶空間的內存。
所以我要貪心,這是不可能的?或者我錯過了一些事情來做到這一點?
有關信息,這是一個64位的唯一的司機位和64個應用程序,因此在這裏沒有32位的限制。