在主机上(UEFI 传统模式):
lkd> !pfn 0xf0
PFN 000000F0 at address FFFFFA8000002D00
flink FFFFFFFFFFFFFFFF blink / share count FFFFFFFFFFFFFFFF pteaddress FFFFFFFFFFFFFFFF
reference count FFFF used entry count FFFF NotMapped color 3F Priority 7
restore pte FFFFFFFFFFFFFFFF containing page FFFFFFFFFFFFF Trans MPRWEXY
Modified Shared ReadInProgress WriteInProgress InPageError ParityError RemovalRequested
在 VM(传统 BIOS)上:
kd> !pfn 0xf0
PFN 000000F0 at address FFFFFA8000002D00
flink 00000000 blink / share count 00000000 pteaddress 00000000
reference count 0000 used entry count 0000 NonCached color 0 Priority 0
restore pte 00000000 containing page 000000 Zeroed
因为记录!db 0xf0000
在两台机器上都能正常工作,并且!db
在两台机器上执行瞬时映射之前和之后 PFN 条目是相同的。第一个可能是一个愚蠢的 kd -kl / livekd 问题吗?
好奇的。我认为可能是 0xf0 从未被映射,而不是映射然后未映射,并且出于某种原因保留为 MiNonCached 而不是 MiNotMapped(并且在取消映射缓存区域时它可能会或可能不会将其返回到 MiNotMapped,但我没有知道)。我原以为这个范围永远不会映射到 ntoskrnl 上,因为它不应该使用 BIOS 服务。
在主机上:
lkd> !pfn 0xf1
PFN 000000F1 at address FFFFFA8000002D30
flink FFFFFFFFFFFFFFFF blink / share count FFFFFFFFFFFFFFFF pteaddress B47756FFFFE9FFFF
reference count 517C used entry count B4E9 Cached color 2D Priority 7
restore pte FFFFFFFFFFFFFFFF containing page 756FFFFE9FFFF Bad WEXY
WriteInProgress InPageError ParityError RemovalRequested
这次是“缓存”,并且显然包含垃圾,因此问题的 MiNotMapped 部分可能无关紧要,也许应该是垃圾 PFN 条目和零初始化条目之间的区别是什么?