michael4338
驱动小牛
驱动小牛
  • 注册日期2004-12-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分238分
  • 威望66点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
阅读:1738回复:6

Win2000和WinXp有什么区别?

楼主#
更多 发布于:2005-01-26 17:40
我前几天调试一个程序,是朱雁辉网络截包书中的TDI传输的那个,在XP下只要卸载设备就重启,后来我换了2000试试就好用了,不知道它们的区别在哪里?
我思故我在
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-27 14:19
unload的代码是如何写的?
在交流中学习。。。
michael4338
驱动小牛
驱动小牛
  • 注册日期2004-12-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分238分
  • 威望66点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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"));

麻烦帮忙分析一下
我思故我在
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-27 15:10
没看出什么明显的问题。

关注ing
在交流中学习。。。
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-27 21:10
tdi filter要安全卸载是很麻烦的,要等所有outstanding irp都处理完才可以。你的驱动在2000下卸载没有蓝屏只是运气好而已。

另外问一句,看这个代码,好像是pcausa上面的,要money的,朱雁辉是怎么敢作为附书源码的。
michael4338
驱动小牛
驱动小牛
  • 注册日期2004-12-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分238分
  • 威望66点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
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就完了,何解?
我思故我在
michael4338
驱动小牛
驱动小牛
  • 注册日期2004-12-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分238分
  • 威望66点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-01-28 19:06
请问tooflat兄和各位老大,安全卸载tdi filter的方法是什么呢?有代码自然好,没有的话告知去哪里查资料也好啊,拜托多谢
我思故我在
游客

返回顶部