1

メモリまたはディスク上にFileSystemタイプのものを作成する必要があります。これは、ディスク上のファイルと同じようにアクセスでき、そのパスはfopen()などの関数で使用できます。

詳細:AddFontResourceEx関数を使用して、アプリケーションにフォントをロードしています。この関数はファイルパスを必要とするため、ファイルはディスク上に存在する必要があります。ただし、ユーザーがフォントファイルにアクセスしたり表示したりできないようにする必要があります。

AddFontMemResourceEx関数を試しましたが、ロードされたフォントが列挙できないため、ユーザーはアプリケーションでフォントを見ることができません。また、VFSを作成するライブラリを試してみましたが、データベースのように機能します。つまり、ファイル/ディレクトリを作成してアクセスできます。ただし、AddFontResourceExまたはその他の関数でファイルパスを使用することはできません。

アプリケーションからアクセスできるメモリまたはディスク上に仮想ファイルシステムを作成し、作成されたこの仮想ファイルシステムでファイルを読み書きでき、そのファイルパスをAddFontResourceEx関数で使用できる方法はありますか?

4

3 に答える 3

2

本当にうまくいきません。はい、「仮想」ファイル システムを追加できます。ただし、ユーザー X に表示されるか、表示されないかのどちらかです。Windows の Access Control は、プログラムごとではなく、ユーザーごとに機能します。したがって、ユーザー X がアプリケーション A でフォントを表示できる場合、アプリケーション B でフォントを表示することもできます (B が Explorer.EXE であっても)。

于 2012-06-07T15:26:33.430 に答える
0

ユーザーが管理者である場合、十分に判断されていれば、フォントファイルが表示されないようにすることはできません。たとえば、プログラムをリバースエンジニアリングして、ファイルをどのように生成しているかを把握し、手動でプロセスを繰り返して独自のコピーを作成することができます。または(ファイルのアクセス許可をプロセスに関連付けることができたとしても)、独自のコードをプロセスに挿入してファイルを取得したり、メモリからフォント情報を直接取得したりできます。

彼らがフォントファイルを見るのを難しくするのに十分であるならば、あなたはこれを試すことができます:

  1. 現在のユーザーには書き込み専用の権限を持ち、他のユーザーには権限を持たないディレクトリをtempフォルダに作成します。

  2. 長くて複雑な暗号的にランダムな名前で、現在のユーザーに対する完全な権限を持つサブディレクトリを作成します。(名前は毎回異なる必要があります。)

  3. フォントファイルをサブディレクトリに書き込み、ロードします。

  4. フォントファイルを削除し、両方のディレクトリを削除します。

プロセス全体はほんの一瞬しかかからないはずです。これにより、ユーザーが権限を上書きしてファイルを取得するのがやや困難になるはずです。彼らがデバッガーを使用してプログラムをシングルステップで実行する場合、あなたは運が悪いと思いますが、すでに指摘したように、すべての人を止めるものは何もありません。

別のオプションは、おそらく、AddFontMemResourceExを使用して、フォントが列挙できないという事実に我慢することです。コードを変更するだけで、フォントを列挙する場所にフォントが手動でリストに追加されます。

于 2012-06-07T20:47:50.040 に答える
0

正しい答えが得られなかった場合は、正しい質問をしていない可能性があります

あなたの投稿のタイトルには「仮想ファイルシステム」と書かれていますが。後で、「フォントへのアクセス」について言及します。

「仮想ファイルシステム」は、いくつかの方法で使用されるあいまいな用語です。

一般的なケースの 1 つは、デバイスまたはネットワークを OS に追加することを意味します。

あなたの場合、アプリケーションからアクセスするようです。

ファイルシステムをエミュレートまたは操作するには、いくつかの方法 (「ライブラリ」) があります。

それらのいくつかは、実際のファイルシステムから独立して動作します。それらを操作し、それらの「仮想」フォルダーとファイルにデータを保存し、実際のフォルダーと仮想フォルダーからデータをコピーします。

それらのいくつかは、拡張レイヤーとして、実際のファイルシステムとプログラミング ファイルシステムの間で機能します。

例: 一時的に高速な IO アクセスを必要とするアプリケーションで作業しました。フォルダーを作成したり、実際のファイルシステムにファイルを保存したりするときに、ライブラリが見つかりました。

さらに、メモリに保存されているが、ファイル システム操作でアクセスされる「仮想ドライブ」を追加することもできます。アプリケーションが終了すると、「ハード ドライブ」とそのデータはメモリから消去されます。

あなたのケースは私の例に似ているようです。

「仮想ファイルシステム」ライブラリは何のために必要ですか?

C++、オープン ソース、フリーウェア、および商用の Web やいくつかのライブラリを見てきました。

それは、どのライブラリがあなたのケースに適しているかを調べるために、何をしたいかによって異なります。

幸運を

于 2012-06-07T15:39:15.597 に答える