问题标签 [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.
assembly - 需要在用户模式下设置堆栈吗?
我一直在玩汇编和操作系统开发(在真实模式和保护模式下),因为我在内核模式下工作(“Ring 0”又名“Full Privileges”)我总是不得不担心之前设置堆栈使用堆栈指令(推/弹出)。
现在我一直在查看用户模式的 32 位汇编程序(适用于 windows 和 linux),并注意到我看到的所有程序示例都只是使用堆栈指令而没有先设置堆栈。这是什么意思?操作系统是否在启动所述进程之前自行设置进程堆栈?
提前致谢,
若昂席尔瓦。
.net-4.0 - K32EnumProcessModules 导致“无法加载由 {dll} 导入的过程”
我有一个应用程序依赖于我组织中其他人构建的几个库,其中一个已停止工作。我在命令行中收到此错误:
我打开 Dependency Walker 试图找出问题的根源,尽管我应该说我是 Dependency Walker 的新手,我真的不知道自己在做什么。这是我在日志窗口中看到的内容:
这似乎很简单,除了:
- 由于我对 DW 不熟悉,我似乎无法找到这个错误实际上指的是哪个模块
- 旧版本应用程序附带的同一个 DLL,仍然有效,在 Dependency Walker 中显示相同的内容
我发现新旧 DLL 之间的唯一区别是 KERNEL32.DLL 在较新的 DLL 中显示为红色,而函数 K32EnumProcessModules 显示为红色(未导出)。对于旧 DLL,这个相同的函数根本不会出现(绿色或其他)。
到目前为止总结一下:一个 DLL 有效,另一个无效;在 Dependency Walker 中两者都显示为“坏”,但只有一个函数 K32EnumProcessModules 显示为不好。我不知道这个函数是否是导致“未解决的导入”错误的原因,并想了解一下。
我认为可能导致此问题的唯一更改是将运行时从 .NET 2.5 升级到 .NET 4。此升级是出于与此 DLL 无关的原因进行的,不应影响它:DLL 确实不要对高于 2.5 的 .NET 组件进行任何调用,并且我组织中使用同一库的其他人报告说它在 .NET 4 上运行良好。
我意识到我提供的信息很少,主要是因为我不确定哪些信息可以帮助解决这个问题。如果您希望我进行测试以了解更多信息,请告诉我。
windbg - 从 Linux 调试 Windows 内核
我曾经使用VirtualKD、WinDBG和单个虚拟机来调试 Windows 内核。
最近我有一台 Linux 机器,现在我想知道 - 当您的主机无法运行VirtualKD/WinDBG*时,调试 Windows 内核的最简单方法是什么?
我假设该解决方案将需要两个虚拟机,但我宁愿在我的实际机器上托管两个实例,而不是将一个实例驻留在另一个虚拟实例中......
无论如何,有没有使这项工作?
提前致谢!
*出于稳定性原因,葡萄酒是最后的选择......
c - 相当于 Windows 上的 /dev/kmsg?
我想从批处理文件或 cmd 提示符向 Windows 内核日志添加自定义行。
在linux中,我会通过写入/dev/kmsg
文件来做到这一点。dmesg
通过或可以看到写入该文件的任何内容/var/log/messages
。
例如echo Hello world > /dev/kmsg
我想要一些非常相似的 Windows 端。
log_to_kernel.exe "my message"
如果有类似, 而不是重定向到设备文件的解决方案,我也可以。我认为,Windows 中没有设备“文件”的概念。
要求的原因:
我正在尝试调试驱动程序中的一些问题,为此我正在运行一些测试程序,该程序在内部调用 Windows 中的驱动程序。
如果驱动程序失败,我将能够看到附加在 1394 上的内核 windbg 中的调试消息。内核调试器将遇到断点/断言,我将无法检查目标系统上的迭代次数,直到我继续来自windbg。
因此,我需要在内核日志本身中记录时间和测试迭代次数,我计划通过运行自动化测试的批处理文件来完成。
因此,我需要一些带有 C 代码的工具或虚拟回显驱动程序,它将我的自定义消息记录在内核日志中。
在一行中,我想从用户空间应用程序向内核日志写入一条自定义消息。
windows - WFP 内核模式驱动程序的 DriverEntry 在某些机器上的调用方式不同?
我已经为我自己的应用程序向 Windows 过滤平台 MSNMNTR 示例添加了一些代码,但它仍然具有相同的结构。我已经为 Win8 64 位编译了驱动程序和应用程序,并对驱动程序进行了生产签名。在我构建代码的(虚拟)机器上,该示例工作正常并且可以正确监控。当我将 inf、sys 和 exe 复制到另一台机器时,示例不会监控。通过 traceview 输出,我可以看到在第二台机器上,没有调用 DriverEntry(),因此从未设置过流控制。两台机器都运行的是Win8的发布版。这似乎不是我的新代码的问题,因为驱动程序在 #1 机器上运行良好,而且它似乎不是签名问题,因为当我关闭机器 #2 上的签名强制时,我仍然有问题。代码的发布版本和调试版本都有相同的问题。我用来设置和运行代码的步骤如下。有哪些事情可能会导致这种行为?
- 将驱动程序 .pdbs 复制到 traceview 的文件夹中。
- 右键单击 .inf 并选择“安装”
- 从提升的命令提示符运行“net start msnmntr”。
- 以管理员身份启动 traceview。
- 从提升的命令提示符运行“monitor monitor "C:\Program Files\Internet Explorer\iexplore.exe"”。
PS我还没有把windbg放在这个上面,但我会在我尝试后立即用结果更新问题。
编辑添加:好的,我在两台机器上运行了内核模式调试器并看到了行为差异。首先,两台机器都调用了 DriverEntry。我错了。但是,在代码工作的机器上(即监控网络流量),DriverEntry 在 monitor.exe 运行时被调用(上面的第 5 步),而在代码不工作的机器上,DriverEntry在“net start msnmntr”时被调用(上面的步骤 3) 被执行。
java - 文件和文件夹的保护程序
该项目是一个使用Java锁定文件和文件夹的安全程序
我有两个想法:
第一:在 Windows 内核级别隐藏文件或文件夹
我目前找不到执行此操作的方法。
我怎样才能做到这一点?有什么有用的提示吗?
另一种解决方案:创建一个新的扩展 Windows 无法使用密码读取和关闭它。
将所需文件转换为 zip 文件,然后将其作为字节读取并存储在具有我创建的新扩展名的文件中。这里有两个问题:读取字节需要很长时间,如果文件很大(大于 200 MB),则会在运行时内存已满时产生错误。
你如何解决这些问题?
除了这两种方法之外,还有其他方法可以保护文件和文件夹吗?
*如果有什么不清楚的请问我。
感谢帮助
windows - Windows Logo Kit v1.6 - Win7 测试驱动
我已被分配下载并安装 Windows Logo Kit v1.6 以测试 Windows 7 的驱动程序。到目前为止,我所做的是在干净的 Windows 2008 R2 64 位机器上安装控制器和工作室。我还有另一个干净的 Windows 7 Pro 32 位作为客户端。安装后,客户端计算机会显示在 Studio 中。
下一步是在客户端 PC 上安装驱动程序。我试过用谷歌搜索这部分的文档,但我没有找到任何文档。
如何在客户端 PC 上安装驱动程序?我只是按照我一贯的方式安装它,还是需要遵循特殊的程序?
在工作室,有很多测试要运行。我怎么知道选择哪个测试?
windows - 内核模式驱动程序和用户模式应用程序之间的双向通信?
我需要内核模式 WFP 驱动程序和用户模式应用程序之间的双向通信。驱动程序通过将 URL 传递给应用程序来启动通信,然后应用程序对该 URL 进行分类(娱乐、新闻、成人等)并将该类别传递回驱动程序。驱动程序需要知道过滤功能中的类别,因为它可能会根据该信息阻止某些网页。我在应用程序中有一个线程正在发出 I/O 请求,驱动程序将使用 URL 和 GUID 完成,然后应用程序会将类别写入该 GUID 下的注册表中,驱动程序将在其中提取它。不幸的是,正如驱动程序验证者所指出的那样,这是不稳定的,因为 Zw 注册表函数必须在 PASSIVE_LEVEL 运行。我正在考虑用映射的内存缓冲区尝试同样的事情,但我不确定中断要求是什么。另外,我想过在注册表函数调用之前降低中断级别,但我不知道这样做的副作用是什么。
kernel - 如何确定 FILE_OBJECT 是否代表普通文件或设备?
FILE_OBJECT 上的 MSDN 页面说:
"注意 给定文件对象所代表的对象类型(例如,文件、目录或卷)不能仅通过检查文件对象结构的内容来确定。有关如何确定文件对象类型的信息文件对象表示,见 ZwQueryInformationFile。”
我有两个问题:
1、如何通过ZwQueryInformationFile判断对象类型?
2、DEVICE_TYPE,如FILE_DEVICE_CD_ROM_FILE_SYSTEM、FILE_DEVICE_DISK_FILE_SYSTEM、FILE_DEVICE_FILE_SYSTEM,确定可靠吗?
谢谢。
kernel - 禁用 APC 时如何查询文件大小?
在我的微过滤器的 PostCreate 期间,我必须使用全局推送锁来设计同步线程,并且我必须调用 FltQueryInformationFile 来查询文件大小。
然而,
1、我调用FltAcquirePushLockExclusive后,APC投递被禁用;
2、如果禁用了 APC 传递,那么 FltQueryInformationFile 将失败,因为它必须在 PASSIVE_LEVEL 调用并启用 APC。
在这种情况下,我应该如何查询文件大小?建立 IRP 有帮助吗?
提前致谢。