0

CD/DVD 書き込みプロセスの開始を検出する信頼できる方法を見つけることができませんでした。書き込みツールはファイル エクスプローラーのみになります。

「IMAPI CD-Burning COM Service サービスに開始コントロールが正常に送信されました」というイベント ログがあることは知っています。

これに関する問題は、書き込みが行われなかった場合でも、これ (および対応する停止) がトリガーされることです。初期化時にWMPのような特定のものがそのイベントをトリガーするようです(書き込みタブをクリックします)。

必要なのは、書き込みプロセスが実際に開始されるたびに通知してくれるメソッド (wmi、imapi など) です。

残念ながら、私はどこから始めればよいかを知るのに十分なパワーシェルを知りません。この時点で、誰かが私が望むものに十分近いことをして、まだ何も見つけられていないことを期待して、暗闇の中で激しくグーグルしています。

ありがとうございました、

4

2 に答える 2

0

助けてくれてありがとう。尋ねた後に私が発見したのは、少なくとも Windows 7 では、おそらく他のバージョンの Windows では、書き込みを行う直前に CD ドライブを排他的にロックすることです。これについては、MSFT の IMAPI リファレンス dox で説明されています。これは、ファイル エクスプローラーだけでなく、ほぼすべての書き込みアプリで実際に行われ、複数のことが書き込みプロセスを台無しにするのを防ぎます。

イベントは cdrom によって ID コード 133 でシステムに送信されます。これを監視して、いつ書き込みが開始されたかを検出できます。このイベントは、OPで説明されているような他のものではなく、書き込みが開始されたときにのみ生成されるようです。

次のコード スニペットはイベント リスナーをアタッチし、イベントが表示されると反応します。

私はPowerShellやWindowsについてよく知らないので、この例をより良くするための提案があれば歓迎し ますが、これは機能しているようです。

$WMI = @{
    Query = "select * from __InstanceCreationEvent 
        where TargetInstance isa 'Win32_NtLogEvent' 
        and TargetInstance.logfile = 'System' 
        and TargetInstance.SourceName = 'cdrom' 
        and TargetInstance.EventCode = '133'"
    Action = {
    write-host "CD Burn started"
    }
}
$Null = Register-WMIEvent @WMI
于 2016-03-16T08:32:07.867 に答える
0

書き込み操作のステータスを監視できますが、それは独自のアプリケーションでのみです:イベントによる進行状況の監視

いくつかのインターフェイスを使用すると、進行状況情報を受け取るイベント ハンドラーを実装できます。たとえば、イベント オブジェクトをデータ ライタにアタッチして、書き込み操作のステータスを受け取ることができます。

ただし、事前書き込みアクションはありません。

他の誰かによって焼かれたデータを前処理するためのフックやコールバックはありません

IMAPI システム全体を監視するために私が考えることができる唯一のことは、DLL 呼び出しをフックすることです。

MadChook を使用して COM インターフェイス メソッドをフックすることは可能ですか? 実際にやりたいことは、CD を書き込むための IMAPI インターフェイス (IDiscMaster) をフックすることです。そのインターフェイスの RecordNow メソッドをフックしたいと思います。現在、このインターフェイスは imapi.exe を介して実装されており、エクスプローラーはプロキシ "Actxprxy.dll" を使用してこのmentod へのプロセス外呼び出しを行います。

CoCreateInstance をフックし、IDiscMaster のすべてのメソッドをラップすることで問題を回避しましたが、エクスプローラーが Cocreateinstance を何度も呼び出すと、フックに多くの不要なヒットが発生します。

WindowsエクスプローラーでCDの書き込みを監視する簡単なプログラムを書いています。XP で IDiscMaster::RecordDisc と IDiscFormat2Data::Write をフックしたところ、正常に動作しました。しかし、ライブ ファイル システムとして CD を作成すると、監視されません。

  1. どの関数をフックする必要がありますか?
  2. ICDBurn::Burn をフックしました (この関数には、ICDBurn の vft からのオフセットが 0x10 あります)。クリックするメニューをポップアップするたびに、エクスプローラーが失敗し、ウィンドウがシャットダウンします。エラー コードは STATUS_STACK_BUFFER_OVERRUN です。

しかし、これはエラーが発生しやすく、特定のスキルが必要です。

于 2016-03-15T13:38:11.463 に答える