2

これらの 3 つの手順を vc++ .net で実行する必要があります。

1. 元のパイプを殺す

2. 新しいパイプを作る

3. 新しいパイプを使用している実行中のアプリケーションを取り除く

プロセス エクスプローラーを使用し、ボタン (「ハンドルまたは DLL を検索」) とコマンド ("\Device\NamedPipe\") を使用すると、強制終了して再作成する必要がある名前付きパイプは ("\Device\NamedPipe\C :\Users\Andrew\Desktop\The Library\Media\Games\Nexon\MapleStory\BlackCipher\NexonGuard")。

参照は、ハンドルが1つあるということでもあります。

可能であれば、Process Explorer を使用する代わりにパイプ名を取得するにはどうすればよいでしょうか。

これらの 3 つのステップをどのように開始できるかを単純に尋ねているだけで、これを vc++ .net でコーディングします。

4

1 に答える 1

3
  1. 一般的に言えば、できません。他のエグゼクティブオブジェクト(ファイル、レジストリキーなど)と同様に、パイプは、そのオブジェクトへのすべてのハンドルが閉じられるまで破棄されません。パイプを使用してプロセスを強制的に閉じて、パイプを閉じる必要があります。

  2. CreatePipeを呼び出して、新しいパイプを作成します。

  3. これを行うための文書化された手段はありません。各プロセスのハンドルテーブルを調べて、指定されたパイプへのハンドルがあるかどうかを確認してから、そのプロセスでTerminateProcessを呼び出す必要があります。ほとんどの場合、これを行うにはSeDebugPrivilegeを取得する必要があります。(そして、もしあなたが実際にアンチチートシステムを回避しようとしているのなら、この特権を取り、問題のプログラムの内臓を検査することはおそらく何かを引き立たせるでしょう;))

Process Explorerは、カーネル(ドライバー)にロードすることで#3を達成しますが、Visual Studioのようなものからは実行できません。ドライバーの作成方法を学ぶ必要があり、ドライバーはWindowsDriverKitで構築されています。

于 2012-07-18T05:10:48.750 に答える