wjhwdm
驱动牛犊
驱动牛犊
  • 注册日期2002-12-11
  • 最后登录2011-01-20
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1985回复:10

各位老大帮忙看看,我照FILEMON写的代码,为什么DriverUnload不执行?

楼主#
更多 发布于:2004-08-20 15:34
#define FILEMON_DEVICE_NAME L"\Device\FileMon"
#define FILEMON_DOSLINK_NAME L"\DosDevices\FileMon"

PDEVICE_OBJECT g_pDevObj;

NTSTATUS
DriverEntry(IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
{
DbgPrint (("Filemon.SYS: entering DriverEntryn"));
 
DrvFileMon_AddDevice(DriverObject, FILEMON_DEVICE_NAME);

DriverObject->DriverUnload = FilemonUnload;

return STATUS_SUCCESS ;
}
NTSTATUS
DrvFileMon_AddDevice(IN PDRIVER_OBJECT  DriverObject,
IN PWSTR pwDeviceName)
{  

NTSTATUS status;
UNICODE_STRING DeviceNameStr;
UNICODE_STRING LinkNameStr;

RtlInitUnicodeString( &DeviceNameStr, pwDeviceName);

status = IoCreateDevice( DriverObject,
0,
&DeviceNameStr,
FILE_DEVICE_FILEMON,
0,
FALSE,
&g_pDevObj);
//if( NT_SUCCESS(status))
if(status == STATUS_SUCCESS)
{
DbgPrint(("Filemon: Successful to create our device!n"));

        // Create a symbolic link that the GUI can specify to gain access
        // to this driver/device
        RtlInitUnicodeString (&LinkNameStr,
                              FILEMON_DOSLINK_NAME );
        status = IoCreateSymbolicLink (&LinkNameStr,
                                         &DeviceNameStr );
        if (!NT_SUCCESS(status)) {
IoDeleteDevice(g_pDevObj);
            DbgPrint (("Filemon.SYS: IoCreateSymbolicLink Failedn"));
        }
else
{
DbgPrint (("Filemon.SYS: IoCreateSymbolicLink Successfuln"));
}
return status;
}

return STATUS_SUCCESS ;
}
VOID FilemonUnload( IN PDRIVER_OBJECT DriverObject )
{
UNICODE_STRING LinkNameStr;
    RtlInitUnicodeString (&LinkNameStr, FILEMON_DOSLINK_NAME );
IoDeleteSymbolicLink( &LinkNameStr);

IoDeleteDevice(g_pDevObj);
DbgPrint(("Filemon.SYS: unloadingn"));
}
wjhwdm
驱动牛犊
驱动牛犊
  • 注册日期2002-12-11
  • 最后登录2011-01-20
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-08-21 21:35
我定义了
DriverObject->DriverUnload = FilemonUnload;

但是FilemonUnload函数一直没有被执行,请教这是因为什么原因呢?
AthlonxpX86
驱动小牛
驱动小牛
  • 注册日期2002-11-10
  • 最后登录2013-07-17
  • 粉丝0
  • 关注0
  • 积分29分
  • 威望43点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-08-21 21:41
不知道对不对,我记得DriverObject->DriverUnload 好像是对静态安装的驱动程序的卸载,filemon的驱动程序是NT的核心模式驱动,可动态加载卸载,这样的话是不是应该在IRP_MJ_CLOSE中卸载?。。。。。。。。。。。。。。
AthlonxpX86(桃源村)
wjhwdm
驱动牛犊
驱动牛犊
  • 注册日期2002-12-11
  • 最后登录2011-01-20
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-08-23 08:44
谢谢高手指点,我调试看看是不是这个原因。
wjhwdm
驱动牛犊
驱动牛犊
  • 注册日期2002-12-11
  • 最后登录2011-01-20
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-08-27 08:27
我该怎么给分呢? :cool:
Sundsea
驱动老牛
驱动老牛
  • 注册日期2003-05-06
  • 最后登录2012-06-05
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望35点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-08-28 13:08
我该怎么给分呢? :cool:



多灌灌水在给分吧.
wjhwdm
驱动牛犊
驱动牛犊
  • 注册日期2002-12-11
  • 最后登录2011-01-20
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-09-01 09:00
OK
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-09-03 17:05
你的FILEMON竟然还有ADD DEVICE. 是WDM版的还是PNP的. ADD DEVICE和UNLOAD例程打算谁来调用? PNP MANAGER?
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
8楼#
发布于:2004-09-03 17:57
他的ADDDEVICE是在DriverEntry中调用的,是假的,只是个函数调用而已.不是WDM中的那个由PNP来调用的ADDDEVICE.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
wjhwdm
驱动牛犊
驱动牛犊
  • 注册日期2002-12-11
  • 最后登录2011-01-20
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-09-07 09:02
是的,我的ADDDEVICE只是个函数调用。
刚开始学driver,不是很清楚,以后请多指教 :D
照我的理解filemon应该是wdm版的。

UNLOAD例程在filemon的代码中当中也有,filemon不是为pnp设备写的,应该不是由PNP MANAGER调用。
不知道我的这个概念是不是正确的。。。
谢谢!
wjhwdm
驱动牛犊
驱动牛犊
  • 注册日期2002-12-11
  • 最后登录2011-01-20
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-09-07 09:04
以下是filemon中关于DriverUnload 的代码:
#if DBG        
        //
        // Driver unload is only set if we are debugging Filemon. This is
        // because unloading a filter is not really safe - threads could
        // be in our fastio routines (or about to enter them), for example,
        // and there is no way to tell. When debugging, we can risk the
        // occasional unload crash as a trade-off for not having to
        // reboot as often.
        //
        // DriverObject->DriverUnload = FilemonUnload;
#endif // DBG
游客

返回顶部