我正在用C编写Windows内核驱动程序,我需要通过串行设备(特别是COM3)发送和接收数据。我被困在CreateFile、ReadFile和WriteFile函数上,因为这些似乎是在内核中不起作用的用户空间函数。我错了吗?或者,如果没有,从Windows内核中打开和使用串行端口的最佳方法是什么?非常感谢。 最佳答案 你需要ZwCreateFile,ZwReadFile和ZwWriteFile在内核模式下工作的函数。 关于c-在Windows内核中打开、读取和写入串行端口,我们在Stac
我们正在使用IFSKit为Windows开发文件系统。我们开始调查一个性能问题,该问题导致我们的文件系统I/O在通过网络共享时变得非常慢。在使用Sysinternals中的FileMon和TCPView查看之后我们发现,如果共享NTFS/FAT,则SMB客户端和服务器以60Kblock传输I/O,而在共享我们的文件系统时,它使用4Kblock。这两个block大小对应于SMB“核心”和“原始”模式-对此进行了解释here由微软。问题是我们无法弄清楚在我们的文件系统中是什么导致Windows共享服务器(srv.sys)为我们的文件系统选择核心模式(4K)而为NTFS和FAT选择原始模式(
我环顾四周,似乎无法直接回答这个问题。我是业余程序员,我在Windows驱动程序方面做了大量工作,并为WindowsXP编写了我自己的个人“防病毒”驱动程序。所以不要误会我的意思,我不在任何软件开发公司或类似公司工作。我的问题是:就Windows7x64而言,是否有任何可能的合法方法可以用来释放我的驱动程序的签名,而该驱动程序仅供我个人使用?是的,我很清楚我可以对我的驱动程序进行测试签名并在Windows测试模式下在虚拟机中运行它,我经常这样做。但是,如果您在测试模式下使用过Windows,就会知道存在一些主要缺点。总而言之,我(一个业余爱好者)是否可以发布一个驱动程序供我个人使用,而
我正在尝试在用户进程和内核之间使用共享内存。选项一-让内核创建部分并让用户模式应用程序按名称“Global\my_mem”打开内存。它仅在只读模式下工作。当我尝试使用FILE_MAP_WRITE打开部分时,它拒绝访问(5)。不确定如何授予访问权限或修改DACL。选项二-通过IOCTL传回句柄。这是有问题的,因为在KERNEL中打开的部分句柄是0xFFFFFFFF80001234。我的理解是,设置了任何高位的句柄不能在用户模式下使用。特别是如果应用程序是32位的:)最初我预计该部分句柄会有点类似于内核文件句柄,我将能够使用它。在内核态和用户态之间建立共享内存channel的正确方法是什么
我正在从事一个项目,以异步方式将Windows写请求从一个硬盘实时复制到另一个硬盘。刚接触windows下的内核态驱动开发,想做的是监听IO请求。我进行了很多搜索,但没有按应有的方式记录此区域。我进行了搜索并找到了4个线索(但肯定没有一个是最好的开始选择)IRPWindows驱动程序使用IO请求数据包在它们与操作系统之间进行通信,但我能否监控硬盘驱动程序使用的IRP?安全性如何?Windows过滤器驱动程序系统过滤驱动级别从上到下有很多,应该用哪一个?我能过滤硬盘驱动程序使用的IO吗?IOHookWindows防病毒软件使用此技术来挂接IO并检查文件。在我的情况下使用它可靠吗?内核事件
我想在Windows10x64上使用相应的服务例程注册一个新的软件中断,这可能吗?是否提供了API来执行此操作?我是否必须使用未记录的功能手动完成此操作,这样做会触发内核补丁保护吗? 最佳答案 注册软件中断会导致针对正在运行的操作系统修改中断描述符表(IDT)。Windows具有内核补丁保护(KPP)/PatchGuard,可保护内核代码和数据结构(例如IDT)不被篡改。这包括防止添加新的中断描述符条目、删除它们以及修改描述符表。这也意味着不能修改中断描述符条目。开发人员这样做的原因是将中断重定向到新的中断服务例程,也称为中断Hoo
我正在编写一个内核,我有几个friend和我一起参与这个项目。我们一直在使用DJGPP编译该项目一段时间,但我们在以这种方式编译时遇到了一些跨平台兼容性问题,导致我在该项目上的主要Partnet无法在WindowsXP上编译。(DJGPP的GCC在WindowsXP上遇到超过127个参数列表的问题,但在Vista上没有遇到相同参数列表的问题。所以,这一次,Vista在某些方面比XP工作得更好。o.O)任何人,而不是试图找出一些肮脏的hack来使该死的东西用DJGPP编译,我们决定我们要完全放弃DJGPP并使用不同版本的GCCforwindows。问题是,MinGW(据我所知)不允许我们
我的很多问题都在这里得到了解决,非常感谢你们。我还想再问一个。:)我正在阅读有关的文章,它说:当我们想要访问现有内核对象(而不是创建一个新内核对象)时,我们必须指定我们打算对该对象执行的操作。如果允许我们使用此类操作进行访问,则会返回内核对象的句柄。...如果返回的句柄用于调用需要与您请求的权限不同的API,则会发生拒绝访问错误。据我所知,句柄只是一个普通的整数,它只是进程句柄表的索引,句柄值不能提供更多信息。如果我们已经获得了内核对象的句柄,系统如何检测到我们将它用于我们请求之外的其他操作?一个内核对象可以有多个句柄,这些句柄的拥有者可能有不同的访问类型。系统在哪里存储这些不同的访问
人们能否就我需要研究的主题给我一些建议(没有双关语意)以便能够做到这一点?我不是真正的Windows专家,但我能很快掌握新概念。我看到了MarkRussinovich和BryceCogswell写的进程监控程序:http://technet.microsoft.com/en-gb/sysinternals/bb896645它可以查看内核中注册表键值发生的所有事情。过去,我已经能够使用C#和用户级注册表访问来执行此类操作,但我无法使用从codeproject获得的包装器套件访问内核。人们可以帮助我了解我应该从哪里开始吗?我想我是在寻求更多有关Windows/OS方面的帮助。这样做的原因:
我在Windows7/8x64上运行应用程序时遇到问题,但我可以在Windows10x64上启动。在VisualStudio中,平台目标设置为任何CPU,但它对我没有帮助。我在我的开发机器操作系统上构建的应用程序:Windows10x64Windows日志应用程序错误:Faultingapplicationname:Trainingcharts.exe,version:0.4.3.18,timestamp:0x55f2b40fFaultingmodulename:KERNELBASE.dll,version:6.1.7601.18869,timestamp:0x556366fdExce