Articles of 驱动程序

Windows如何唯一识别USB设备?

即使从USB设备提供的设备数据对于所有设备都是通用的,Windows如何唯一地标识USB设备? 为了说明这一点,Windows可以区分同一型号的戴尔键盘的两个实例,而不需要键盘提供任何唯一的序列号。 初始化USB设备时,Windowssearch的专有数据字段是什么?

为什么我们可以从DISPATCH LEVEL或以上的非分页池访问内存

据我所知,如果IRQL级别是调度,那么你可以从非分页池访问内存。 如果我们将尝试从分页池访问内存。只想知道为什么?

“bcdedit / dbgsettings NET HOSTIP:123.123.123.123 PORT:50123”无效

要启用内核debugging使用LAN(我正在使用适当的LAN板),根据MSDN ,我应该input: bcdedit /dbgsettings NET HOSTIP:123.123.123.123 PORT:50123 但是我得到一个错误: The debugger type specified is not valid. … 怎么来(Win7x64)?

Windows上的驱动程序authentication

我正在开发在Windows上使用的设备驱动程序。 驱动程序是否必须经过Microsoftauthentication才能安装? 有什么我应该知道的陷阱? 这适用于Windows XP,Windows Vista和Windows 7。

如何在ring0中使用winapi函数(内核模式)?

我不能在驱动程序中调用FileTimeToSystemTime()方法。 错误是: 错误C4013:'FileTimeToSystemTime'未定义; 假设extern返回int 。 另外我不能包含windows.h因为我已经包含了ntddk.h ,这会导致很多错误。 如果我声明它为BOOL FileTimeToSystemTime(IN const PFILETIME, OUT PSYSTEMTIME); 在头部我得到下一个错误: 错误C2061:语法错误:标识符'FileTimeToSystemTime' 错误C2059:语法错误:';' 错误C2059:语法错误:'type' 错误C4013:'FileTimeToSystemTime'未定义; 假设extern返回int 最后,如果我为这个方法写一个实现: BOOL FileTimeToSystemTime(const PFILETIME pFileTime, PSYSTEMTIME pSystemTime) { CALL_ENTRY long long tmp; memcpy(&tmp, pFileTime, sizeof (FILETIME)); time_t aTime_t = tmp / 10000; tm aTm; if (!gmtime_r(&aTime_t, &aTm )) return FALSE; pSystemTime->wYear = aTm.tm_year + 1900; pSystemTime->wMonth […]

为Windows开发内核补丁或驱动程序?

大约需要多长时间为Windows NT内核/系列内核开发内核补丁或驱动程序,这将引入新的function,或者取代现有的function? 例如,添加不同的encryptionalgorithm,或者实现某种新的安全模型。 实际编写内核补丁和驱动程序之间有什么优点/缺点? 一个驱动程序理论上可以绕过,内核补丁不能? 我知道Windows内核是专有的,它很难为它写一个内核补丁,但这正是几家公司,特别是AV公司,没有微软的合作,所以这是可能的… …

Windows I / Opipe理器 – IRP的类似于类似于类似于书写的分类

我正在写一个Windows文件系统微filter驱动程序 ,必须根据其types(读/写)在预操作callback 中使 I / O请求包(IRP)失效。 如果操作是类似读取的 (只读取数据)或写入 (修改磁盘上的数据 – 写入,删除,格式化等),我怎么能从callback参数(或其他地方)中find? 这里是主要的IRP代码列表。 我正在考虑像这样的东西: Data->Iopb->TargetFileObject->ReadAccess Data->Iopb->TargetFileObject->WriteAccess 但是我不确定,我认为这些只能在术后callback中使用。 这个文档真的很麻烦。 代码示例进一步说明: FLT_PREOP_CALLBACK_STATUS Fail ( __inout PFLT_CALLBACK_DATA Data, __in PCFLT_RELATED_OBJECTS FltObjects, __deref_out_opt PVOID *CompletionContext ) { FLT_PREOP_CALLBACK_STATUS status = FLT_PREOP_SUCCESS_NO_CALLBACK; //******************************************************************** if ( IS_WRITE_LIKE(Data, FltObjects) ) { // ??? HOW DO I FIND OUT ??? //******************************************************************** if( FLT_IS_FASTIO_OPERATION(Data) ){ […]

我怎么去写一个蓝牙设备的Windows驱动程序?

我正在寻找一些关于编写设备驱动程序的build议/input。 我以前从来没有为Windows写过一个,更不用说蓝牙了。 你能推荐一本书或网站或什么让我开始? 我有Windows驱动程序工具包,其中的例子,但出了一些地方开始,我死在水中。 具体细节 :我的朋友给我他的Mac Magic Mouse。 我有一个Windows 7的机器。 将鼠标设置为通用HID设备,它可以作为没有滚动的双button鼠标,运动平滑,加速度在Windows鼠标中是您期望的。 鼠标实际上有一个相当好的lpi分辨率,使其非常敏感。 有可用的mac驱动程序,从训练营提取。 他们的工作。 光标会随机冻结或停止对缓冲的鼠标移动作出响应,然后一旦导致失速停止,则跳跃。 作为一个附加的触摸,mac驱动程序使得光标像在mac上一样移动,以对数加速度,这将完全抛弃任何windows用户。 用干燥器你可以得到垂直和水平滚动,但就是这样。 没有多点触控function,您不能更改任何行为,如加速。 没有多离合器的窗口,或其他第三方软件多点触摸鼠标。 所以我想我会努力在这个东西在Windows中做我自己的驱动程序和多点触摸function。 我知道mac将永远不会支持它正确的Windows和windows不会写有自己的驱动程序,直到有一个原因。 另外,如果有人知道其他人试图做相同或相似的事情,把我指向他们。

Windows 7驱动程序挂钩

我的问题是关于Windows 7的驱动程序开发。 我需要拦截系统调用驱动程序。 理论上在这种情况下,build议创build一个filter驱动程序,但在我的情况下,驱动程序不公开一个filter兼容的接口。 确切地说,这是一个Vista / 7显示微型端口驱动程序。 显示驱动程序作为标准的WDM驱动程序加载。 在它的DriverEntry ,预计会调用一个DxgkInitialize系统例程(我猜想是由win32k.sys导出的)。 我的目标是拦截这个电话。 任何人都可以build议我任何有用的来源,我可以find有关如何实现这一目标的信 胜利的关键是可能用我的函数的地址replace驱动程序可执行文件导入部分中的DxgkInitialize 。 问题是这应该在加载可执行文件之后完成(必要时映射+重新定位+准备好所有导入表项),但是在调用驱动程序的入口点之前 。 我想到了以下select: 将可执行文件映射到系统内存中,并手动“准备”(即执行加载程序的工作)。 然后修补所需的function并运行入口点。 用一些努力ZwSetSystemInformation可以用于模块加载(?) 也许补丁出口DxgkInitialize模块的出口部分。 这样加载器会自动将每个加载的模块redirect到我的手中。 提前致谢。

为什么设备驱动程序会导致页面错误?

我有一个使用并行IO卡进行高速数据传输的Windows控制台应用程序。 (通用标准HPDI32ALT ) 我的进程是在用户模式下运行的,但是我确定在设备的API后面有一些内核模式驱动程序活动(PCI DMA传输,读取设备状态寄存器等)。工作模式大致如下: 在启动时:我从API请求一个指向IO缓冲区的指针。 在我的主循环中: 阻塞在设备缓冲区中等待空间的API(低水位) 用传输数据填充IO缓冲区 通过将指针传递给IO缓冲区来开始传输到设备(在此期间API使用PCI总线上的DMA将数据移动到卡上) 阻止API等待IO完成 应用程序似乎正常工作正常的数据速率和持续的吞吐量很长一段时间,但是,当我看在sys内部工具进程资源pipe理器的过程中,我看到大量的页面错误(~6K每秒)。 我正在移动〜30MB / s的卡。 我有足够的内存,并合理确信页面错误不是磁盘IO相关。 有什么想法可能会导致页面错误? 对于这个在接收模式下使用相同IO卡的应用程序,我也有一个接收端。 API的接收模式使用不会导致大量的页面错误。 将IO缓冲区移动到内核模式的行为是否会导致页面错误?