问题标签 [windows-kernel]

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.

0 投票
2 回答
736 浏览

kernel - Windows 7 及更高版本操作系统中未使用的 Windows 内核 API - KeSetAffinityThread() 的替代品是什么

void KeSetAffinityThread(PKTHREAD pKThread, KAFFINITY cpuAffinityMask)例程在 Windows 内核中可用,其文档可以在 OS/2 内核文档中找到。而且 Windows 仍然在其内核中保留了这个 API。此 API 可用于设置任何线程的关联掩码。当系统中有超过 64 个处理器时,我正在寻找方法来执行此操作。

小背景 - 随着 Windows 7 中处理器组功能的引入,我们不能再安全地依赖 KAFFINITY,因此我不能使用上述 API,因为代码在超过 64 个处理器的系统上运行时将不可靠。我无法在 MSDN 中找到合适的替代品,MSDN 提供的 API 包括KeSetSystemAffinityThreadKeSetSystemGroupAffinityThread但它不符合我的目的,因为这些调用仅用于设置调用线程的亲和力。

我还看到了一个函数 -SetThreadAffinityMask()设置任意线程的亲和力,但这是一个用户级例程。我正在内核模式下寻找类似的东西。

0 投票
1 回答
103 浏览

windows - how to find the number of COM ports and their resources?

I am writing a serial driver for UART in windows just for learning purpose. More specifically in WDM. I will write both the bus driver and function driver.

Currently i am writing the bus driver. So my question is from where i can come to know in my driver that how many serial ports i have in my system, so that i can expose that number of PDO's from my bus driver?? And resources allocated to each port. Do i have to check some kind of registry or windows will provide some kind of structure.

Please help me!! Thanks in advance

0 投票
3 回答
171 浏览

c# - 使用 Win NT 内核 API 连接大文件

我一直在寻找一种将大文件(几千兆字节)连接在一起而不必重写其中一个文件的方法。我确信操作系统在操作主文件表时会在内部执行此操作。这纯粹是针对速度至关重要的内部应用程序,即使以数据完整性为代价(如果冒着未记录的 API 的风险)。该应用程序处理大量高带宽、多通道以太网数据,其中损坏的工作单元(在本例中为文件)不会对整体处理结果产生很大影响。

在合并文件A和的那一刻B,所涉及的工作量等于:A[Read] + B[Read] +C[Write]`。你们中的任何一位 NT 专家会阐明如何解决这个问题以直接进入 MFT 吗?

我无法获得有关要探索哪个 API 的任何线索,并且希望得到一些指示。尽管该应用程序处于托管状态,但我很乐意探索原生 API,甚至设置轻量级 VM 进行测试。

提前致谢。

0 投票
4 回答
8261 浏览

c++ - 我可以直接访问 Windows 内核系统调用吗?

我一直在研究 Windows 内部,最近才了解系统调用,我想知道是否可以像函数一样使用这些系统调用?我知道它们并不是真的要从外部访问。

例如:NtUserEmptyClipboard是Win32k.sys中的一个系统调用,它的地址是0x117f

如果我想像函数一样使用这个调用,我该怎么做?

0 投票
1 回答
1625 浏览

sockets - winsock 内核(WSK,而不是 winsock2)周围是否有套接字包装器?

我需要将 Windows 内核模式驱动程序从 IPV4 升级到 IPV4/IPV6,但使用 TDI 的现有内核模式套接字库不支持 IPV6。

所以我想将套接字库更改为“Winsock Kernel” http://msdn.microsoft.com/en-us/library/windows/hardware/ff571084(v=vs.85).aspx 注意:这不是winsock2 .

我开始进行必要的修改以使用 WSK 而不是 Storagecraft 的 Kernsock,但鉴于此驱动程序代码可在 Windows 和 linux 上运行,因此需要考虑很多。

我想知道是否有围绕 WSK 的内核模式套接字包装器可用,最好使用 BSD 或 winsock2 函数 API 签名。我的搜索没有产生任何结果。

谢谢。

0 投票
1 回答
1063 浏览

windows - 如何检查 TDI 过滤器驱动程序是否提供 TCP 端口?

我的 TDI 过滤驱动正在拦截 IRP_MJ_CREATE 请求,并根据我的需要分配每个打开的 TCP/UDP 连接的源端口。驱动程序在内部维护一个包含连接的表(包括套接字打开/关闭和 TCP 宽限期),但我仍然看到驱动程序没有收到特定事件通知的罕见情况,导致错误地假设特定 TCP 源端口是免费,在使用中。

在分配此端口之前,我正在研究发送 TDI_QUERY_INFORMATION 请求的选项,但我没有看到查询任何地址的选项 - 我只能查询开放地址对象,但不能查询一般地址。

是否有任何(有效)选项可以查询特定源端口并查看它是否正在使用?

0 投票
0 回答
36439 浏览

http - http.sys 究竟是如何工作的

我正在尝试更深入地了解 IIS 的工作原理。

我理解的 http.sys 是它的主要组成部分之一。但是,我一直无法找到易于理解的有关它的信息。在我听说 WSK 之前,我无法建立一个好的心理模型,然后我认为这一切都到位了。

通过大量随机谷歌搜索和一些实验,这是我目前对它存在的原因以及它是如何工作的高级理解。

为什么:

端口共享和更高性能的缓存。

如何:

用户模式进程使用 WinSock api 打开一个侦听端口的套接字以访问网络子系统,例如 tcp/ip。内核模式软件(如 http.sys 驱动程序)使用 Winsock 内核套接字 (WSK) api 使用与 WinSock api 相同的 TCP 端口号池来实现相同的目的。

IIS、Web 服务或任何想要使用 http 的东西都会使用唯一的 url/端口组合向 http.sys 注册自己。http.sys 使用 WSK 在此端口上打开一个套接字(如果它还没有用于具有相同端口的另一个 url/端口组合)并进行侦听。

当传输层 (tcpip.sys) 将 ip 数据包负载重构回客户端发送的 http 请求时,它通过请求中的端口将其提供给 http.sys。Http.sys 使用 url/端口号将其发送到适当的进程,该进程可以随意解析它。

我知道这似乎是在回答我自己的问题,但我对此真的不太确定,我希望有一些结束,这样我就可以继续做更有趣的事情了。

我接近了吗?

0 投票
2 回答
281 浏览

file-io - 文件系统微过滤器删除驱动程序的可行性检查

我使用 msdn 中的删除微过滤器示例作为基础: http ://code.msdn.microsoft.com/windowshardware/Delete-File-System-b904651d

我需要完成的是:

  1. 在 DfPreCleanupCallback 中获取删除候选对象的句柄。
  2. 在 DfPostCleanupCallback 中 - 确定如果不是获取的句柄,该文件应该被删除。
  3. 同样在 DfPostCleanupCallback - 对将被删除的文件执行一些操作并释放句柄。还确保在下次进入 IRP_MJ_CLEANUP 时删除以避免无限循环。

我对微过滤器和过滤器管理器的理解非常模糊,因此在深入研究微过滤器世界之前,我想知道这在原则上是否可行。

短版 - 我需要一种方法来确定文件将被删除,并对该文件进行一些操作。

0 投票
1 回答
283 浏览

driver - 在微过滤回调函数期间回溯线程的用户模式堆栈

我试图在微过滤器回调函数期间回溯线程的用户模式堆栈。
假设我与调用线程处于相同的上下文中,从它的 TEB/TIB 获取线程堆栈地址并处理该堆栈上的地址应该允许我回溯它的堆栈。

由于我得到的地址不是调用系统调用的预期用户模式模块,所以我做错了。

如果你能指出我正确的方向,我会很高兴。

提前致谢。


以下是读取堆栈内容的代码:


以下是获取模块名称和地址的函数:

0 投票
1 回答
2157 浏览

windbg - 在 WinDBG 中加载本地符号时遇到问题 - 内核驱动程序

我无法弄清楚为什么我的本地符号没有为使用 WDK 和 VS2013 编译的内核驱动程序加载。
我构建驱动程序并将 myDriver.pdb 放在 C:\Symbols\local 中,然后将 myDriver.sys 复制到我的虚拟机中。我使用 VirtualKD 启动调试器,安装驱动程序,然后查看我加载的模块或尝试在 myDriver!DriverEntry 上设置断点。当我尝试断点时,我得到:

我的符号路径是:

当我尝试 .reload /f myDriver.sys 我得到:

关于如何解决这个问题的任何想法?谢谢!