關於異常STATUS_IN_PAGE_ERROR(0xC0000006)


簡介

STATUS_IN_PAGE_ERROR---頁內故障,這是當Windows嘗試從內存映射文件將數據讀入RAM並發生阻止數據讀取的I / O錯誤時發生的非常低級別的錯誤。當它發生在.exe時,如setup.exe程序,這是一個致命的錯誤,因為它無法執行無法讀取的代碼。表示0x%p處的指令引用了位於0x%p的內存。由於0x%x的I/O錯誤狀態,未將所需數據放入內存。線程試圖訪問一個不存在的頁面,並且系統無法加載頁面。-即程序或內存映射文件無法調出,因為它不再可訪問。設備如果讀取出錯,驅動程序可以返回此異常。其定義如下:

//
// MessageId: STATUS_IN_PAGE_ERROR
//
// MessageText:
//
// The instruction at 0x%p referenced memory at 0x%p. The required data was not placed into memory because of an I/O error status of 0x%x.
//
#define STATUS_IN_PAGE_ERROR             ((NTSTATUS)0xC0000006L)    // winnt

異常結構說明

ExceptionAddress: 03638c90 (libcef!v8::internal::CopyCharsUnsigned<unsigned char,unsigned short>+0x00000020)
   ExceptionCode: c0000006 (In-page I/O error)
  ExceptionFlags: 00000000
NumberParameters: 3
   Parameter[0]: 00000000
   Parameter[1]: 07b41828//IO操作失敗的內存地址
   Parameter[2]: c000000e//具體IO操作錯誤
Inpage operation failed at 07b41828, due to I/O error c000000e

說明

應用程序有時從網絡共享啟動,一些客戶在運行應用程序時報告了外部異常C0000006。根據我在谷歌的研究,這個“可能”與Image被調出和無法從網絡重新加載有關。解決方法是通過設置IMAGE_FILE_NET_RUN_FROM_SWAP標志,告訴Windows將完整的映像文件加載到交換中並從那里運行它。我的應用程序還依賴於運行時加載的各種.bpl和.dll庫。其中只有一部分可以由我更改,有些由其他供應商提供。如果exe設置了這個標志,這個庫會發生什么?是否也加載到交換文件中,還是仍被調出並在需要時重新加載?我是否也需要在庫中包含此標志?該標志僅適用於設置它的PE模塊。因此,在EXE中設置標志並不意味着該EXE加載的模塊會受到該標志的影響。由EXE加載的每個模塊(DLL、包等)將由加載程序根據該模塊中指定的PE選項進行處理。因此,您需要在網絡共享上的每個模塊上設置PE標志。

我還建議添加IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM