LintChD
驱动牛犊
驱动牛犊
  • 注册日期2009-05-13
  • 最后登录2014-05-06
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望181点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1485回复:2

问几个关于filemon问题

楼主#
更多 发布于:2009-05-15 16:14
我用控制台写了个调用filem.sys的程序。为什么每次都是createfile打开驱动的时候出错?而我必须要先打开一次filemon再打开我的就行了。每次开机都要这样。就是说每次开机后,必须先打开一下filemon再打开我的那个程序,否者我的程序在createfile就回出错。
我完全照着filemon的改的啊~~~搞不明白~急死了~大虾们帮帮我。
这个main的代码
int main(void)
{
    TCHAR            Path[MAX_PATH];//FILEM.SYS路径
    TCHAR            msgbuf[MAX_PATH];
    TCHAR            systemRoot[ MAX_PATH ];
    TCHAR            driverPath[ MAX_PATH ];
    WIN32_FIND_DATA        findData;
    HANDLE            findHandle;
    DWORD            error;
    DWORD            nb, versionNumber;
    TCHAR             name[ MAX_PATH ];
    
    int            drive;
    static DWORD        MaxDriveSet = 0;
 
    


    GetCurrentDirectory(sizeof Path, Path );

    _stprintf( Path+lstrlen(Path), _T("\\%s"), SYS_FILE );
    
    findHandle = FindFirstFile( Path, &findData );

    if( findHandle == INVALID_HANDLE_VALUE )
    {
        _stprintf( msgbuf, _T("%s was not found."), SYS_FILE );
        MessageBox(NULL,msgbuf,"error",MB_OK);
        return 0;
    }
    else
    {
        FindClose( findHandle );
    }
    if( !GetEnvironmentVariable( "SYSTEMROOT", systemRoot, sizeof(systemRoot)))
    {
        printf("NO GetEnvironmentVariable\n");
        return 0;
    }

    sprintf(driverPath, _T("%s\\system32\\drivers\\%s"),
        systemRoot, SYS_FILE );


    if( !LoadDeviceDriver(SYS_NAME, driverPath, &SysHandle,&error))//////////////////////////////////////////////////////这里会出错。里面就是creatfile无法得到句柄
    {
        printf("NO LoadDeviceDriver\n");
        return 0;
    }

    if( (!DeviceIoControl(SysHandle, IOCTL_FILEMON_VERSION,NULL,
        0, &versionNumber, sizeof(DWORD), &nb, NULL )) ||(
                versionNumber != FILEMONVERSION ))
    {
        printf("NO IOCTL_FILEMON_VERSION\n");
        return 0;
    }

    FilterDefinition.excludefilter[0] = 0;
    FilterDefinition.includefilter[0] = 0;
    
    if( strcmp( ExcludeString, " " ) )
        strcpy( FilterDefinition.excludefilter, ExcludeString );
    if( strcmp( FilterString, " " ) )
        strcpy( FilterDefinition.includefilter, FilterString );
    


    FilterDefinition.includefilter[0]='*';
    FilterDefinition.logreads=1;
    FilterDefinition.logwrites=1;
    if(!DeviceIoControl(SysHandle, IOCTL_FILEMON_SETFILTER,
        &FilterDefinition, sizeof(FILTER), NULL,
        0, &nb, NULL ))
    {
        printf("NO IOCTL_FILEMON_SETFILTER\n");
        return 0;
    }

    // Tell driver to start filtering
    if(!DeviceIoControl( SysHandle, IOCTL_FILEMON_STARTFILTER,
        NULL, 0, NULL, 0, &nb, NULL ))
    {
        printf("NO IOCTL_FILEMON_STARTFILTER\n");
        return 0;
    }

    CurDriveSet=4; //默认C

    // Tell device driver which drives to monitor
    if(!DeviceIoControl(SysHandle, IOCTL_FILEMON_SETDRIVES,
        &CurDriveSet, sizeof CurDriveSet,
        &CurDriveSet, sizeof CurDriveSet,
        &nb, NULL ))
    {
        printf("NO IOCTL_FILEMON_SETDRIVES\n");
        return 0;
    }
 
    CurDriveSet=HookDrives(MaxDriveSet, CurDriveSet );
    

    while(1)
    {
        if(!DeviceIoControl(SysHandle, IOCTL_FILEMON_GETSTATS,
            NULL, 0, &Stats, sizeof Stats,
            &StatsLen, NULL ))
        {
            printf("NO IOCTL_FILEMON_GETSTATS\n");
            return 0;
        }

        
        UpdateStatistics();
        Sleep(500);
        
    }
    
}
LintChD
驱动牛犊
驱动牛犊
  • 注册日期2009-05-13
  • 最后登录2014-05-06
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望181点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-05-15 16:17
还有就是我重新编译的filem.sys,但用filemon每次打开的filem.sys总是我开机第一次打开的.sys
Chinaluo_007
驱动牛犊
驱动牛犊
  • 注册日期2009-04-22
  • 最后登录2010-04-13
  • 粉丝1
  • 关注1
  • 积分40分
  • 威望361点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-05-15 20:39
驱动就是这样的,加载后,如果没有从内存中完全卸载掉,在次加载还是加载旧的。
游客

返回顶部