阅读:1485回复:2
问几个关于filemon问题
我用控制台写了个调用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); } } |
|
沙发#
发布于:2009-05-15 16:17
还有就是我重新编译的filem.sys,但用filemon每次打开的filem.sys总是我开机第一次打开的.sys
|
|
板凳#
发布于:2009-05-15 20:39
驱动就是这样的,加载后,如果没有从内存中完全卸载掉,在次加载还是加载旧的。
|
|