这两天调试驱动时碰到一个问题,驱动加载之后,没有执行init直接就卸载了。
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: RETAILMSG(1, (TEXT("PRT:DLL_PROCESS_ATTACH\t\n"))); break;
case DLL_THREAD_ATTACH: RETAILMSG(1, (TEXT("PRT:DLL_THREAD_ATTACH\t\n"))); break; case DLL_THREAD_DETACH: RETAILMSG(1, (TEXT("PRT:DLL_THREAD_DETACH\t\n"))); break; case DLL_PROCESS_DETACH: RETAILMSG(1, (TEXT("PRT:DLL_PROCESS_DETACH\t\n"))); break; default: RETAILMSG(1, (TEXT("PRT:default\t\n"))); break; } return TRUE; } |
打印LOG:
Printer:DLL_PROCESS_ATTACH Printer:DLL_PROCESS_DETACH |
驱动加载之后,没有调用init函数。直接就退出来了。
分析
原因是:
WINCE的流式驱动函数模型为:
XXX_Init
前缀必须是三个字母。否则将不执行init函数。
附另外几个驱动加载失败的原因:
1. dll 没有刷新。
2. 注册表中的 Prefix 选项的 值 与 XXX不一致。
3. init 返回 0.
4. platform.bib 中没有将 dll 加载到 NK 中。