WEB开发网
开发学院软件开发VC VC文件过滤系统驱动开发Filemon学习笔记 阅读

VC文件过滤系统驱动开发Filemon学习笔记

 2007-11-26 21:38:05 来源:WEB开发网   
核心提示: 上面的精简后的函数代码为只考虑目前处于第一种情况,即打开文件请求中,VC文件过滤系统驱动开发Filemon学习笔记(6),但文件尚未打开时,在此时,祝大家周末愉快,余下的整理后再帖,文件的名字信息存储在文件对象fileObject->FileName,与fileObject->

上面的精简后的函数代码为只考虑目前处于第一种情况,即打开文件请求中,但文件尚未打开时。

在此时,文件的名字信息存储在文件对象fileObject->FileName,与fileObject->RelatedFileObject->FileName, FileObject->FileName 是RelatedObject 的相对路径,通过对两者的解析组合出文件名字。

而在FilemonGetFullPath 函数体中的另一段代码:FilemonGetFullPath
{
…………………..
…………………..
…………………..
if( !gotPath && !createPath ) {
    
    fileNameInfo = (PFILE_NAME_INFORMATION) ExAllocatePool( NonPagedPool,
                                MAXPATHLEN*sizeof(WCHAR) );
    if( fileNameInfo &&
      FilemonQueryFile(hookExt->FileSystem, fileObject, FileNameInformation,
               fileNameInfo, (MAXPATHLEN - prefixLen - 1)*sizeof(WCHAR) )) {
      fullUniName.Length = (SHORT) fileNameInfo->FileNameLength;
      fullUniName.Buffer = fileNameInfo->FileName;
      if( NT_SUCCESS( RtlUnicodeStringToAnsiString( &fileName, &fullUniName, TRUE ))) {
        fullPathName[ fileName.Length + prefixLen ] = 0;
        if( hookExt->Type == NPFS ) {
          
          strcpy( fullPathName, NAMED_PIPE_PREFIX );
        } else if( hookExt->Type == MSFS ) {
          strcpy( fullPathName, MAIL_SLOT_PREFIX );
        } else if( fileObject->DeviceObject->DeviceType != FILE_DEVICE_NETWORK_FILE_SYSTEM ) {
          sprintf( fullPathName, "%C:", hookExt->LogicalDrive );
        } else {
        
          //
          // No prefix for network devices
          //
        }
        memcpy( &fullPathName[prefixLen], fileName.Buffer, fileName.Length );
        gotPath = TRUE;
        RtlFreeAnsiString( &fileName );
        fileName.Buffer = NULL;
      }
    }
    if( fileNameInfo ) ExFreePool( fileNameInfo );
}
…………………
…………………
…………………
}

上面这段代码是处理另外一种情况,即是在其他读写请求中,自己根据拦截到的fileObject构建IRP,下发到底层,以此来查询文件名信息。整个过程还是易于理解的。

在理清这两种脉络后,再剖析此整个函数,就很容易理解整个函数代码了。

代码中对 MajorFunction == IRP_MJ_CREATE_NAMED_PIPE

MajorFunction == IRP_MJ_CREATE_MAILSLOT 的判断是为了辨别对拦截到的进程间的两种通信方式:命名管道与邮槽的处理。

周末来了,祝大家周末愉快。余下的整理后再帖,希望和大家多交流。

连城碧 QQ 276265852 MSN:haochao0000@hotmail.com

上一页  1 2 3 4 5 6 

Tags:VC 文件 过滤

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接