阅读:1637回复:7
请教驱动加载的問題?
自己写了一个简单的流式接口驱动,在platform.bib及platform.reg配置如下
platform.bib: [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\sample] "Dll"="sample.dll" "Prefix"="DEMO" "Index"=dword:1 "Order"=dword:40 platform.reg MODULES 。。。。 sample.dll $(_FLATRELEASEDIR)\sample.dll NK SH 。。。 生成nk.bin下载映像到开發板后,启动wince,根据调试信息,驱动DLL_PROCESS_ATTACH后,马上DLL_PROCESS_DETACH了,请问这时哪里有問題? 简单的源码如下 #include <windows.h> BOOL APIENTRY DllMain(HANDLE hinstDLL, DWORD fdwReason, LPVOID lpv) { switch ( fdwReason ) { case DLL_PROCESS_ATTACH: RETAILMSG(1, (TEXT("Sample: Enter DllMain PROCESS ATTACH!\r\n"))); break; case DLL_PROCESS_DETACH: RETAILMSG(1, (TEXT("Sample: Enter DllMain PROCESS DETACH!\r\n"))); break; case DLL_THREAD_ATTACH: RETAILMSG(1, (TEXT("Sample: Enter DllMain THREAD ATTACH!\r\n"))); break; case DLL_THREAD_DETACH: RETAILMSG(1, (TEXT("Sample: Enter DllMain THREAD DETACH!\r\n"))); break; } return TRUE; } DWORD DEMO_Init( DWORD /*registryPath*/ ) { RETAILMSG(1, (TEXT("Sample: Enter Init!\r\n"))); return TRUE; } BOOL DEMO_Deinit( DWORD /*dwData*/ ) { RETAILMSG(1, (TEXT("Sample: Enter Deinit!\r\n"))); return TRUE; } DWORD DEMO_Open( DWORD dwClientContext, DWORD /*access*/, DWORD /*shareMode*/ ) { RETAILMSG(1, (TEXT("Sample: Enter Open!\r\n"))); return TRUE; } BOOL DEMO_Close( DWORD /*dwData*/ ) { RETAILMSG(1, (TEXT("Sample: Enter Close!\r\n"))); return TRUE; } DWORD DEMO_Write( DWORD /*dwData*/, LPCVOID /*writeBytes*/, DWORD /*numBytes*/ ) { RETAILMSG(1, (TEXT("Sample: Enter Write!\r\n"))); return 0; } DWORD DEMO_Read( DWORD /*dwData*/, LPVOID /*buffer*/, DWORD /*numRead*/ ) { RETAILMSG(1, (TEXT("Sample: Enter Read!\r\n"))); return 0; } BOOL DEMO_IOControl( DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut ) { return TRUE; } void DEMO_PowerUp( DWORD /*hContext*/ ) { // do nothing } void DEMO_PowerDown( DWORD /*hContext*/ ) { // do nothing } DWORD DEMO_Seek( DWORD /*hOpenContext*/, long /*amount*/, WORD /*type*/ ) { // Do nothing, return fail return -1; } |
|
沙发#
发布于:2008-06-15 12:30
問題已经解决,是选择了full kernel mode造成的,
加载虽然成功了,但我發現系统老是调用驱动的 DllMain()(老是DLL_PROCESS_ATTACH,然后 DLL_PROCESS_DETACH),这是怎么回事,是 因为电源管理造成的吗? |
|
板凳#
发布于:2008-06-15 20:43
"Prefix"="DEMO"
|
|
地板#
发布于:2008-06-15 20:53
引用第2楼wenzai于2008-06-15 20:43发表的 : 对,多了一个, Prefix 最多三个。你多写了一个。 |
|
|
地下室#
发布于:2008-06-16 12:26
谢谢两位,
"Prefix"="DEMO" 确实是错误 另外想请教: 如果我要这个DEMO驱动运行在内核模式,该如何设置? |
|
5楼#
发布于:2008-06-16 13:28
6.0以前的版本,驱动都是运行在用户态的
|
|
6楼#
发布于:2008-06-16 21:44
引用第1楼AngusLiu于2008-06-15 12:30发表的 : 驱动加载成功不成功和选择full kernel mode没关系。 这个是会在realse模式下把release message打印出来。 好好看看书吧! |
|
|
7楼#
发布于:2008-06-18 22:05
选择full kernel mode, 是会在realse模式下把release message打印出来???
我看书上怎么说是选择了full kernel mode的话,所有的线程工作在内核模式下! |
|