问题标签 [device-driver]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
device-driver - 协助调试 FreeBSD 驱动程序(以太网问题)
我刚刚安装了 pfSense(一个 FreeBSD 发行版)并且我的以太网适配器出现问题 - 我似乎能够让它进入一种状态,尽管有 ARP 表等,但我无法 ping 任何机器......一切都是正确的(在我正在 ping 的机器上,我可以看到数据包到达并在 Wireshark 中发送响应,但远程机器什么也没有得到)
对操作系统开发感兴趣且知识有限,我有点想尝试调试它,但在很多方面我不确定从哪里开始:
- 如何获取我正在使用的驱动程序的源代码?它们会成为 FreeBSD 源代码的一部分,还是会有一些外部项目?(或者我使用的驱动程序可能是Realtek发布的专有驱动程序,因此没有源代码)
- 就此而言,我如何识别我当前使用的驱动程序?
- 最后,关于如何调试内核级/设备驱动程序有什么好的资源吗?
(如果我问的是愚蠢的问题,或者我似乎对我希望通过调试实现的目标过于乐观,我表示歉意,但尽管我缺乏这方面的经验,但我认为自己是一个聪明的人,我必须开始某处!)
security - 如何实现/使用安全的“一次性”本地文件访问系统?
有人知道安全的“一次性”本地文件访问系统吗?或者如何创造一个?我意识到,如果要在系统上使用数据,那么它必须能够被读取,但我认为可能会严格限制数据的可用方式,并减少数据被复制和在其他地方使用的可能性。
这些是我的要求:
我想在 USB 记忆棒上存储一个“安全/加密”数据文件(可以是只读 CD/DVD,但如果读/写 USB 甚至是软盘更好)并且该文件能够被读取一次(并且主要只有一次),在逐块解码的基础上,一旦输入密码。文件内容可能是基本文本/xml(或文本编码数据),主要作为顺序流读取。数据(理想情况下)可以通过普通的 windows 文件访问方法读取,即:std 文件、FSO 对象(流和文本文件)、所有 BASIC PC (VB6/VB.NET) 文件处理方法,甚至 Excel 文本(导入)。是的,我知道这可能会破坏对象(因为这样的文件可以打开/保存),但我仍然想要这种可能性。最后,一旦满足“访问”标准,设备将阻止进一步访问。
只能在本地 PC 系统上访问数据。没有局域网,不支持设备共享。设备上的数据不应通过正常方式复制。如果可能,将使用常规方法或必要时使用特殊应用程序将数据写入设备。
为简单起见,只需一个密码、一个文件、一个用途和一个用户就可以了,但其他可能的增强功能包括:(如锦上添花)...
- 允许'n'打开
- 拥有多个密码 2 个或更多用户,单独行动
- 筒仓密码,让 2 个以上的用户一起签名以获得访问权限(或者甚至让 m 个以上的用户中至少有 n 个用户一起签名以获得访问权限)
- 密码提示应在第一个块访问时给出,与调用第一个块的应用程序无关
- 密码可以嵌入/自动
- 将访问权绑定到指定的机器/mac/ip/磁盘序列号(或其他机器代码)
- 绑定对指定程序/应用程序的访问
- 如果可能,删除并安全覆盖数据文件
我这样做的第一个猜测表明,它需要一个“伪设备”驱动程序,该驱动程序将作为标准可移动设备驱动程序的扩展(或替代)出现。驱动程序将逐个扇区处理每个文件块,如果未经授权,则拒绝提供进一步解码的块。设备不应提供正常的目录列表,但可以向用户提供某种形式的内容摘要(可选)。
与 DRM 系统不同,我不想要任何形式的在线访问/身份验证(但会考虑),我更喜欢独立的系统。
我为这样的设备/系统寻找了很久很久,但还没有找到。大多数设备和系统工具(例如:Iomega/ironkey)似乎可以解锁对文件的访问,但没有限制,即:一旦解锁,read-many。
性能不是问题。缓慢的软盘读取率是可以的。加密方法是不可知的,任何相当强大的 40 位 +(128 位)都可以。我不能告诉你数据是什么或它的用途,我只需要一种方法将数据提供给某人并尽可能限制其使用以及他们可以用它做什么。它是保护机密数据的真正要求,不适用于 DRM 或 MP3/视频或类似内容。
我是一名“办公室”开发人员,对设备驱动程序或 DRM 并不十分熟悉 - 现在我应该从哪里开始这样的项目?joe-public 已经有什么可用的了吗?
谢谢 - 蒂姆。
PS:更新
我应该指出,我只是希望在我们自己和一个特定的指定服务提供商之间传递数据。我不希望他们复制我们提供的数据。它将被使用一次以支持“单一”一次性过程,然后完成。由于数据是“流式传输/读取”的,因此应该“使用”。如果该过程失败,我们将向服务提供商重新发布数据。数据仍然是我们的财产,不会被出售/许可。
我确实意识到没有解决方案是万无一失的,但风险/回报比应该会阻止随意破坏系统的尝试。这些数据没有明确的商业价值。
PPS:这是一个真正的要求……你会怎么做?
从@eriksons 深思熟虑的回答上的赞成票来看,你们是在说“不可能/不要打扰”——但除了亲自监督数据是否按照我们的意愿使用之外,你们会怎么做?
winapi - 原始 PDO 将 IOCTL 发送到上层过滤器驱动程序 (kbfiltr/moufiltr) 以启用/禁用设备
我对驱动程序开发很陌生,并试图编写一个简单的过滤器驱动程序来启用或禁用键盘或鼠标设备。如果我能让它工作,我想在插入鼠标时使用它来禁用笔记本电脑上的触摸板。我意识到可能已经有软件可以做到这一点,但我对设备驱动程序真的很感兴趣并想要自己学习如何做到这一点。
我正在使用 WDK 附带的kbfiltr和moufiltr示例,它们作为上层过滤器驱动程序安装。kbfiltr 示例创建了一个可以由用户模式程序枚举和连接的 pdo。这允许我将 IOCTL 发送到由KbFilter_EvtIoDeviceControlForRawPdo处理的 PDO 。但是,当我尝试做任何与过滤器驱动程序相关的事情时,比如调用KbFilter_EvtIoInternalDeviceControl这样我就可以做类似的事情
我得到一个蓝屏死机。不是上面的代码,在 vanilla 示例中,设置为 null 被注释掉,只是调用 Kbfilter 会导致 BSOD。我试图直接在 PDO 中设置设备扩展,但这也会导致 BSOD,大概是因为它是 PDO devExt,而不是 kbfiltr 的?
(相关:从 BSOD 获取堆栈跟踪的好方法是什么?我使用 Virtual PC 作为我的测试环境和未经检查的 XPSP3 构建)
我不能将 IOCTL_INTERNAL_KEYBOARD_DISCONNECT 直接发送到驱动程序堆栈(我知道输入设备一次只接受一个连接?)因此需要原始 PDO。我真的只需要发送两个 IOCTL(启用和禁用),我想我只需使用键盘断开和连接,因为这些已经定义。
如果我对这些假设中的任何一个有误,请告诉我,我知道我对此确实是个菜鸟,但我还没有找到很多关于通过 PDO 进行这种通信的文档。
filesystems - 观察文件系统 read() I/O 的进程(和子进程)的最佳方式?
我想开发一个像这样工作的命令行程序:
我的程序 /c [some_executable_here]
它启动了用户指定的命令并“监视”进程(和任何子进程)以进行读取 I/O,当该程序退出时,打印“读取”的文件列表(最终导致 read()系统调用)。
我最初的实施操作系统是 Windows,但我也想在 Linux 上做同样的事情。
到目前为止,我看到的所有类似 FileSystem 的 API 都是针对监视目录(或单个文件)而不是进程,所以我不确定最好的方法是什么。
编辑:我正在寻找如何最终实现此功能的代码示例(或至少指向我可以遵循的 API 的指针)以在 Windows 和 Linux 上执行此操作。
同样要明确的是,它不能使用诸如 OpendFilesView、procmon 或来自某些系统级工具的 grepping 字符串之类的方法,这些工具无法从执行的开始和结束通过 ID(和任何子进程)明确识别进程; IOW 通过搜索“foo.exe”并得到错误的结果,不会涉及任何时间问题和误报的可能性。
linux - 如何将 /dev/ 中的设备与实际驱动程序相关联
我试图了解设备驱动程序在 linux 中的工作原理。
我有一个设备节点如下(主编号89,设备名称i2c-0)
/li>我有带有名称的 i2c 驱动程序,
i2c.ko
我将insmod i2c.ko
在启动期间执行此操作。在驱动程序中,初始化期间将调用以下函数:
/li>
我的问题是:当用户调用open("/dev/i2c-0", O_RDWR)
时,内核如何知道使用哪个驱动程序?我注意到设备名称是i2c-0
,但注册的设备名称是i2c
。是因为它们使用相同的主编号,内核可以使用正确的驱动程序吗?
flash - 通过 Web 门户进行外围交互
好的,我很确定这是一个愚蠢的问题,所以我提前道歉。
我从来没有用 ActiveX 做过任何事情,我也没有真正陷入使用 Flash/Silverlight 可以做的事情,但我想知道的是这些技术中的任何一种都可以用来与连接到机器的外部设备通信吗?
我想我真正要问的是:如果我有一台连接了非标准设备的机器,即条形码阅读器。是通过离线可安装软件访问此设备的唯一方法吗?
干杯,克里斯。
windows-xp - 在 Windows XP 上静默安装设备驱动程序
有没有办法以编程方式静默安装设备驱动程序而无需 cat 文件且无需在 Windows Xp 上连接设备?
我正在使用 Windows Driver Kit 中的 DriverPackageInstall 函数。而且只有连接了设备才能安装驱动程序。在其他情况下,我收到一个错误:ERROR_NO_SUCH_DEVINST。但该方法适用于 Windows Vista。
另一个问题是由于 cat 文件丢失而要求用户继续或停止安装的警告对话框。它显示在两个操作系统上。
有任何想法吗?
device-driver - 希望学习编写 NDIS 或 TDI 驱动程序
谁能推荐一本好书来逐步开发这种用 C 语言编写的驱动程序?我正在寻找一本适合初学者的书。如果有关于如何做到这一点的在线资源从头开始解释该过程,将不胜感激。
windows - 自动化 Win32 驱动程序测试
有谁知道部分或完全自动化驱动程序测试安装的方法?
我是驱动程序开发的新手,并且习惯于在高级语言中使用更多的测试驱动方法,因此转移到我无法轻松测试的那种环境对我来说是一个进步。我正在为我的测试环境使用 Virtual PC,目前必须重置它,打开设备管理器,选择设备,点击一堆“你真的确定你不想安装这些系统驱动程序之一”类型对话框,然后最后在主机中重新启动 WinDbg 时重置测试环境,就像测试环境正在启动一样......啊。
在重复这个过程很多很多次之后,肯定有更好的方法来做到这一点吗?商业驱动程序开发人员使用哪些工具/方法/技巧在测试环境中运行他们的驱动程序?
请注意,这与单元测试驱动程序无关,我还没有到那个阶段,也不知道它是否可能。这只是要启动一个附加了 WinDbg 的测试环境,以确保我可能所做的一些小改动符合我的预期。