「C:\ Program」という名前のプログラムが他のプログラムに影響を与えるのはなぜですか?


15

今日、青色のから呼び出されたファイルProgramがのルートにC:\表示され、システムにログインすると、ポップアップにメッセージが表示されます。

ファイル名の警告

コンピューターに「C:\ Program」と呼ばれるファイルまたはフォルダーがあり、特定のアプリケーションが正しく機能しなくなる可能性があります。「C:\ Program1」に名前を変更すると、問題が解決します。今すぐ名前を変更しますか?

メッセージは自明ですが、なぜこのファイルがそんなに大きな影響を与えるのでしょうか?実際、いくつかのプログラム(おそらくすべて、私はチェックしなかった)にあるプログラムC:\Program Files...はまったく起動していませんでした。そのようなファイルがどのように作成されるかは理解できますが(たとえば、フォルダーに書き込みをしようとしてC:\Program Files\Something...引用符は付けません)、他のプログラムにどのように影響するかはほとんどわかりません。


1
これはWindowsによって生成されたメッセージでしたか?
ラムハウンド14年

1
はい、Process Exploerから再確認しました。explorer.exeからのダイアログでした
Konrad Kokosa 14年

2
大ざっぱに聞こえますProgram Files* が、一般的な消費者以外の場所にプログラムを選択しないでください(一部のプログラム以外)。しかし、検索の不適切なマッチングがの代わりにそれを見つけることができるためだと思いますProgram Files
オタクウォーラー14年

回答:


26

Win32 APIの既知の弱点により、このような大きな影響があります。

プログラムは、CreateProcess()システムコールを介してWin32で生成されます。いくつかの方法で使用できます。Unix、Linux、またはOS / 2のバックグラウンドから来ている人々は、通常、プログラム(イメージファイル)が生成する2つの別個の引数と、新しいプロセスに渡すコマンドテールをとると考えます。これらのオペレーティングシステムのAPIには2つの別個のものがあります。しかし、実際には、システムコールは、プログラム名と引数を1つの大きな文字列にまとめた代替形式で呼び出すことができます。 CreateProcess()プログラムファイル名とコマンドテールを分離しようとします。

問題は、左側の部分がファイルまたはディレクトリに一致するまで、連続するスペース文字ごとに文字列を徐々に分割してこれを行うことです。多くのWin32プログラムはC:\Program Files\Contoso\TakeOver.exe StackExchange.com、システムコールのように文字列を渡そうとします。これは、明らかに危険な人がやって来て、あなたと同じようにファイルを作成するまで、適切なプログラムを(C:\Program Files\Contoso\TakeOver.exe適切なコマンドテールで)実行します。StackExchange.comC:\Program

その時点で、システムコールC:\Programはコマンドtailでプログラムイメージファイルを実行しようとしますFiles\Contoso\TakeOver.exe StackExchange.com。天国C:\Programは、実際に実行可能なプログラムイメージである場合に役立ちます。

これは一般的な弱点であり、One Big Stringを使用して他のプログラムを生成するプログラムと組み合わせてスペースを含むすべてのプログラムファイル名に適用されます。しかし、これに見舞われる最も一般的なケースは、存在するすべてのC:\Program Files\プログラムと、One Big Stringアプローチを使用する多数のWin32プログラムです。

Win32 APIを変更するには遅すぎます。10年前には遅すぎました。そして、Microsoftは、2つではなく1つの大きな文字列を渡す他の人によって書かれたプログラムのすべてを変更することはできませんCreateProcess()。そのため、Microsoftは、ユーザーのログオン時に、C:\Program表示される警告の存在を確認し、表示するWindowsを作成します。

そして、ご覧のとおり、MicrosoftのWin32 docoには、開発者にOne Big Stringアプローチを使用してプログラム記述ないようにという大きな「セキュリティ」警告があります。

参考文献


6
素晴らしい答えです!私は開発者なので、次に行うことは、明らかにC:\Program.exeすべてのコマンドラインパラメーターを記録するダミーを作成することです。誰がそれを使用するかがわかります!
コンラッドココサ14年

1
だから、これは XP以降のデフォルトのセキュリティ設定は、非管理者によるルート内のファイルを作成することができない理由です。
-kinokijuf
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.