Articles of 驱动程序

非分页内存指针

我有2个结构声明: struct irp_list { IRP *irp; LIST_ENTRY lh; }; 和 struct dev_info { … LIST_ENTRY lh; … }; 内部DriverWrite函数(IRP_MJ_WRITE)我这样做: struct irp_list *il; struct dev_info *di = (struct dev_info*)device->DeviceExtension; if (!(il = ExAllocatePool(NonPagedPool, sizeof(*il)))) { ret = STATUS_NO_MEMORY; DbgPrint("[uart] UartWrite can't handle irp…\n"); goto error; } il->irp = irp; // store DriverWrite irp InsertTailList(&di->lh, &il->lh); // […]

以编程方式安装筛选驱动程序?

我正在尝试编写以编程方式安装NDIS 6.0轻量级筛选器驱动程序的C ++代码。 在审查了WinDDK,在线示例和MSDN文档后,我最终得到了下面的代码示例。 ************** hr = InstallSpecifiedComponent( ModuleFileName, L"MS_NdisLwf", &GUID_DEVCLASS_NETSERVICE ); ************** hr = HrInstallNetComponent( pnc, lpszPnpID, pguidClass, lpszInfFile ); ************** if ( !SetupCopyOEMInfW(lpszInfFullPath, DirWithDrive, // Other files are in the same dir.as primary INF SPOST_PATH, // SPOST_NONE, //First param is path to INF 0, // Default copy style NULL,// Name of the INF […]

24位USB采样率支持

我的问题和这个问题很相似: 链接 ,但是我不能发表评论。 我正在实现一个声卡的PIC32,现在我有一个工作的USBaudiostream,支持32位和48kHz采样率的16位。 我现在想改变位深度为24位,所以我改变我的USB描述符为: bSubFrameSize = 0x03, // 3 bytes per sample bBitResolution = 0x18, // 24-bit resolution 当我这样做的时候,他的位分辨率被改变了,但是在麦克风的属性中,我可以改变采样频率的下拉菜单是灰色的。 我没有改变terminal描述符中的任何地方,32kHz和48kHz仍然被支持。 我的USB拓扑结构有一个audio控制接口,有两个单元,两个audiostream接口,用于stream入和输出。 Marc O在他的inputterminal中回答了他的问题,我试图改变wChannelConfig但是我不工作。 我曾尝试卸载和安装设备驱动程序,但不起作用。 我还需要在描述符中进行更改,以便能够select采样频率? 谢谢 :) 编辑:添加描述符代码和描述的进度 当我改变通道的数量为2,并做了wChannelConfig = 0x03 -> right + Left Front ,我看到他的画面上的字段更改为:“2通道,24位,48000赫兹(工作室质量)”,但它仍然没有使下拉菜单白色,我不能改变采样率。 下面我添加了audiofunction描述符: //CD 0x09, // Size : 9 Bytes USB_DESCRIPTOR_CONFIGURATION, // Configuration Descriptor (0x02) 0x10, // Total length […]

我可以将Linux DMA驱动程序移植到Windows吗?

我想在Windows上运行它,而不会有重大的变化。 我希望,我只能改变标题和相应的function。 http://www.alterawiki.com/wiki/File:G2x4_avmm_dma_Linux.tar.gz

运行需要“安全消息”的命令行(cmd)

我想在c#程序中运行命令行pnputil 。 该程序需要安装USB驱动程序。 我知道如何在C#程序中运行CMD,但我有一个不同的问题: 我想要安装的驱动程序没有Windows的权限。 如果我通过“设备pipe理器 – >更新驱动程序”安装驱动程序并select驱动程序的path,我会从“windows无法validation此驱动器软件的发布者”的窗口中收到“安全消息”,并让我select是否安装驱动程序或不(当然,如果我select安装 – 安装成功)。 如果我从cmd pnputil -a <path_name_inf>运行命令,我也会得到这个消息,我可以安装驱动程序。 但是,当我尝试通过C#程序运行命令 – 该程序运行,但没有安装驱动程序(我也没有得到这个消息)。 我的代码在C#中: System.Diagnostics.Process process = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; startInfo.FileName = "cmd.exe"; startInfo.Arguments = @"/C Pnputil -a <path_name_inf>"; process.StartInfo = startInfo; process.Start(); 我怎样才能做到这一点?

安装Moto X 2nd Gendebugging驱动程序

我有一个Windows 7 x64终极电脑,我想在debugging模式下连接我的Moto X 2nd Gen(XT1097) ,所以我可以开发一些应用程序。 问题是,Windows无法find我的Moto X的驱动程序。我已经下载摩托罗拉设备pipe理器 (版本2.4.5)应该有所有的驱动程序,但仍然我的Windows找不到驱动程序。 之前有人问,是的,我有我的手机设置启用debugging。 所以这里有趣的部分…..我已经尝试了与另一台Win7x64旗舰版真机和一台虚拟机(在我自己的电脑中运行)相同的事情。 起初,Windows无法安装debugging驱动程序…但后来我下载摩托罗拉设备pipe理器,它安装了debugging驱动程序,我能够使用手机进行开发。 奇怪的是,当我把手机连接到我的电脑时,它安装了所有的媒体驱动程序,但不是debugging的驱动程序,这就是我的手机如何列在我的窗口的设备pipe理器下 : 但是在所有其他两台电脑(其中驱动程序已成功安装)中,这是我的电话列表,在我安装摩托罗拉设备pipe理器(包含所有驱动程序)之前: 这就是驱动程序安装后的列表: 所以,为了试图解决这个问题,我试图强制驱动程序的安装。 我在“C:\ Program Files \ Common Files \ Motorola Shared \ Mobile Drivers \ Drivers”下find了驱动程序,在motoandroid2.inf里面我find了一个名为“Motorola ADB Interface”的驱动程序,甚至我的手机的VID / PID都在里面相同的驱动程序的文件!…… 但它没有工作! 我仍然不能在debugging模式下使用这款手机,我不能让Android Studio在连接时看到,我也尝试使用本教程改变Google的默认驱动android_winusb.inf包括我的手机,但是没有任何反应。 有没有人有什么线索? 我迷路了,老实说,我不想因为这个而格式化我的电脑。

如何正确使用ExAllocatePoolWithTag,以便它不返回STATUS_INSUFFICIENT_RESOURCES?

我正在编写IO筛选器驱动程序的内核模式testing。 当我运行我的testing,他们都通过,但如果我连续运行他们3次,testing开始失败。 我把问题缩小到了一段时间后开始返回STATUS_INSUFFICIENT_RESOURCES ExAllocatePoolWithTag 。 为了重现这个问题,我写了一个专门的testing static void __stdcall TestFoo_StressLoad() { int i; for(i = 0; i < 100; i++) { CFIX_ASSERT(QueueInitialize() == 0); // Soon returns STATUS_INSUFFICIENT_RESOURCES CFIX_ASSERT(QueueDestroy() == 0); } } 我的使用模式是: 分配内存( ExAllocatePoolWithTag ) 执行单个testing 释放内存( ExFreePoolWithTag ) 我的问题是:如何正确使用ExAllocatePoolWithTag以便它不返回STATUS_INSUFFICIENT_RESOURCES ? 这里是QueueInitialize和QueueDestroy int QueueInitialize() { SIZE_T poolSize; poolSize = sizeof(Event) * 1024; Queue […]

如果标记为RWX,可丢弃部分对内核驱动程序有什么影响?

我对PE文件部分标志中的DISCARDABLE标志感兴趣,特别是在Windows驱动程序(在这种情况下为NDIS)的情况下。 我注意到INIT部分在我正在审查的驱动程序中被标记为RWX,这看起来很奇怪 – 好的安全实践说你应该采用W ^ X策略。 该部分的转储如下: Name Virtual Size Virtual Addr Raw Size Raw Addr Reloc Addr LineNums RelocCount LineNumCount Characteristics INIT 00000B7E 0000E000 00000C00 0000B200 00000000 00000000 0000 0000 E2000020 特点映射到: IMAGE_SCN_MEM_EXECUTE IMAGE_SCN_MEM_READ IMAGE_SCN_MEM_WRITE IMAGE_SCN_MEM_DISCARDABLE IMAGE_SCN_CNT_CODE INIT部分似乎包含驱动程序条目,这意味着它可以用来确保驱动程序的入口函数驻留在非分页的内存中,而其余的代码允许分页。 虽然我不完全确定。 我可以在驱动程序代码中看到没有证据显示开发人员显式设置页面标志,或者强制驱动程序进入单独的部分,因此看起来像编译器自动执行的。 我还手动翻转驱动程序二进制文件中的可写标志来testing它,并且它没有写入启用就可以正常工作,这意味着不需要RWX。 所以,我的问题是: 什么是Windows驱动程序的上下文中使用的INIT部分,为什么它被标记为可丢弃? 在Windows内核中如何处理可丢弃的部分? 我对ReactOS如何处理它们有一些了解,但仍然很模糊,而且没有太大的帮助。 为什么编译器将驱动程序条目移到INIT节? 为什么编译器会将该部分标记为RWX,RX是否足够,RWX可能构成安全问题? 我到目前为止看过的参考文献: 将某个部分标记为DISCARDABLE时发生了什么? – 新旧事物 Windows可执行文件 – x86反汇编手册 […]

如何发送IOCTL的所有驱动程序在C中的窗口

有人可以提供一个示例C代码,列出所有设备的名称,我可以用Createfile()打开? 我总是得到错误代码3:path不存在 示例代码不起作用: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> #include <regstr.h> #include <devioctl.h> #include <usb.h> #include <usbiodef.h> #include <usbioctl.h> #include <usbprint.h> #include <setupapi.h> #include <devguid.h> #include <wdmguid.h> #pragma comment(lib, "Setupapi.lib") int main(void){ HDEVINFO deviceInfoList; deviceInfoList = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT); if (deviceInfoList != INVALID_HANDLE_VALUE) { SP_DEVINFO_DATA deviceInfoData; deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); for (DWORD i […]

FILE_FLAG_NO_BUFFERING如何与通信设备打开的句柄交互?

就像标题所说,我正在编写一个networking程序,在这里我使用CreateFile打开一个networking驱动程序的句柄,而且我一直在尝试使用NO_BUFFERING标志。 大多数文档甚至不会提及通信设备使用的,以及那些可以做的(也就是MSDN参考等),只是简单地提到你可以。 有没有人有任何想法这可能会影响与设备的沟通?