错误检查 0x3F:NO_MORE_SYSTEM_PTES
NO_MORE_SYSTEM_PTES 错误检查的值为 0x0000003F。 这是系统执行过多 I/O 操作的结果。 这导致了系统页表条目 (PTE) 碎片化。
重要
这篇文章适合程序员阅读。 如果您是在使用计算机时收到蓝屏错误代码的客户,请参阅蓝屏错误疑难解答。
NO_MORE_SYSTEM_PTES 参数
参数 | 说明 |
---|---|
1 |
0:系统扩展 PTE 类型 1:非分页池扩展 PTE 类型 |
2 |
内存请求的大小 |
3 |
免费系统 PTE 总数 |
4 |
系统 PTE 总数 |
原因
几乎在所有情况下,系统实际上都没有 PTE。 相反,驱动程序请求了一个大内存块,但没有足够大的连续内存块来满足该请求。
视频驱动程序通常会分配大量必须成功的内核内存。 某些备份程序执行相同的操作。
解决方法
可能的解决方法:修改注册表以增加系统 PTE 总数。 如果仍无济于事,请删除最近安装的任何软件,尤其是备份实用程序或磁盘密集型应用程序。
调试问题:可使用以下方法来调试错误检查 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。 同时还会显示导致该错误的驱动程序名称。