阅读:1405回复:12
为什么我的的程序重启
我的驱动安装后使用dll调用但是一调用就重起为什么.有什么可能性
|
|
沙发#
发布于:2005-06-05 16:41
你是如何调用的?softice可以截住吗?说的具体一点
|
|
板凳#
发布于:2005-06-05 16:50
大侠恩典我的调用代码如下:
printf(\"Hello World!\\n\"); //SC_HANDLE hServiceMgr,hServiceTwdm; BOOL bRtn; DWORD dwRtn,dwSize; TCHAR szDir[200]; //if(argc>1) //{ //DelSvr( GetSystemDirectory(szDir , 200); strcat(szDir,\"system32\\\\drivers\\\\objfre.sys\"); AfxMessageBox(dwSize); LPCTSTR lpszBinaryPathName = TEXT(szDir); hServiceMgr = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); if(hServiceMgr == NULL) { printf(\"openscmanager() faild %d \\n\",GetLastError()); return 0; } else { printf(\"openscmanager() ok!\\n\"); } hServiceTwdm = CreateService(hServiceMgr, TEXT(\"objfre.sys\"), TEXT(\"objfre\"), SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_IGNORE, lpszBinaryPathName, NULL, NULL, NULL, NULL, NULL); if( hServiceTwdm == NULL ) { dwRtn = GetLastError(); if( dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_EXISTS ) { CloseServiceHandle( hServiceMgr ); printf( \"CrateService() Faild %d ! \\n\", dwRtn ); return 0; } else { printf( \"CrateService() Faild Service is ERROR_IO_PENDING or ERROR_SERVICE_EXISTS! \\n\" ); } hServiceTwdm = OpenService( hServiceMgr, TEXT(\"Twdm1\"), SERVICE_ALL_ACCESS ); if( hServiceTwdm == NULL ) { dwRtn = GetLastError(); CloseServiceHandle( hServiceMgr ); printf( \"OpenService() Faild %d ! \\n\", dwRtn ); return 0; } else { printf( \"OpenService() ok ! \\n\" ); } } else { printf( \"CrateService() ok ! \\n\" ); } bRtn = StartService( hServiceTwdm, NULL, NULL ); if( !bRtn ) { //ERROR_PATH_NOT_FOUND dwRtn = GetLastError(); if( dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_ALREADY_RUNNING ) { printf( \"StartService() Faild %d ! \\n\", dwRtn ); CloseServiceHandle( hServiceTwdm ); CloseServiceHandle( hServiceMgr ); return 0; } else { if( dwRtn != ERROR_IO_PENDING ) { printf( \"StartService() Faild ERROR_IO_PENDING ! \\n\"); } else { printf( \"StartService() Faild ERROR_SERVICE_ALREADY_RUNNING ! \\n\"); } } } hWdm = CreateFile(\"\\\\\\\\.\\\\Twdm1\", GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL ); if( hWdm != INVALID_HANDLE_VALUE ) { printf( \"Open Driver Twdm ok ! \\n\" ); } else { printf( \"Open Driver Twdm faild %d ! \\n\", GetLastError() ); } CloseHandle( hWdm ); CloseServiceHandle( hServiceTwdm ); CloseServiceHandle( hServiceMgr ); printf( \"按任意键 卸载驱动程序 !\\n\" ); getch(); //DelSvr( \"Twdm1\" ); return 0; softice我还没研究呢. |
|
地板#
发布于:2005-06-05 17:00
你先装个softice,学学基本用法。你启动驱动,然后CreateFile打开.可以重点查查driverentry,和MJ_CREATE的代码。驱动主要是调出来的,不用调试器怎么成
|
|
地下室#
发布于:2005-06-05 17:58
大侠我用softice打开异常后截住了一些信息
break due to page fault (0Eh) . fault = 0000 MSR LastExceptionFromIp = 8046B626 MSR LastExcepTionInIp = 8046B4B5 就这些了 |
|
5楼#
发布于:2005-06-06 09:27
大侠我用softice打开异常后截住了一些信息 学习用ice调试驱动。重点看看你的DriverEntry,MJ_CREATE的代码,或者用ice跟踪一下。 崩溃以后,在ice里用stack命令看一下,一般可以定位到你出错的代码。 |
|
6楼#
发布于:2005-06-06 09:49
大侠我用softice打开异常后截住了一些信息 设置完全转储,分析一下DUMP文件 |
|
|
7楼#
发布于:2005-06-06 09:59
[quote]大侠我用softice打开异常后截住了一些信息 设置完全转储,分析一下DUMP文件 [/quote] 楼主说,还没用过softice,这是第一次用ice,估计也是第一次写 驱动,分析dump文件可能难度太大,呵呵,对了,你上不上msn? 我加了你,看不到你上来 |
|
8楼#
发布于:2005-06-06 13:01
版主我的msn是a13455525731@hotmail.com可能有时候写错千万不要加错了,谢谢。我经常在线
|
|
9楼#
发布于:2005-06-07 19:53
版主我的程序仍然蓝屏
STOP:0x0000001E(0xC0000005,0x8046b4b5,0x00000000,0x00000000)KMODE_EXCEPTION_NOT_HANDLE Address 8046B4B5 base at 80400000 datastamp 3ce6c002 ntoskrl.exe 实在没有办法啊,版主救我啊. |
|
10楼#
发布于:2005-06-07 21:43
贴所有源码上来吧
|
|
11楼#
发布于:2005-06-08 10:41
当程序发生错误使用softice的stack命令进行查询
显示: ntoskrnl!ExFreePoolWithTag+014F ntoskrnl!ExFreePool+000B ntoskrnl!NtSetVolumeInformationFile+23EE 这是什么原因 |
|
12楼#
发布于:2005-06-08 14:52
你在DriverEntry,MJ_CREATE分别设置断点,跟踪一下。
你写的是什么驱动? |
|