我有一个Windows驱动程序(平台工具集 WindowsApplicationForDrivers10.0)做成了一个DLL(可能是用户模式,不是很确定,怎么确定?),想在代码里加载另外一个的DLL(用户模式或者也是WindowsApplicationForDrivers),发现 静态加载或者LoadLibrary加载的时候,总是不成功,
LoadLibrary会陷入假死,请问有什么办法吗?
内核模式中 DLL 的基本问题是 DLL 是否调用任何用户模式代码。如果 DLL 包含除本地内核 API 调用之外的任何内容,那么如果您在编译时试图将驱动程序与其链接,就会产生链接程序错误(内核根本不会加载它)。显然,编译成 Win32 库的 DLL 属于这种类别。即使您在 DLL 源代码中避免进行显式用户模式 API 调用,编译器仍然会在进行堆栈检查、溢出检查和类似操作时经常生成隐式的用户模式支持调用。所以,在 Windows 用户模式开发环境(例如 Visual Studio)中编译的任何 DLL 都不能在内核模式中使用。
在驱动程序初始化前用户层的dll是无法被加载的,可以考虑在用户dll所需的驱动程序初始化完成后再载入此dll
你把整个代码发出来
https://www.csdn.net/tags/NtDaYgysNDMwMi1ibG9n.html
在 DLL 的DllMain函數中呼叫WPP_INIT_TRACING宏。
如果您的 DLL 是以 C 撰寫的,請將WPP_OLDCC的#define語句新增至您的原始程式碼。 將定義放在追蹤訊息標頭的 #include 語句之前, (. tmh) 檔。 只有 C 程式碼才需要 WPP_OLDCC 定義。 C + + 不需要它。
例如:
#define WPP_OLDCC
#include "init.tmh"
您無法在 Microsoft Windows 2000 上的DllMain函數中初始化 WPP 軟體追蹤。 因為會在 Windows 2000 的服務中執行 WPP,所以初始化軟體追蹤會產生遠端程序呼叫,這在 DLL 初始化期間是禁止的。
https://blog.csdn.net/modest/article/details/3564863
LoadLibrary会陷入假死?
有些代码只能在用户模式下运行,用户dll所需的驱动程序初始化完成后才能载入此dll