2012-12-15 167 views
-1

我有一個加密的圖像文件。現在我的程序將讀取加密文件並在char數組中創建圖像。現在我的問題是我需要用一些圖像瀏覽器打開圖像,而無需將圖像文件寫入硬盤。它應該是可能的,因爲圖像數據已經加載到內存中。從內存加載文件

+9

'這應該是可能的,因爲圖像數據已經加載到內存中。'這是一個大膽的說法。內存不是一個大的free-for-all - 一個進程擁有的內存通常是_quite故意不能從另一個進程訪問。你必須編寫一個圖像查看器,該圖像查看器專門用於與讀取的程序進行交互。硬盤解決了這個問題。 –

+0

你是否爲你的瀏覽器編碼? – marscode

+0

不,我需要通過一個數據地址或東西到pc的默認jpg查看器 –

回答

1

我不知道任何能夠從內存區域加載圖像的圖像查看器。即使您要創建自己的圖像查看器,也必須共享存儲器區域,否則出於安全原因,查看器很可能無法訪問程序存儲器。

一個妥協方法是將圖像寫入硬盤上的臨時目錄,用圖像查看器打開它,並用隨機數據覆蓋它並在使用後刪除文件(對於小文件,甚至可以在圖像查看器完成加載)。

從你寫的內容來看,你似乎希望避免將解密後的數據寫入硬盤,這很好,因爲寫入硬盤的數據在關機後仍然存在,而RAM中的數據獲勝沒有生存。但是正如JasonD在他的評論中指出的那樣,這可能會導致錯誤的安全感 - 操作系統可以隨時將內存區域移動到虛擬內存中(這對硬盤也是如此)。

編輯:打開一個內存區域可能是可能的,例如,你可以試用hex editor HxD - 它可以打開和編輯進程分配的內存區域,但我不知道它是如何實現的。

+0

感謝您的建議。是否可以打開我的內存塊作爲一個新的驅動器 –

0

只有一種方法可以做到,它絕對不是簡單的!您需要一個過濾器dirver將virtaul文件系統鏈接到用戶空間。您可以查看「dokan」項目以獲取更多信息。

如果這是一個羅科梅項目,你應該很福美來與NTFS驅動程序,因爲我覺得,不支持杜坎。

我使用它,它工作正常,但我花了三個月左右進入這個東西。

如果它不是一個「高安全性應用程序」,您可以使用臨時文件。

1

正如指出的其他人,該數據存在於內存中的事實,給你什麼,除非圖片瀏覽器通過進程間通信機制,支持加載圖像(我還沒有看到這樣的瀏覽器)。

那麼你的選擇是使用一些圖像瀏覽庫C++(它可以是一個完美的選擇,BTW),或創建一個虛擬磁盤。

關於內存交換到磁盤 - 你可以標記內存unswappable,但你需要確保這些存儲塊可分配(對於大圖像,這將是不可能的)。

您可以創建一個虛擬磁盤,這將暴露存儲在RAM中的數據,但你需要爲這個內核模式的虛擬磁盤驅動器。這需要在內核模式開發方面的豐富經驗。我們公司提供幾種產品(SolFS操作系統版本,CallbackDisk),您可以使用它來完成任務,並且幾乎不需要編程即可獲得加密的內存存儲。