我做了一个映射到任何PE格式文件的内存地址库,事情是我做它只有用户的土地,使用标准的.lib格式的Visual Studio 2013。这是否意味着我的库不能在设备驱动程序中使用?图书馆的设备驱动程序
,比如我有下面的代码片段:
HMODULE ntdllmod = LoadLibraryA("ntdll.dll");
if (ntdllmod)
{
ZwQueryInformationProcess func = (ZwQueryInformationProcess)GetProcAddress(ntdllmod, "ZwQueryInformationProcess");
}
这非常适用于用户的土地,但内核我不需要调用GetProcAddress,我只是可以直接调用ZwQueryInformationProcess,因为它是一个NTOSKRNL出口.. 。广东话我只是这样做,例如?:
#IF USER_LAND
HMODULE ntdllmod = LoadLibraryA("ntdll.dll");
if (ntdllmod)
{
ZwQueryInformationProcess func = (ZwQueryInformationProcess)GetProcAddress(ntdllmod, "ZwQueryInformationProcess");
}
#elif KERNEL_MODE
//Run my Kernel version code here.
如果这是不可能的,那么我是如何构建VS2013的设备驱动程序库? (无法找到选项)另外任何知道如何链接驱动程序库的指南或参考将有所帮助,假设它不同于普通的库。
编辑:我已经知道如何使用ZwQueryInformationProcess,问题是如果我可以使用预处理器指令#IF来生成驱动程序库或用户模式库,并在相同的解决方案中有两个实现。
谢谢。
驱动程序(内核模式)API的是从用户模式API的不同。我没有看过这个特殊的功能,但也有许多用户模式的功能,这些功能要么不可用,或者通过在驱动程序代码不同的路线可用。这通常是因为Windows的开发人员认为不需要提供该功能(以该形式)。如果你准确地解释了为什么你需要在内核模式下加载一个PE - 也许有另一种方法来实现你正在寻找的东西...... –
谢谢我已经知道,问题是如果我可以使用预处理器指令(#IF)使用WDM SDK的内核导出功能,并同时使用win32常规API。在理论上,编译器应该根据预处理器指令创建库,并且将用于内核土地或用户土地,但我不知道这是否可能... – ffenix