#1 楼
好吧,您的问题就目前而言有点宽泛,但让我们一一讲解。目前,通常(但并非总是)打印机驱动程序是用户模式驱动程序(UMDF),这意味着您正在寻找DLL。如果不是这种情况,您将在寻找某种.sys文件。多年来,Microsoft提出了许多“简化”的驱动程序模型。其中一些以用户模式运行,一些以内核模式运行。如果这是一台现代设备,并且供应商已更新了所有内容,则他们将使用用户模式驱动程序。假设您确实在使用USB打印机,则应该使用USBDeView看到它,这也可以帮助您识别驱动程序名称。或者,尝试使用更通用的DevManView。
如果您使用的是最新版本的Windows,则无法查看打印机属性并使用“共享”选项卡。在那里,至少可以看到已安装驱动程序的类型。我的其中一台打印机的示例:
配备了该信息,然后我们可以查看文件夹
C:\Windows\System32\spool\drivers
(%SystemRoot%\System32\spool\drivers
)并找到实际的驱动程序(还请检查prtprocs
子文件夹而不是drivers
)。此外,您可以使用Windows内置的注册表编辑器查看
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers
,以查找有关驱动程序的详细信息。特别是在与所讨论的打印机相对应的子项中,您应该找到一个名为Print Processor
(类型字符串)的值,其中包含打印处理器的名称。在我的情况下是ssa7mPC
,而这又可以追溯到DLL C:\Windows\System32\spool\prtprocs\x64\ssa7mpc.dll
。从那时起,您的问题还不清楚您要实现什么。即您是要拦截某些内容还是要对有线协议进行反向工程,还是只关心能够与打印机通信等等?(因此,在您澄清之前,我也无法提供更多详细信息)。 br />
由于您也没有提供有关打印机型号的信息,因此很难提供除我刚刚提供的信息以外的任何有意义的细节。
#2 楼
我对linux较为熟悉,但是一些步骤相似。要找到驱动程序在哪里,我相信如果您插入设备并进入设备管理器,请在设备上单击鼠标右键,然后单击属性,即可找到驱动程序的路径。要对协议进行反向工程,您可以结合使用驱动程序拆卸(使用雷达,IDA或其他工具)和USB嗅探/捕获功能。我通常发现在运行虚拟机时捕获USB流量更容易。 Wireshark既可以在Linux上也可以在Windows上运行,请参见本页。
如果您的设备使用USB上的串行或SCSI之类的已知协议,它将极大地帮助您,否则您将必须了解USB,一个好的开始。
评论
请参阅需要USB游戏鼠标的帮助以获取一些想法,首先您需要登录USB协议(那里有一些SW工具),而不是需要编写与打印机匹配的驱动程序(可能是CDC类),然后在Windows端提供功能。尝试使用JUNGO或WinUSB IIRC,这些应该可以提供所需的全部功能,而无需实际使用内核模式编码,否则,您现在需要使用MSVC ++和DDK编写驱动程序,或者这些天他们如何命名。从win7 x64提防,有强制驱动程序签名