亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? filemon.c

?? 這是很舊的一個文件系統過濾驅動,FILEMON構架的,目前這種技術已經不流行了,但是里面的一些算法還是對學習如何開發文件系統過濾驅動很有幫助
?? C
?? 第 1 頁 / 共 4 頁
字號:
//
// If the name matches the exclusion mask, we do not log it. Else if
// it doesn't match the inclusion mask we do not log it. 
//
//----------------------------------------------------------------------
BOOLEAN
ApplyFilters( 
    PCHAR Text
    )
{
    ULONG    i;

    //   
    // If it matches the exclusion string, do not log it
    //
    Wait_Semaphore( FilterMutex, BLOCK_SVC_INTS );
    for( i = 0; i < NumExcludeFilters; i++ ) {

        if( MatchWithPattern( ExcludeFilters[i], Text ) ) {

            Signal_Semaphore( FilterMutex );
            return FALSE;
        }
    }
 
    //
    // If it matches an include filter then log it
    //
    for( i = 0; i < NumIncludeFilters; i++ ) {

        if( MatchWithPattern( IncludeFilters[i], Text )) {

            Signal_Semaphore( FilterMutex );
            return TRUE;
        }
    }

    //
    // It didn't match any include filters so don't log
    //
    Signal_Semaphore( FilterMutex );
    return FALSE;
}

//----------------------------------------------------------------------
//                 P A T H   P A R S I N G
//----------------------------------------------------------------------

//----------------------------------------------------------------------
//
// FilemonConvertUnparsedPath
//
// Converts an unparsed unicode path to ANSI. This is only used for
// UNC paths except for the special cases of renames and findopens.
//
//----------------------------------------------------------------------
VOID
FilemonConvertUnparsedPath(
    pioreq pir,
    PCHAR fullpathname
    )
{
    _QWORD  result;

    UniToBCS( fullpathname, pir->ir_upath, wstrlen( pir->ir_upath ),
              MAXPATHLEN, BCS_WANSI, &result );
    fullpathname[ result.ddLower ] = 0;
}


//----------------------------------------------------------------------
//
// FilemonConvertParsedPath
// 
// Converts a parsed unicode path to ANSI.
//
//----------------------------------------------------------------------
VOID
FilemonConvertParsedPath(
    int drive,
    path_t ppath,
    int codepage,
    PCHAR fullpathname 
    )
{
    int  i = 0;
    _QWORD  result;

    if( drive != 0xFF ) {

        //
        // Its a volume-based path
        // 
        fullpathname[0] = drive+'A'-1;
        fullpathname[1] = ':';
        i = 2;
    }
    fullpathname[i] = 0;
    UniToBCSPath( &fullpathname[i], ppath->pp_elements, 
                  MAXPATHLEN-1, codepage, &result );
    fullpathname[ i + result.ddLower ] = 0;
}


//----------------------------------------------------------------------
//
// FilemonConvertMixedPath
//
// This converts a mix of unparsed and parsed paths to ANSI. The 
// unparsed path is used for server/share, whereas the parsed
// path is used for the directory/file. Only UNC rename and findopen 
// use this.
// 
//----------------------------------------------------------------------
VOID
FilemonConvertMixedPath(
    pioreq pir,
    path_t ppath,
    int codepage,
    PCHAR fullpathname
    )
{
    int     i, slashes;
    _QWORD  result;

    UniToBCS( fullpathname, pir->ir_upath, wstrlen( pir->ir_upath ), MAXPATHLEN-1,
              codepage, &result );
    fullpathname[ result.ddLower ] = 0;

    slashes = 0;
    for( i = 0; i < result.ddLower; i++ ) {
            
        //
        // We find the 4th slash: \\Server\share\...
        //
        if( fullpathname[i] == '\\' && ++slashes == 4 ) break;
    }
    if( slashes == 4 ) {

        FilemonConvertParsedPath( 0xFF, ppath, codepage, &fullpathname[i]);
    }
}


//----------------------------------------------------------------------
//
// FilemonConvertPath
//
// Converts a unicode path name to ANSI.
//
//----------------------------------------------------------------------
PCHAR 
FilemonConvertPath( 
    CONVERT_TYPE converttype,
    int drive, 
    pioreq pir,
    int codepage,
    PCHAR fullpathname 
    )
{
    if( drive != 0xFF ) {

        //
        // Its a volume-based path
        // 
        switch( converttype ) {
        case CONVERT_RENAME_TARGET:
            FilemonConvertParsedPath( drive, pir->ir_ppath2, codepage, fullpathname );
            break;

        default:
            FilemonConvertParsedPath( drive, pir->ir_ppath, codepage, fullpathname );
            break;
        }

    } else {
        
        //
        // Its a UNC path. The parsed path doesn't include the
        // server/share, so we get that from the unparsed path.
        //
        switch( converttype ) {
        case CONVERT_STANDARD:
            FilemonConvertUnparsedPath( pir, fullpathname );
            break;

        case CONVERT_FINDOPEN:
        case CONVERT_RENAME_SOURCE:
            FilemonConvertMixedPath( pir, pir->ir_ppath, codepage, fullpathname );
            break;

        case CONVERT_RENAME_TARGET:
            FilemonConvertMixedPath( pir, pir->ir_ppath2, codepage, fullpathname );
            break;
        }
    }
    return fullpathname;
}


//----------------------------------------------------------------------
//
// FilemonGetFullPath
//
// Returns the full pathname of a file, if we can obtain one, else
// returns a handle.
//
//----------------------------------------------------------------------
PCHAR 
FilemonGetFullPath(  
    fh_t filenumber, 
    PCHAR fullname,
    int Drive, 
    int ResType, 
    int CodePage, 
    pioreq pir 
    )
{
    PHASH_ENTRY		hashEntry;
    pIFSFunc        enumFunc;
    ifsreq          ifsr;
    path_t          uniFullName;
    int             retval;

    //
    // See if we find the key in the hash table.
    //
    Wait_Semaphore( HashMutex, BLOCK_SVC_INTS );

    hashEntry = HashTable[ HASHOBJECT( filenumber ) ];

    while( hashEntry && 
           hashEntry->filenumber != filenumber &&
           hashEntry->drive != (Drive & 0xFF)) {

        hashEntry = hashEntry->Next;
    }

    Signal_Semaphore( HashMutex );

    fullname[0] = 0;
    if( hashEntry ) {

        strcpy( fullname, hashEntry->FullName );

    } else {

        //
        // File name isn't in the table, so ask the
        // underlying file system
        //
        sprintf( fullname, "0x%X", filenumber );

        uniFullName = IFSMgr_GetHeap( MAXPATHLEN * sizeof(WCHAR) + sizeof( path_t));
        if( uniFullName ) {
            
            //
            // Send a query file name request
            //
            memcpy( &ifsr, pir, sizeof( ifsreq ));
            ifsr.ifsir.ir_flags = ENUMH_GETFILENAME;
            ifsr.ifsir.ir_ppath = uniFullName;
            enumFunc = ifsr.ifs_hndl->hf_misc->hm_func[HM_ENUMHANDLE];

            retval = (*PrevIFSHookProc)(enumFunc, IFSFN_ENUMHANDLE, 
                                        Drive, ResType, CodePage, 
                                        (pioreq) &ifsr);

            if( retval == ERROR_SUCCESS ) {
                
                FilemonConvertParsedPath( Drive, uniFullName, CodePage, fullname );
                FilemonLogHash( Drive, filenumber, fullname );
            }
            IFSMgr_RetHeap( (void *) uniFullName );
        } 
    }
    return fullname;
}


//----------------------------------------------------------------------
//                     H O O K   R O U T I N E
//----------------------------------------------------------------------

//----------------------------------------------------------------------
//
// FilemonHookProc
//
// All (most) IFS functions come through this routine for us to look
// at.
//
//----------------------------------------------------------------------
#pragma optimize("", off)
int 
_cdecl 
FilemonHookProc(
    pIFSFunc pfn, 
    int fn, 
    int Drive, 
    int ResType,
    int CodePage,
    pioreq pir
    )
{
    int                retval;
    char               fullpathname[MAXPATHLEN];
    char               processname[64];
    char               data[MAXPATHLEN];
    char               drivestring[4];
    ifsreq             origifsr;
    pioreq             origir;
    _WIN32_FIND_DATA   *finddata;
    struct srch_entry  *search;
    BOOLEAN            log;
    _QWORD             result;
    DWORD              timelo, timehi;
    DWORD              timelo1, timehi1;
    DWORD              dostime, dosdate;
    DWORD              datetimelo, datetimehi;
    int                i, j;

    // 
    // Inititlize default data.
    //
    data[0] = 0;

    //
    // Save original iorequest because some entries get modified.
    //
    origir = (pioreq) &origifsr;
    memcpy( &origifsr, pir, sizeof( ifsreq ));

    //
    // Get the current process name.
    //
    FilemonGetProcess( processname );

    //
    // Get the time
    //
    VTD_Get_Real_Time( &timehi, &timelo );
    datetimehi = IFSMgr_Get_DOSTime( &datetimelo );
    dostime = VTD_Get_Date_And_Time( &dosdate );
    datetimelo = dostime - ((datetimehi >> 11)& 0x1F)*60*60*1000 - 
            ((datetimehi >> 5) & 0x3F)*60*1000 - 
            ((datetimehi & 0x1F)*2000);

    //
    // Special case for close call, since after the file's closed 
    // we can't query its name
    //
    if( fn == IFSFN_CLOSE ) {

        FilemonGetFullPath( origir->ir_fh, fullpathname, Drive, ResType, CodePage, origir );
    }

    //
    // Call the previous hooker first, to get the return code.
    //
    retval = (*PrevIFSHookProc)(pfn, fn, Drive, ResType, CodePage, pir);

    //
    // Now extract parameters based on the function type.
    //
    dprintf("%d: %d\n", fn, pir->ir_fh ); 
    switch( fn ) {

    case IFSFN_OPEN:

        FilemonConvertPath( CONVERT_STANDARD, Drive, origir, CodePage, fullpathname );

        TIME_DIFF();
        sprintf(data,"");
        if( origir->ir_options & ACTION_CREATENEW ) strcat(data,"CREATENEW ");
        if( origir->ir_options & ACTION_OPENEXISTING ) strcat(data,"OPENEXISTING ");
        if( origir->ir_options & ACTION_REPLACEEXISTING ) strcat(data,"REPLACEEXISTING ");
        switch (origir->ir_flags & ACCESS_MODE_MASK) {

        case ACCESS_READONLY:
            strcat(data,"READONLY ");
            break;
        case ACCESS_WRITEONLY:
            strcat(data,"WRITEONLY ");
            break;
        case ACCESS_READWRITE:
            strcat(data,"READWRITE ");
            break;
        case ACCESS_EXECUTE:
            strcat(data,"EXECUTE ");
            break;
        default:
            break;
        }
        switch (origir->ir_flags & SHARE_MODE_MASK) {
        case SHARE_COMPATIBILITY:
            strcat(data,"COMPATIBILITY ");
            break;
        case SHARE_DENYREADWRITE:
            strcat(data,"DENYREADWRITE ");
            break;
        case SHARE_DENYWRITE:
            strcat(data,"DENYWRITE ");
            break;
        case SHARE_DENYREAD:
            strcat(data,"DENYREAD ");
            break;
        case SHARE_DENYNONE:
            strcat(data,"DENYNONE ");
            break;
        default:
            break;
        }
        LogRecord( timelo, datetimelo, datetimehi, "%s\tOpen\t%s\t%s\t%s", 
                   processname, fullpathname,
                   data, ErrorString( retval ));
        FilemonLogHash( Drive, pir->ir_fh, fullpathname );
        break;

    case IFSFN_READ:
    case IFSFN_WRITE:
        FilemonGetFullPath( origir->ir_fh, fullpathname, Drive, ResType, CodePage, origir );
        if( ((fn == IFSFN_READ && FilterDef.logreads ) ||
             (fn == IFSFN_WRITE && FilterDef.logwrites )) ) {

            TIME_DIFF();
            sprintf( data, "Offset: %ld Length: %ld", origir->ir_pos, origir->ir_length );
            LogRecord( timelo, datetimelo, datetimehi, "%s\t%s\t%s\t%s\t%s", 
                       processname, fn == IFSFN_READ? "Read" : "Write", 
                       fullpathname,
                       data, ErrorString( retval ));
        }
        break;

    case IFSFN_CLOSE:
        if( FilterDef.logreads ) {

            TIME_DIFF();
            switch( origir->ir_flags ) {
            case CLOSE_HANDLE:      sprintf(data, "CLOSE_HANDLE");      break;
            case CLOSE_FOR_PROCESS: sprintf(data, "CLOSE_FOR_PROCESS"); break;
            case CLOSE_FINAL:       sprintf(data, "CLOSE_FINAL");       break;
            default: sprintf(data,"0x%02X",origir->ir_flags);            break;
            }
            LogRecord( timelo, datetimelo, datetimehi, "%s\tClose\t%s\t%s\t%s", processname, 
                       fullpathname, data, ErrorString( retval ));
        }
        if( origir->ir_flags == CLOSE_FINAL ) FilemonFreeHashEntry( Drive, origir->ir_fh);
        break;

    case IFSFN_DIR:

        //
        // This works around a special case I've seen when hiting the "browse" button in the 
        // "have disk" dialog of the hardware wizard
        //
        if( origir->ir_flags != 0xFF ) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费观看视频| 国产精品毛片久久久久久久| 欧美刺激脚交jootjob| 69久久99精品久久久久婷婷| 欧美精品日日鲁夜夜添| 91精品国模一区二区三区| 精品三级在线看| 国产精品乱人伦| 亚洲一二三级电影| 美女高潮久久久| 丁香天五香天堂综合| 91福利在线播放| 一区二区欧美国产| 中文字幕日韩精品一区| 亚洲精品成人悠悠色影视| 欧美国产97人人爽人人喊| 久久久久亚洲综合| 日韩一区二区三区电影 | 一区二区三区在线不卡| 久久一夜天堂av一区二区三区| 99在线精品免费| 一区二区免费看| 中文字幕中文字幕在线一区| 欧美日韩免费在线视频| 91丨九色丨蝌蚪富婆spa| 国产一区不卡在线| 欧美白人最猛性xxxxx69交| 欧美电影在线免费观看| 91亚洲精华国产精华精华液| 成人综合日日夜夜| 国产福利视频一区二区三区| 色噜噜狠狠成人中文综合| 高清成人在线观看| 99国产精品久| 91麻豆精品视频| 欧美日韩综合色| 国产午夜精品久久久久久久| 国产精品538一区二区在线| kk眼镜猥琐国模调教系列一区二区| 在线观看亚洲a| 国产清纯白嫩初高生在线观看91| 奇米色一区二区| av在线综合网| 亚洲人成网站精品片在线观看 | 国产精品不卡一区二区三区| 国产成人免费在线观看不卡| 欧美欧美欧美欧美首页| 国产农村妇女精品| 国产高清亚洲一区| 国产清纯白嫩初高生在线观看91 | 一区二区三区不卡视频在线观看 | 精品国产伦一区二区三区免费| 日本一道高清亚洲日美韩| 欧美xxxx在线观看| 国产精品一区免费视频| 中文字幕在线一区免费| 亚洲人午夜精品天堂一二香蕉| 91久久人澡人人添人人爽欧美 | 国产欧美日韩中文久久| 欧美剧情电影在线观看完整版免费励志电影 | 欧美日韩国产中文| 色综合天天综合网国产成人综合天| 国产麻豆成人精品| 国产一区二区三区黄视频| 韩国精品主播一区二区在线观看 | 美女视频网站久久| 国产精品视频看| 日韩情涩欧美日韩视频| caoporen国产精品视频| 久久精品国产精品亚洲精品| 亚洲激情av在线| 国产清纯美女被跳蛋高潮一区二区久久w | wwwwww.欧美系列| 色吧成人激情小说| 99免费精品在线| 国产a视频精品免费观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲精品乱码久久久久久久久| 久久美女高清视频| 久久精品亚洲乱码伦伦中文| 欧美一区2区视频在线观看| 欧美日韩视频在线一区二区| 91网页版在线| 欧美综合一区二区三区| 91年精品国产| 欧美在线观看一区二区| 欧洲国内综合视频| 欧美日韩美少妇| 日韩免费观看高清完整版| 日韩一区二区在线免费观看| 91精品国产高清一区二区三区| 欧美日韩国产一二三| 欧美绝品在线观看成人午夜影视| 欧美一区二区视频观看视频| 日韩欧美高清一区| 国产日韩欧美精品一区| 亚洲欧美偷拍卡通变态| 亚洲一区二区三区视频在线 | 欧美日本视频在线| 欧美一区二区播放| 综合电影一区二区三区| 亚洲欧美另类久久久精品2019| 亚洲国产精品人人做人人爽| 日韩激情一区二区| 不卡的av网站| 91麻豆精品久久久久蜜臀| 26uuu精品一区二区三区四区在线| 中文字幕不卡三区| 视频一区中文字幕| 91视频你懂的| 久久综合色之久久综合| 亚洲精品一卡二卡| 国产大陆精品国产| 欧美疯狂性受xxxxx喷水图片| 欧美国产乱子伦| 男女男精品视频网| 欧美三级中文字幕在线观看| 久久久av毛片精品| 免费在线成人网| 欧美日韩黄视频| 最新国产精品久久精品| 国产成人日日夜夜| 精品免费国产一区二区三区四区| 夜夜夜精品看看| 色综合久久综合网97色综合| 国产精品久久久久久久久免费相片| 免费一级欧美片在线观看| 欧美另类变人与禽xxxxx| 樱桃国产成人精品视频| 91在线观看地址| 夜夜嗨av一区二区三区四季av| 成人国产精品免费网站| 中文字幕中文字幕在线一区| av不卡一区二区三区| 亚洲久本草在线中文字幕| 91在线精品一区二区| 一区二区三区在线视频观看| 色婷婷综合久久久中文一区二区| 亚洲免费观看高清完整| 欧美日韩中文精品| 美美哒免费高清在线观看视频一区二区| 欧美偷拍一区二区| 日本中文一区二区三区| 国产亚洲一区二区三区| 色欧美88888久久久久久影院| 亚洲国产aⅴ天堂久久| 日韩欧美国产1| 99在线精品视频| 久久精品国产澳门| 国产女同性恋一区二区| 欧美三级三级三级| 国产不卡在线视频| 日本在线不卡视频| 国产精品人妖ts系列视频| 91黄色小视频| 国产激情视频一区二区在线观看| 1区2区3区欧美| 2022国产精品视频| 欧美三级中文字| 成人av在线观| 精品亚洲成a人| 日本最新不卡在线| 一区二区三区中文字幕精品精品| 亚洲精品一区在线观看| 欧美亚洲高清一区二区三区不卡| 国产成人精品免费网站| 蜜桃视频一区二区三区| 亚洲成年人网站在线观看| 国产精品久久免费看| 国产婷婷一区二区| 久久老女人爱爱| 国产日韩欧美一区二区三区综合| 日韩欧美在线综合网| 91精品国产综合久久精品 | 亚洲男人的天堂在线观看| 国产调教视频一区| 欧美激情综合网| 国产精品美女久久久久久2018| 国产精品免费视频观看| 国产精品久久久久一区| 国产性色一区二区| 日本一区免费视频| 伊人夜夜躁av伊人久久| 一区二区三区免费观看| 亚洲一卡二卡三卡四卡五卡| 亚洲一区视频在线| 欧美96一区二区免费视频| 韩国毛片一区二区三区| caoporn国产一区二区| 色婷婷综合久久久中文一区二区| 在线观看av一区二区| 欧美一区二区三区视频在线| 久久品道一品道久久精品| 亚洲欧美一区二区在线观看| 亚洲福利视频一区| 麻豆久久久久久| 91成人在线免费观看| 欧美电影免费提供在线观看| 中文字幕精品在线不卡| 天堂va蜜桃一区二区三区漫画版|