「ゎヌディアンノットを切る」たたはWindowsの情報暗号化の問題を克服する

最新のオペレヌティングシステムは、情報を凊理および管理する耇雑な階局プロセスです。 この問題における珟圚のバヌゞョンのWindowsも䟋倖ではありたせん。 セキュリティツヌルをWindowsオペレヌティングシステムの環境に統合するには、倚くの堎合、アプリケヌションレベルでの統合で十分です。 ただし、Windows環境で情報を暗号化するこずになるず、事態はさらに耇雑になりたす。



このプロセスにおける暗号化ツヌルの開発者の䞻な「頭痛」は、「暗号化の透明性」、぀たり オペレヌティングシステムのプロセス構造に調和しお統合するず同時に、ナヌザヌが暗号化プロセスに関䞎しないようにし、さらにメンテナンスを行う必芁がありたす。 珟代の保護手段の芁件により、ナヌザヌは情報を保護するプロセスからたすたす陀倖されおいたす。 したがっお、このナヌザヌ自身にずっお、情報を保護するために「理解できない」決定を採甚する必芁のない快適な条件が䜜成されたす。

この蚘事では、ディスク暗号化ツヌルずWindowsファむルシステムのプロセスずの効果的な統合のアむデアを明らかにしたす。

開発者の目暙は、ナヌザヌの最倧の透過性の芁件を満たすディスク䞊の情報を暗号化するメカニズムを䜜成するこずでした。 この暗号化メカニズムず、ファむルシステムの管理を担圓するWindowsオペレヌティングシステムのプロセスずの効果的な盞互䜜甚を通じお、芁件を満たす必芁がありたす。 暗号化メカニズムの有効性は、暗号化プロセスの高いパフォヌマンスずオペレヌティングシステムリ゜ヌスの合理的な䜿甚によっおも確認する必芁がありたす。

タスクは、暗号化および埩号化されたコンテンツぞの同時アクセスずファむル名の暗号化を提䟛するように最初に蚭定されたした。 これは䞻な問題を匕き起こしたす、なぜなら このような芁件は、Windowsの珟圚のアヌキテクチャに反したす。 問題の本質を理解するには、たずこのオペレヌティングシステムの䞻芁なポむントを分析する必芁がありたす。

Windowsでは、すべおのファむルシステムはメモリマネヌゞャヌやキャッシュマネヌゞャヌなどのサブシステムに䟝存しおおり、メモリマネヌゞャヌはファむルシステムに䟝存しおいたす。 それは悪埪環のように思えたすが、すべおがさらに明らかになりたす。 以䞋の図1では、これらのコンポヌネントず、サブシステムWin32などおよび他のシステムドラむバヌからの芁求を受け入れるI / Oマネヌゞャヌが瀺されおいたす。 「フィルタヌ」および「ファむルシステムのスタック」ずいう甚語も図で䜿甚されおいたす。これに぀いおは、以䞋で詳しく説明したす。



図1









ファむルをメモリにマッピングするなどのメカニズムを分析したしょう。 その本質は、実際に仮想メモリにアクセスするず、ファむルの䞀郚が読み取られるずいう事実にありたす。 これは、プロセッサのハヌドりェアメカニズムずメモリマネヌゞャ自䜓を䜿甚しお実装されたす。 プロセス仮想メモリの範囲は、蚘述子で蚘述されたす。 ある範囲に察しお蚘述子がない堎合、仮想メモリのこのセクションには䜕も存圚せず、そのような範囲ぞのアクセスはプロセスの厩壊に぀ながりたす。 物理メモリが任意の範囲に割り圓おられおいる堎合、これらの仮想アドレスぞのアクセスは物理メモリぞの通垞のアクセスに぀ながりたす。そのようなメモリは匿名ずも呌ばれたす。 ファむルが仮想メモリにマップされおいる堎合、これらのアドレスにアクセスするず、ファむルの䞀郚がディスクから物理メモリに読み取られ、その埌通垞の方法でファむルぞのアクセスが実行されたす。 ぀たり これら2぀のケヌスは非垞に䌌おいたすが、唯䞀の違いは、埌者の堎合、ファむルの䞀郚が察応する物理メモリに以前に読み蟌たれるこずです。 これらのアクセスタむプはすべお蚘述子であり、情報が含たれおいたす。 これらの蚘述子は、必芁なタスクを実行するために管理するメモリマネヌゞャヌの構造です。 ご想像のずおり、ファむルの䞀郚を物理メモリのペヌゞに読み蟌むには、メモリマネヌゞャがファむルシステムにリク゚ストを送信する必芁がありたす。 図2は、AずBの2぀の範囲を持぀プロセス仮想メモリの䟋を瀺しおいたす。これたでにアクセスしたこずはありたせん。



図2









範囲Aはプロセス自䜓の実行可胜ファむルを衚瀺し、範囲Bは物理メモリを衚瀺したす。 これで、プロセスが範囲Aぞの最初のアクセスを実行するず、メモリマネヌゞャが制埡を受け取り、最初に行うこずは範囲のタむプを評䟡するこずです。 ファむルは範囲Aにマッピングされるため、メモリマネヌゞャヌは最初に物理メモリ内のファむルから察応する郚分を怜蚎し、次にそれをプロセス範囲Aにマッピングするため、メモリマネヌゞャヌなしで読み取り内容ぞのアクセスがさらに実行されたす。 範囲Bの堎合、メモリマネヌゞャヌは同じシヌケンスを実行したすが、唯䞀の違いは、ファむルからデヌタを読み取る代わりに、メモリの空き物理ペヌゞを範囲Bにマップするだけです。その埌、この範囲ぞのアクセスは、メモリマネヌゞャヌの関䞎なしに実行されたす。 図3は、範囲AおよびBぞの最初のアクセス埌のプロセスの仮想メモリの䟋を瀺しおいたす。



図3









図からわかるように、䞡方の範囲にアクセスする堎合、物理メモリぞのアクセスはメモリマネヌゞャの関䞎なしに実行されたす。 以前、最初のアクセスで、圌は物理メモリを範囲AずBにマッピングし、察応するファむルの䞀郚を以前に範囲Aの物理メモリに読み蟌みたした。

キャッシュマネヌゞャは、すべおのディスク䞊のシステムで開かれおいるすべおのファむルの䞭心的なメカニズムです。 このメカニズムを䜿甚するず、ファむルぞのアクセスを高速化できるだけでなく、物理メモリを節玄できたす。 キャッシュマネヌゞャヌは、メモリマネヌゞャヌずは異なり、単独では機胜したせん。 ファむルシステムによっお完党に管理され、ファむルに関する必芁な情報サむズなどはすべおファむルシステムによっお提䟛されたす。 読み取り/曞き蟌み芁求がファむルシステムに送信されるたびに、ファむルシステムはディスクからファむルを読み取らず、代わりにキャッシュマネヌゞャヌサヌビスを呌び出したす。 キャッシュマネヌゞャは、メモリマネヌゞャのサヌビスを䜿甚しお、ファむルを仮想メモリにマップし、メモリからリク゚スタのバッファにコピヌしたす。 したがっお、このメモリにアクセスするず、メモリマネヌゞャはファむルシステムにリク゚ストを送信したす。 そしお、これは特別な芁求であり、ファむルをディスクから盎接読み取る必芁があるこずを瀺したす。 キャッシュマネヌゞャヌによっお以前にマップされたファむルにアクセスしおいる堎合、そのファむルは再び仮想メモリにマップされたせん。 代わりに、キャッシュマネヌゞャヌは、ファむルが以前にマップされた仮想メモリを䜿甚したす。 ファむルマッピングは、ファむルシステムがサヌビスを呌び出すずきにキャッシュマネヌゞャヌに枡す構造を通じお監芖されたす。 これらの構造に぀いおは、以䞋で詳しく説明したす。 図4は、ファむルを読み取るプロセスの䟋を瀺しおいたす。



図4









䞊の図に瀺すように、プロセスはファむルをバッファヌBに読み取りたす。読み取るために、プロセスはI / Oマネヌゞャヌに接続し、I / Oマネヌゞャヌが芁求を生成しおファむルシステムに送信したす。 ファむルシステムは、リク゚ストを受信するず、ディスクからファむルを読み取りたせんが、キャッシュマネヌゞャヌを呌び出したす。 次に、キャッシュマネヌゞャヌは、ファむルがその仮想メモリにマップされおいるかどうかを評䟡し、マップされおいない堎合は、メモリマネヌゞャヌを呌び出しおファむル/ファむルの䞀郚を衚瀺したす。 この䟋では、ファむルはすでに衚瀺されおおり、アクセスは䞀床も行われおいたせん。 さらに、キャッシュマネヌゞャヌは、仮想メモリAの範囲にマップされたファむルをプロセスバッファヌBにコピヌしたす。範囲Aぞのアクセスは初めお実行されるため、メモリマネヌゞャヌは制埡を受け取り、範囲を評䟡し、メモリにマップされたファむルであるため、その䞀郚ず芋なしたすその埌、仮想メモリAの範囲に衚瀺されたす。その埌、既に説明したように、メモリマネヌゞャをバむパスしお範囲Aぞのアクセスが実行されたす。

䜕回でもファむルをキャッシュし、メモリにマップするこずを䜕回も劚げるこずはありたせん。 ファむルがキャッシュされ、倚数のプロセスのメモリにマップされおいる堎合でも、このファむルに䜿甚される物理メモリは同じです。 これが物理メモリの保存の本質です。 図5は、1぀のプロセスが通垞の方法でファむルを読み取り、別のプロセスが同じファむルをその仮想メモリにマップする䟋を瀺しおいたす。



図5









䞊の図からわかるように、物理メモリはプロセスBの仮想メモリずキャッシュマネヌゞャの仮想メモリにマップされたす。 プロセスAがファむルをバッファヌDに読み蟌むず、I / Oマネヌゞャヌに接続し、芁求を䜜成しおファむルシステムに送信したす。 次に、ファむルシステムはキャッシュマネヌゞャヌを䜿甚したす。キャッシュマネヌゞャヌは、マネヌゞャヌのキャッシュの仮想メモリ範囲CにマップされたファむルをプロセスAのバッファヌDに単にコピヌしたす。ファむルは衚瀺されるだけでなく、キャッシュマネヌゞャヌぞのアクセス時に以前に実行されおいたためファむルがマップされおいる範囲Cぞのアクセス、メモリマネヌゞャヌの参加なしで操䜜が実行されたす。 範囲Eを読み曞きするずき、プロセスBは、キャッシュマネヌゞャヌがファむルをコピヌするずきにアクセスしたメモリの同じ物理ペヌゞに基本的にアクセスしたす。

ファむルシステムは、ナヌザヌ゜フトりェアたたは他のドラむバヌからの芁求を受け入れたす。 アクセスする前に、ファむルを開いおおく必芁がありたす。 ファむルを開く/䜜成する芁求が正垞に実行されるず、ファむルシステムはキャッシュマネヌゞャヌずメモリマネヌゞャヌが䜿甚するメモリ構造を圢成したす。 これらの構造はファむルに固有であるこずにも泚意しおください。 ぀たり 同じファむルに察する同じ芁求が来たずきに特定のディスクファむルが開かれた堎合、ファむルシステムは以前に圢成されたメモリ構造を䜿甚したす。 本質的に、これらはメモリ内のディスクファむルの゜フトりェア衚珟です。 図6は、開いおいるファむルのむンスタンスずその構造を照合する䟋を瀺しおいたす。



図6









図では、プロセスAがファむルCずファむルDを開き、プロセスBがファむルCを2回開いおいたす。 したがっお、ファむルシステムによっお圢成される構造が1぀だけの堎合、ファむルCの3぀の開いおいるむンスタンスがありたす。 ファむルDは䞀床開かれたため、ファむルシステムによっお圢成された構造に察応する1぀の開いたむンスタンスがありたす。

ファむルシステムに送信された芁求は、すぐには凊理されたせん。 リク゚ストは、たずそのようなリク゚ストを远跡したいドラむバヌのチェヌンを通過したす。 このようなドラむバヌはフィルタヌず呌ばれたす。 ファむルシステムに到達する前、およびファむルシステムがリク゚ストを凊理した埌、リク゚ストを衚瀺するこずができたす。 たずえば、ファむル暗号化フィルタヌは、デヌタを埩号化/暗号化するために、読み取り/曞き蟌み芁求を远跡できたす。 したがっお、ファむルシステム自䜓を倉曎するこずなく、ファむルデヌタを暗号化できたす。 フィルタは、ファむルシステムが圢成するファむル構造に䞀意のデヌタをバむンドできたす。 フィルタヌドラむバヌずファむルシステムドラむバヌが䞀緒になっお、ファむルシステムスタックを圢成したす。 フィルタヌの数は異なる堎合があり、フィルタヌ自䜓も異なる堎合がありたす。 理論的には、たったくそうではないかもしれたせんが、実際には起こりたせん。 図7は、3぀のフィルタヌを含むファむルシステムスタックを瀺しおいたす。



図7









芁求がファむルシステムに到達する前に、フィルタヌ1、2、3を順番に通過したす。ファむルシステムによっお芁求が凊理されるず、フィルタヌず逆の順序で衚瀺されたす。 たた、䞊蚘の䟋では、フィルタヌ1およびフィルタヌ3は、ファむルを開いたり䜜成したりする芁求が実行された埌にファむルシステムが圢成したファむル構造に構造を付加したした。

ほずんどのタスクはフィルタリングによっお解決されたすが、私たちのケヌスは独特です。 前述のように、ファむル名を暗号化するだけでなく、暗号化および埩号化されたコンテンツぞの同時アクセスを提䟛する必芁があるずいう点でナニヌクです。 それでも、この問題を解決するフィルタヌの開発を詊みたす。

図8は、ファむルが以前に解読されお開かれたずきの状況を瀺しおいたす。



図8









これは、フィルタヌが埩号化された名前を確認したこずを意味し、図に瀺すように、ファむルシステムが圢成する構造にこの名前をバむンドできたす前述のように、この構造は特定のディスクファむルに固有です。 その瞬間、ファむルは暗号化されお開かれたす。぀たり、フィルタヌは暗号化された名前を芋たした。 埩号化された名前が既にファむル構造に関連付けられおいる堎合、このような状況でどのように動䜜したすか 結果が臎呜的である必芁はありたせんが、明らかに、動䜜は予枬できたせん。

䞊蚘の続きで、ファむルのコンテンツにアクセスするず、問題が発生し、さらに深刻な問題が発生するこずを远加できたす。 ファむルが埩号化ず暗号化の䞡方で開かれたずきの状況に戻りたしょう。 この状況を図9に瀺したす;ファむルは䞀床も読み曞きされおいたせん。



図9









ここで、埩号化されたコンテンツを読み取る芁求が来たずしたす。 ファむルシステムはキャッシュマネヌゞャヌのサヌビスを䜿甚しおファむル構造を提䟛し、キャッシュマネヌゞャヌずメモリマネヌゞャヌの䞡方が独自のデヌタを添付しお、ファむルの衚瀺ずキャッシュをさらに制埡したす。 この状況を図10に瀺したす。



図10









次に、芁求は暗号化されたコンテンツを読み取るようになり、ファむルシステムは再びファむル構造をキャッシュマネヌゞャヌに枡したす。キャッシュマネヌゞャヌずメモリマネヌゞャヌは以前にこのファむルの䞀意のデヌタをこの構造に関連付けおいたため、それらを䜿甚しお単玔に芁求を実行したす。 ぀たり これで、これらの構造はファむルがマップされた堎所を瀺し、キャッシュマネヌゞャヌはファむルデヌタを仮想メモリからリク゚スタヌのバッファヌに単にコピヌしたす。 ファむルは最初にアクセスされたずきに埩号化されおキャッシュされたため、暗号化されたアクセスの堎合、埩号化者のバッファには埩号化されたデヌタが含たれたす。

2぀の基本的な問題を敎理したした。 実際には、もっずありたした。 たずえば、タスクの䞀郚ずしお、各暗号化ファむルにヘッダヌ情報を远加する必芁がありたすが、これもフィルタリングでは解決されたせん。 これらすべおの問題を䞀床に回避するために、仮想ファむルシステムずいう解決策が芋぀かりたした。

本質的に、仮想ファむルシステムは通垞のシステムず倧差ありたせん。 根本的な違いは、通垞のファむルシステムがディスクで動䜜し、仮想システムが他のファむルシステムのファむルで動䜜するこずです。 ファむルシステムサヌビスの䞀般的な消費者です。 図11は、仮想ファむルシステムの抂念を瀺しおいたす。



図11





通垞のファむルシステムずは異なり、仮想ファむルシステムはそれ自䜓をシステムに登録したせんこれは䞊蚘では蚀及したせんでしたが、オペレヌティングシステムが特定のファむルシステムのサヌビスを䜿甚するには登録する必芁がありたす。その堎合、リク゚ストを送信する必芁がありたすなりたせん。 この問題を解決するために、通垞のファむルシステムにフィルタヌを䜿甚したすが、今回はその機胜が非垞にシンプルで制限されたす。そのうちの1぀および䞻な機胜は暗号化ファむルぞのアクセスを远跡したす。 フィルタヌがそのような芁求を怜出するずすぐに、単玔にそれを仮想ファむルシステムにリダむレクトしたす。 通垞のファむルぞのアクセスが実行されるず、芁求は元のファむルシステムに転送されたす。

次に、仮想ファむルシステムのコンテキストで、埩号化および暗号化されたアクセスをもう䞀床芋おみたしょう。 図12は、特定のファむルの埩号化および暗号化されたコンテンツにアクセスした堎合の䟋を瀺しおいたす。



図12





もう䞀床、ファむルが埩号化されお開かれたずきの状況を想像しおください。 これは、ファむルを開く芁求の実行䞭に、フィルタヌがそれを確認し、仮想ファむルシステムにリダむレクトしたこずを意味したす。 仮想ファむルシステムは、リク゚ストを受信するず、アクセスのタむプ埩号化たたは暗号化を評䟡し、埩号化されたアクセスが実行されるため、仮想ファむルシステムはたず埩号化された名前を暗号化された名前に倉換しおから、その名前぀たり名前でネむティブファむルシステムを介しおファむルを開こうずしたすネむティブファむルシステム䞊のファむルは暗号化されたす。 成功するず、仮想ファむルシステムはメモリ構造を圢成し、埌でキャッシュマネヌゞャずメモリマネヌゞャが䜿甚したす。 ここで、ファむルが暗号化されお開かれ、フィルタヌが評䟡を行わずに芁求を仮想ファむルシステムに再床リダむレクトするずしたす。 仮想ファむルシステムはアクセスのタむプを評䟡し、アクセスは暗号化されおいるため、その名前でネむティブファむルシステムを介しおファむルを開こうずしたす。 たた、成功するず、仮想ファむルシステムはキャッシュマネヌゞャヌずメモリマネヌゞャヌのメモリ構造を圢成したす。 ただし、埩号化されたアクセスずは異なり、これらは他の構造になりたす。 これで、ファむルが再び埩号化されお開かれた堎合、仮想ファむルシステムは、最初の埩号化されたアクセス䞭に圢成されたものず同じ構造を䜿甚したす。 ファむルが再び暗号化されお開かれる堎合、ファむルシステムは最初の暗号化されたアクセス䞭に圢成された構造を䜿甚したす。 したがっお、埩号化および暗号化されたコンテンツぞのアクセスを共有したした。

図13は、埩号化および暗号化されたファむルコンテンツぞの読み取り/曞き蟌みアクセスが実行されたこずがない状況を瀺しおいたす。



図13





ここで、解読された読み取りが実行されるず、図14に瀺すように、キャッシュマネヌゞャヌサヌビスを䜿甚する仮想ファむルシステムは、解読されたファむルが開かれたずきに返されたメモリ構造を提䟛したす。



図14





キャッシュマネヌゞャヌは、ファむルを仮想メモリにマップし、デヌタをリク゚スタヌのバッファヌにコピヌしたす。 したがっお、コピヌのプロセスでは、メモリマネヌゞャヌが仮想ファむルシステムに読み取り芁求を送信し、仮想ファむルシステムが読み取り芁求をネむティブファむルシステムに送信したす。たた、埩号化されたファむルのメモリ構造がキャッシュマネヌゞャヌに転送されたため、仮想ファむルシステムはデヌタを埩号化し、完了をメモリマネヌゞャヌに通知したす、埩号化されたコンテンツはキャッシュされたす。 暗号化された読み取りが実行されるず、仮想ファむルシステムは、図15に瀺すように、ファむルが暗号化されお開かれたずきに生成したメモリ構造のマネヌゞャヌにキャッシュを転送したす。



図15





キャッシュマネヌゞャヌは再びファむルを仮想メモリにマップしこれらの構造にはただファむルが衚瀺されおいないため、デヌタをリク゚スタヌのバッファヌにコピヌしたす。 たた、コピヌのプロセスで、メモリマネヌゞャヌは仮想ファむルシステムに読み取り芁求を送信し、仮想ファむルシステムは読み取り芁求をネむティブファむルシステムに再床送信したす。暗号化されたファむルのメモリ構造はデヌタを埩号化せずにキャッシュマネヌゞャヌに転送されたため、仮想ファむルシステムはメモリマネヌゞャヌに通知したす完了。 そのため、ファむルは暗号化されおキャッシュされたす。

ご芧のように、仮想ファむルシステムは、ファむルの埩号化および暗号化されたコンテンツぞの同時アクセスを蚱可しない基本的な問題を解決するため、オペレヌティングシステムの埓来のメカニズムを攟棄する必芁がありたす。 フィルタリングプロセスでは、ファむルシステムが返すファむルメモリ構造にのみデヌタを远加できたす。たた、これらの構造を圢成しないため、それらに介入しお管理するこずはできたせん。 そしお、仮想ファむルシステムを通じおそれらを完党に圢成するため、これらを完党に制埡できたす。これは、この問題を解決するフレヌムワヌクで必芁です。 たずえば、埩号化および暗号化されたコンテンツファむルの䞀貫性を確保する必芁がありたす。 デヌタが埩号化されたファむルに曞き蟌たれ、デヌタがディスクではなくキャッシュに残っおいる状況を想像しおください。 そしおその瞬間に、ファむルの暗号化されたコンテンツを読み取る芁求が来たす。 これに応じお、仮想ファむルシステムは埩号化されたコンテンツをディスクにダりンロヌドし、暗号化されたキャッシュをフラッシュしたす。これにより、キャッシュマネヌゞャヌは暗号化された読み取りのために読み取り芁求を仮想ファむルシステムに再送信したす。 ろ過の枠組みでは、このような問題は原則的に解決されおいたせん。

仮想ファむルシステムを開発するずき、私は異垞な問題に察凊しなければなりたせんでした。 これは、通垞のファむルシステムがディスクを操䜜するずきにファむルシステムファむルを操䜜するためです。 そのため、たずえば、NTFSファむルシステムで゚ラヌが芋぀かりたした。 ファむルXぞのアクセスで明らかになりたした\ $ mft \ <任意の名前>は、Xドラむブぞのすべおのアクセスのハングに぀ながりたした。調査の結果、NTFSはすべおのファむルの列挙子であるファむル$ mftの同期メカニズムをリリヌスしたせんでしたドラむブ。 したがっお、ディスク䞊のファむルを芋぀けるには、最初に$ mftファむルを読み取る必芁がありたす。このファむルぞのアクセスは䞀時停止されおいたす。 異垞ずは蚀えないもう1぀の䟋は、Windows 8カヌネルで芋぀かった゚ラヌです。その結果、メモリマネヌゞャヌは、ファむルのメモリ構造が垞に最新バヌゞョンであるず刀断したす。 このため、圌はこの構造の䞀郚を䜿甚しようずしおいたすが、実際にはそうではないかもしれたせん。 そしお、それがBSODに぀ながりたした。

仮想ファむルシステムの実装は、フィルタの実装よりもはるかに耇雑ですが、このようなメカニズムの存圚は、ファむルを操䜜する際の柔軟性を高めたす。 先ほどお話ししたものを含めお。 䞀芋したずころ、タスクは簡単なように思えるかもしれたせんが。

このアプロヌチを暗号化に適甚した結果、暗号化および埩号化されたコンテンツぞの゜フトりェアプロセスの同時アクセスを提䟛する機胜が正垞に実装され、ファむル名の暗号化が実装されたした。これにより、暗号情報保護の実装の高床な透明性が実珟したす。

Windowsでファむル暗号化の「透明性」を確保するこのアプロヌチは、ロシアの倚くの組織で䜿甚されおいるSecret Disk Enterprise䌁業補品Aladdin R.D.で正垞に実装されおいるこずに泚意しおください。 これは、ディスク䞊のファむルの暗号化プログラムを䜜成するプロセスでこのアむデアを適甚するこずの実行可胜性ず芋通しを瀺しおいたす。

結論ずしお、Windowsファむルシステムの技術的な耇雑さず、この蚘事で説明したような問題を解決するための暙準メカニズムの欠劂は、情報を保護する䟿利でシンプルなプログラムを䜜成する䞊で垞に障害ずなるこずに泚意しおください。 この堎合、唯䞀の正しい決定は、゜フトりェア機胜を倱うこずなくこれらの制限を回避するために元のメカニズムを独立しお実装するこずです。



All Articles