画像ファイルを暗号化しています。これで、私のプログラムは暗号化されたファイルを読み取り、char 配列にイメージを作成します。今私の問題は、画像ファイルをハードディスクに書き込まずに、画像ビューアで画像を開く必要があることです。画像データはすでにRAMにロードされているため、可能であるはずです。
3 に答える
メモリ領域から画像をロードできる画像ビューアは知りません。独自の画像ビューアーを作成する場合でも、メモリ領域を共有する必要があります。そうしないと、セキュリティ上の理由から、ビューアーがプログラムのメモリにアクセスできない可能性が高くなります。
妥協案は、画像をハードディスクの一時ディレクトリに書き込み、画像ビューアーで開き、ランダム データで上書きし、使用後にファイルを削除することです (小さなファイルの場合、画像ビューアーの読み込みが完了した後に削除することもできます)。 )。
あなたが書いていることから、復号化されたデータをハードディスクに書き込むことを避けたいと思われます。これは、ハードディスクに書き込まれたデータはシャットダウン後も存在し、RAM 内のデータは存続しないため、問題ありません。しかし、JasonD がコメントで指摘したように、これは誤った安心感につながる可能性があります。OS は、いつでも自由にメモリ領域を仮想メモリ (およびハードディスク) に移動できます。
編集: メモリ領域を開くことは可能かもしれません。たとえば、16 進エディタ HxDを試すことができます。プロセスによって割り当てられたメモリ領域を開いて編集できますが、その方法はわかりません。
他の人が指摘したように、データがメモリに存在するという事実は、画像ビューアーがプロセス間通信メカニズムを介した画像の読み込みをサポートしていない限り、何も提供しません (そのようなビューアーはまだ見ていません)。
したがって、オプションは、C ++用の画像表示ライブラリを使用するか(これは完璧なオプションです、ところで)、仮想ディスクを作成することです。
ディスクにスワップされたメモリについて - メモリをスワップ不可としてマークできますが、そのようなメモリ ブロックを割り当てることができることを確認する必要があります (大きなイメージの場合、これは不可能です)。
RAM に格納されたデータを公開する仮想ディスクを作成できますが、これにはカーネル モードの仮想ディスク ドライバーが必要です。ただし、これにはカーネルモード開発の確かな経験が必要です。当社では、プログラミングをほとんど必要とせずに暗号化されたインメモリ ストレージをタスクに使用できるいくつかの製品 (SolFS OS エディション、CallbackDisk) を提供しています。
それを行う方法は1つだけであり、それは絶対に簡単な方法ではありません。virtaulファイルシステムをユーザースペースにリンクするには、フィルターディレクトリが必要です。詳細については、「dokan」プロジェクトをご覧ください。
これが商用プロジェクトの場合、dokanはサポートされていないと思うので、NTFSドライバーに非常に精通している必要があります。
私はそれを使用し、それはうまく機能していますが、このようなものに入るのに約3ヶ月かかりました。
「高セキュリティアプリ」でない場合は、一時ファイルを使用できます。