阅读:1738回复:6
Win2000和WinXp有什么区别?
我前几天调试一个程序,是朱雁辉网络截包书中的TDI传输的那个,在XP下只要卸载设备就重启,后来我换了2000试试就好用了,不知道它们的区别在哪里?
|
|
|
沙发#
发布于:2005-01-27 14:19
unload的代码是如何写的?
|
|
|
板凳#
发布于:2005-01-27 14:36
写得挺复杂,主要部分如下
if( pTDIH_DeviceExtension- >DeviceExtensionFlags&TDIH_DEV_EXT_ATTACHED) { IoDetachDevice( pTDIH_DeviceExtension->TargetDeviceObject ); pTDIH_DeviceExtension->DeviceExtensionFlags &=(TDIH_DEV_EXT_ATTACHED); } pTDIH_DeviceExtension->NodeType = 0; pTDIH_DeviceExtension->NodeSize = 0; if( pTDIH_DeviceExtension->TargetFileObject ) ObDereferenceObject( pTDIH_DeviceExtension->TargetFileObject ); pTDIH_DeviceExtension->TargetFileObject = NULL; IoDeleteDevice( pDeviceObject ); DBGPRINT(("TCPFilter_Attach: TCPFilter_Detach Finished\n")); 麻烦帮忙分析一下 |
|
|
地板#
发布于:2005-01-27 15:10
没看出什么明显的问题。
关注ing |
|
|
地下室#
发布于:2005-01-27 21:10
tdi filter要安全卸载是很麻烦的,要等所有outstanding irp都处理完才可以。你的驱动在2000下卸载没有蓝屏只是运气好而已。
另外问一句,看这个代码,好像是pcausa上面的,要money的,朱雁辉是怎么敢作为附书源码的。 |
|
5楼#
发布于:2005-01-28 09:31
关于OutStanding Irp也有处理的部分,我还以为不重要呢,代码如下:
while (TRUE) { UTIL_IsLargeIntegerZero( NoRequestsOutstanding, pTDIH_DeviceExtension->OutstandingIoRequests, &(pTDIH_DeviceExtension->IoRequestsSpinLock) ); if( !NoRequestsOutstanding ) KeWaitForSingleObject( (void *)(&(pTDIH_DeviceExtension->IoInProgressEvent)), Executive, KernelMode, FALSE, NULL); else break; } 另外我不知道PCAUSA 上的源码怎样,但是在网上看了一些其他人写 的TDI filter的例子,卸载时很简单,就是一个IoDetachDevice和一个IoDeleteDevice就完了,何解? |
|
|
6楼#
发布于:2005-01-28 19:06
请问tooflat兄和各位老大,安全卸载tdi filter的方法是什么呢?有代码自然好,没有的话告知去哪里查资料也好啊,拜托多谢
|
|
|