欢迎来到之路教程(on itroad-com)

原因

在几乎所有情况下,系统实际上并未耗尽 PTE。
相反,驱动程序请求了一大块内存,但没有足够大小的连续块来满足此请求。

通常,视频驱动程序会分配大量必须成功的内核内存。
一些备份程序做同样的事情。

NO_MORE_SYSTEM_PTES 参数

参数说明
10:系统扩展 PTE 类型<br>1:非分页池扩展 PTE 类型
2内存请求大小
3可用系统 PTE
4总数 系统 PTE 总数
Windows 蓝屏代码 0x3F:NO_MORE_SYSTEM_PTES

NO_MORE_SYSTEM_PTES 错误检查的值为 0x0000003F。
这是系统执行过多 I/O 操作的结果。
这导致了碎片化的系统页表条目 (PTE)。

解决方法

一种可能的解决方法:修改注册表以增加系统 PTE 的总数。
如果这没有帮助,请删除所有最近安装的软件,尤其是备份实用程序或者磁盘密集型应用程序。

调试问题:可以使用以下方法调试bug check 0x3F。

首先,获取堆栈跟踪,并使用 !sysptes 3 扩展命令。

然后将 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\TrackPtes 设置为 DWORD 1,然后重新启动。
这将导致系统保存堆栈跟踪。

这允许我们显示有关 PTE 所有者的更多详细信息。
例如:

0: kd> !sysptes 4
0x2c47 System PTEs allocated to mapping locked pages
VA       MDL     PageCount  Caller/CallersCaller
f0e5db48 eb6ceef0        1 ntkrpamp!MmMapLockedPages+0x15/ntkrpamp!IopfCallDriver+0x35
f0c3fe48 eb634bf0        1 netbt!NbtTdiAssociateConnection+0x1f/netbt!DelayedNbtProcessConnect+0x17c
f0db38e8 eb65b880        1 mrxsmb!SmbMmAllocateSessionEntry+0x89/mrxsmb!SmbCepInitializeExchange+0xda
f8312568 eb6df880        1 rdbss!RxCreateFromNetRoot+0x3d7/rdbss!RxCreateFromNetRoot+0x93
f8363908 eb685880        1 mrxsmb!SmbMmAllocateSessionEntry+0x89/mrxsmb!SmbCepInitializeExchange+0xda
f0c54248 eb640880        1 rdbss!RxCreateFromNetRoot+0x3d7/rdbss!RxCreateFromNetRoot+0x93
f0ddf448 eb5f3160        1 mrxsmb!MrxSmbUnalignedDirEntryCopyTail+0x387/mrxsmb!MRxSmbCoreInformation+0x36
f150bc08 eb6367b0        1 mrxsmb!MrxSmbUnalignedDirEntryCopyTail+0x387/mrxsmb!MRxSmbCoreInformation+0x36
f1392308 eb6fba70        1 netbt!NbtTdiOpenAddress+0x1fb/netbt!DelayedNbtProcessConnect+0x17c
eb1bee64 edac5000      200 VIDEOPRT!pVideoPortGetDeviceBase+0x118/VIDEOPRT!VideoPortMapMemory+0x45
f139b5a8 edd4b000       12 rdbss!FsRtlCopyWrite2+0x34/rdbss!RxDriverEntry+0x149
eb41f400 ede92000       20 VIDEOPRT!pVideoPortGetDeviceBase+0x139/VIDEOPRT!VideoPortGetDeviceBase+0x1b
eb41f198 edf2a000       20 NDIS!NdisReadNetworkAddress+0x3a/NDIS!NdisFreeSharedMemory+0x58
eb41f1e4 eb110000       10 VIDEOPRT!pVideoPortGetDeviceBase+0x139/VIDEOPRT!VideoPortGetDeviceBase+0x1b
......

如果在设置 TrackPtes 注册表值后系统再次耗尽 PTE,将发出错误检查 0xD8 (DRIVER_USED_EXCESSIVE_PTES) 而不是 0x3F。

也会显示导致此错误的驱动程序名称。

日期:2020-09-17 00:15:55 来源:oir作者:oir