从文件资源管理器开始 CD 刻录时的 Powershell 事件



我一直没有成功地找到任何可靠的方法来检测CD/DVD刻录过程何时开始。 刻录工具将只是文件资源管理器。

我知道有一个事件日志"IMAPI CD 刻录 COM 服务已成功发送启动控件。

这样做的问题是,即使从未发生过刻录,也会触发此操作(以及相应的停止)。 似乎某些事情(如WMP)会在您初始化时触发该事件(单击刻录选项卡)。

我需要的是一种方法(wmi,imapi等),只要刻录过程实际开始,它就会通知我。

不幸的是,我不知道足够的powershell,甚至不知道从哪里开始寻找。 此时,我只是在黑暗中疯狂地谷歌搜索,希望有人做了一些足够接近我想要的事情,但还没有找到任何东西。

谢谢

您可以监视写入操作的状态,但只能在您自己的应用程序中: 监视事件进度

多个接口允许您实现要接收的事件处理程序 进度信息。例如,可以将事件对象附加到 用于接收写入操作状态的数据编写器。

但是,没有预刻录操作:

没有钩子或回调来预处理正在刻录的数据 别人

我唯一能想到的监视IMAPI系统范围的是挂钩DLL调用:

  • 挂钩 COM 接口方法

是否可以使用 MadChook 挂接 COM 接口方法?实际上 我想做的是挂接IMAPI接口(IDiscMaster) 写光盘。我想为该接口挂上方法 RecordNow。 现在这个接口是通过 imapi 实现的.exe资源管理器会执行 使用代理"Actxprxy.dll对此门托德进行进程外调用

我已经通过挂钩共同创建实例并包装来解决这个问题 IDiscMaster的所有方法,但后来我最终得到了很多 不必要的命中我的钩子,因为资源管理器调用共同创建实例很多 次。

  • 如何在 Vista 中挂上实时 CD 刻录?

我正在编写一个简单的程序来监视Windows中的CD刻录 资源管理器。我钩上了 IDiscMaster::RecordDisc in XP 和 IDiscFormat2Data::Write,它工作正常。但是如果我像现场一样刻录 CD 文件系统,它不受监控。

  1. 我应该挂接哪个函数?
  2. 我钩上了ICDBurn::Burn(这个函数与ICDBurn的vft有0x10偏移量)。每当我弹出菜单点击时, 资源管理器失败,Windows将其关闭。错误代码为 STATUS_STACK_BUFFER_OVERRUN。

但这很容易出错,需要一些特定的技能。

感谢您的帮助。 自从询问以来,我发现至少在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

最新更新