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

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

?? filemon.c

?? 這是很舊的一個文件系統過濾驅動,FILEMON構架的,目前這種技術已經不流行了,但是里面的一些算法還是對學習如何開發文件系統過濾驅動很有幫助
?? C
?? 第 1 頁 / 共 4 頁
字號:
            FilemonConvertPath( CONVERT_STANDARD, Drive, origir, CodePage, fullpathname );

        } else {

            sprintf( fullpathname, "%c:", Drive+'A'-1);
        }
        TIME_DIFF();
        log = FALSE;
        switch( origir->ir_flags ) {
        case CREATE_DIR:
            sprintf(data, "CREATE");
            if( FilterDef.logwrites ) log = TRUE;
            break;
        case DELETE_DIR:
            sprintf(data,"DELETE");
            if( FilterDef.logwrites ) log = TRUE;
            break;
        case CHECK_DIR:
            sprintf(data,"CHECK");
            if( FilterDef.logreads ) log = TRUE;
            break;
        default:
            sprintf(data,"QUERY");
            if( FilterDef.logreads ) log = TRUE;
            break;
        }
        if( log ) {
            LogRecord( timelo, datetimelo, datetimehi, "%s\tDirectory\t%s\t%s\t%s", 
                       processname, 
                       fullpathname,
                       data, ErrorString( retval ));
        }
        break;

    case IFSFN_SEEK:
        FilemonGetFullPath( origir->ir_fh, fullpathname, Drive, ResType, CodePage, origir );
        if( FilterDef.logreads) {

            TIME_DIFF();
            sprintf(data, "%s Offset: %ld / New offset: %ld",
                    origir->ir_flags == FILE_BEGIN ? "Beginning" : "End",
                    origir->ir_pos, origir->ir_pos );        
            LogRecord( timelo, datetimelo, datetimehi, "%s\tSeek\t%s\t%s\t%s", 
                       processname, fullpathname,
                       data, ErrorString( retval ));
        }
        break;

    case IFSFN_COMMIT:
        FilemonGetFullPath( origir->ir_fh, fullpathname, Drive, ResType, CodePage, origir );
        if( FilterDef.logwrites) {

            TIME_DIFF();
            sprintf(data, "%s", origir->ir_options == FILE_COMMIT_ASYNC ? 
                    "ASYNC" : "NOACCESSUPDATE" );
            LogRecord( timelo, datetimelo, datetimehi, "%s\tCommit\t%s\t%s\t%s", 
                       processname, fullpathname,
                       data, ErrorString( retval ));
        }
        break;

    case IFSFN_FILELOCKS:
        FilemonGetFullPath( origir->ir_fh, fullpathname, Drive, ResType, CodePage, origir );
        if( FilterDef.logreads) {

            TIME_DIFF();
            sprintf(data, "Offset: %ld Length:%ld", origir->ir_pos, origir->ir_locklen );
            LogRecord( timelo, datetimelo, datetimehi, "%s\t%s\t%s\t%s\t%s", 
                       processname, origir->ir_flags == LOCK_REGION ? "Lock" : "Unlock",
                       fullpathname,
                       data, ErrorString( retval ));
        }
        break;

    case IFSFN_FINDOPEN:
        if( FilterDef.logreads) {	

            FilemonConvertPath( CONVERT_FINDOPEN, Drive, origir, CodePage, fullpathname );
            TIME_DIFF();
            if( !retval ) {

                finddata = (_WIN32_FIND_DATA *) origir->ir_data;
                UniToBCS( data, finddata->cFileName, wstrlen(finddata->cFileName), MAXPATHLEN-1, BCS_WANSI, &result );
                data[ result.ddLower ] = 0;
            }
            LogRecord( timelo, datetimelo, datetimehi, "%s\tFindOpen\t%s\t%s\t%s", 
                       processname, fullpathname,
                       data, ErrorString( retval ));
        }
        FilemonLogHash( Drive, pir->ir_fh, fullpathname );
        break;

    case IFSFN_FINDNEXT:
        FilemonGetFullPath( origir->ir_fh, fullpathname, Drive, ResType, CodePage, origir );
        if( FilterDef.logreads) {	

            TIME_DIFF();
            if( !retval ) {
                finddata = (_WIN32_FIND_DATA *) origir->ir_data;
                UniToBCS( data, finddata->cFileName, wstrlen(finddata->cFileName), MAXPATHLEN-1, BCS_WANSI, &result );
                data[ result.ddLower ] = 0;
            }

            LogRecord( timelo, datetimelo, datetimehi, "%s\tFindNext\t%s\t%s\t%s", 
                       processname, fullpathname,
                       data, ErrorString( retval ));
        }
        break;

    case IFSFN_FINDCLOSE:
        FilemonGetFullPath( origir->ir_fh, fullpathname, Drive, ResType, CodePage, origir );
        if( FilterDef.logreads) {	

            TIME_DIFF();
            LogRecord( timelo, datetimelo, datetimehi, "%s\tFindClose\t%s\t\t%s", 
                       processname, fullpathname,
                       ErrorString( retval ));
        }
        FilemonFreeHashEntry( Drive, origir->ir_fh );
        break;

    case IFSFN_FILEATTRIB:
        if( FilterDef.logreads) {    

            FilemonConvertPath( CONVERT_STANDARD, Drive, origir, CodePage, fullpathname );
            TIME_DIFF();
            switch(origir->ir_flags ) {
            case GET_ATTRIBUTES:
                sprintf(data,"GetAttributes");
                break;
            case SET_ATTRIBUTES:
                sprintf(data, "SetAttributes" );
                break;
            case GET_ATTRIB_COMP_FILESIZE:
                sprintf(data, "GET_ATTRIB_COMP_FILESIZE" );
                break;
            case SET_ATTRIB_MODIFY_DATETIME:
                sprintf(data, "SET_ATTRIB_MODIFY_DATETIME");
                break;
            case SET_ATTRIB_LAST_ACCESS_DATETIME:
                sprintf(data, "SET_ATTRIB_LAST_ACCESS_DATETIME");
                break;
            case GET_ATTRIB_LAST_ACCESS_DATETIME:
                sprintf(data, "GET_ATTRIB_LAST_ACCESS_DATETIME");
                break;
            case SET_ATTRIB_CREATION_DATETIME:
                sprintf(data, "SET_ATTRIB_CREATION_DATETIME");
                break;
            case GET_ATTRIB_CREATION_DATETIME:
                sprintf(data, "GET_ATTRIB_CREATION_DATETIME");
                break;
            }
            LogRecord( timelo, datetimelo, datetimehi, "%s\tAttributes\t%s\t%s\t%s", 
                       processname, fullpathname,
                       data, ErrorString( retval ));
        }
        break;

    case IFSFN_FILETIMES:
        FilemonGetFullPath( origir->ir_fh, fullpathname, Drive, ResType, CodePage, origir );
        if( FilterDef.logreads) {	

            TIME_DIFF();
            switch( origir->ir_flags ) {
            case GET_MODIFY_DATETIME:
                sprintf(data, "Get Modify");
                break;
            case SET_MODIFY_DATETIME:
                sprintf(data, "Set Modify");
                break;
            case GET_LAST_ACCESS_DATETIME:
                sprintf(data, "Get Access");
                break;
            case SET_LAST_ACCESS_DATETIME:
                sprintf(data, "Set Access");
                break;
            case GET_CREATION_DATETIME:
                sprintf(data, "Get Creation");
                break;
            case SET_CREATION_DATETIME:
                sprintf(data, "Set Creation");
                break;
            }
            LogRecord( timelo, datetimelo, datetimehi, "%s\tAttributes\t%s\t%s\t%s", 
                       processname, fullpathname,
                       data, ErrorString( retval ));
        }
        break;

    case IFSFN_FLUSH:
        if( FilterDef.logwrites) {

            TIME_DIFF();
            LogRecord( timelo, datetimelo, datetimehi, "%s\tFlushVolume\t\t\t%s",
                       processname, ErrorString( retval ));
        }
        break;

    case IFSFN_DELETE:
        if( FilterDef.logwrites) {    

            FilemonConvertPath( CONVERT_STANDARD, Drive, origir, CodePage, fullpathname );
            TIME_DIFF();
            LogRecord( timelo, datetimelo, datetimehi, "%s\tDelete\t%s\t\t%s", 
                       processname, fullpathname, ErrorString( retval ));
        }
        FilemonFreeHashEntry( Drive, origir->ir_fh );
        break;

    case IFSFN_SEARCH:
        if( FilterDef.logreads ) {

            if( origir->ir_flags == SEARCH_FIRST ) 
                FilemonConvertPath( CONVERT_STANDARD, Drive, origir, CodePage, fullpathname );
            else
                sprintf(fullpathname, "SearchNext" );
            TIME_DIFF();
            if( !retval ) {
                j = 0;
                if( origir->ir_attr & FILE_ATTRIBUTE_LABEL ) {
                    sprintf(data, "VolumeLabel: " );
                    j = strlen( data );
                }
                search = (struct srch_entry *) origir->ir_data;
                for( i = 0; i < 13; i++ ) 
                    if( search->se_name[i] != ' ' ) data[j++] = search->se_name[i];
                data[j] = 0;
            }
            LogRecord( timelo, datetimelo, datetimehi, "%s\tSearch\t%s\t%s\t%s", 
                       processname, fullpathname, data, ErrorString( retval ));    
        }
        break;
    
    case IFSFN_GETDISKINFO:

        if( FilterDef.logreads ) {

            TIME_DIFF();
            if( !retval ) sprintf(data, "Free Space");
            drivestring[0] = Drive+'A'-1;
            drivestring[1] = ':';
            drivestring[2] = 0;
            LogRecord( timelo, datetimelo, datetimehi, "%s\tGetDiskInfo\t%s\t%s\t%s",
                       processname, drivestring, data, ErrorString( retval ));
        }
        break;

    case IFSFN_RENAME:
        if( FilterDef.logwrites) {          

            FilemonConvertPath( CONVERT_RENAME_SOURCE, Drive, origir, CodePage, fullpathname );
            TIME_DIFF();
            LogRecord( timelo, datetimelo, datetimehi, "%s\tRename\t%s\t%s\t%s",
                       processname, fullpathname,
                       FilemonConvertPath( CONVERT_RENAME_TARGET, Drive, origir, CodePage, data ),
                       ErrorString( retval ));		 
        }
        break;
    case IFSFN_IOCTL16DRIVE:
        if( FilterDef.logreads || FilterDef.logwrites) {

            TIME_DIFF();
            sprintf(data, "Subfunction: %02Xh", origir->ir_flags );
            drivestring[0] = Drive+'A'-1;
            drivestring[1] = ':';
            drivestring[2] = 0;
            LogRecord( timelo, datetimelo, datetimehi, "%s\tIoctl\t%s\t%s\t%s",
                       processname, drivestring, data, ErrorString( retval ));
        }
        break;
    }
    dprintf("==>%d\n", fn );
    return retval;
}
#pragma optimize("", on)

//----------------------------------------------------------------------
//
// OnSysDynamicDeviceInit
//
// Dynamic init. Install a file system filter hook.
//
//----------------------------------------------------------------------
BOOL 
OnSysDynamicDeviceInit(
    VOID
    )
{
    int i;
    MEMHANDLE hLog;

    //
    // Initialize the locks.
    //
    LogMutex = Create_Semaphore(1);
    HashMutex  = Create_Semaphore(1);
    FilterMutex  = Create_Semaphore(1);

    // 
    // Zero hash table.
    //
    for(i = 0; i < NUMHASH; i++ ) HashTable[i] = NULL;

    //
    // Allocate the initial output buffer.
    //
    PageAllocate(LOGBUFPAGES, PG_SYS, 0, 0, 0, 0, NULL, PAGELOCKED, 
                 (PMEMHANDLE) &hLog, (PVOID) &Log );
    Log->Handle = hLog;
    Log->Len = 0;
    Log->Next = NULL;
    NumLog = 1;

    //
    // Hook IFS functions.
    //
    PrevIFSHookProc = IFSMgr_InstallFileSystemApiHook(FilemonHookProc);
    return TRUE;
}

//----------------------------------------------------------------------
//
// OnSysDynamicDeviceExit
//
// Dynamic exit. Unhook everything.
//
//----------------------------------------------------------------------
BOOL 
OnSysDynamicDeviceExit(
    VOID
    )
{
    //
    // Unhook IFS functions.
    //
    IFSMgr_RemoveFileSystemApiHook(FilemonHookProc);

    //
    // Free all memory.
    //
    FilemonHashCleanup();
    FilemonFreeLog();
    FilemonFreeFilters();
    return TRUE;
}

//----------------------------------------------------------------------
//
// OnW32Deviceiocontrol
//
// Interface with the GUI.
//
//----------------------------------------------------------------------
DWORD 
OnW32Deviceiocontrol(
    PIOCTLPARAMS p
    )
{
    PLOG_BUF      old;

    switch( p->dioc_IOCtlCode ) {
    case 0:
        return ERROR_SUCCESS;

    case IOCTL_FILEMON_ZEROSTATS:

        Wait_Semaphore( LogMutex, BLOCK_SVC_INTS );
        while ( Log->Next )  {
 
            //
            // Release the next entry.
            //
            old = Log->Next;
            Log->Next = old->Next;
            Signal_Semaphore( LogMutex );
            PageFree( old->Handle, 0 );
            Wait_Semaphore( LogMutex, BLOCK_SVC_INTS );
            NumLog--;
        }
        Log->Len = 0;
        Signal_Semaphore( LogMutex );
        Sequence = 0;
        return ERROR_SUCCESS;

    case IOCTL_FILEMON_GETSTATS:

        //
        // Copy buffer into user space.
        Wait_Semaphore( LogMutex, BLOCK_SVC_INTS );
        if ( LOGBUFSIZE > p->dioc_cbOutBuf ) {

            //
            // Buffer is too small. Return error.
            //
            Signal_Semaphore( LogMutex );
            return ERROR_INSUFFICIENT_BUFFER;

        } else if ( Log->Len  ||  Log->Next ) {

            //
            // Switch to a new buffer.
            //
            FilemonNewLog();

            //
            // Fetch the oldest buffer to give to caller.
            //
            old = FilemonOldestLog();
            Signal_Semaphore( LogMutex );

            //
            // Copy it into the caller's buffer.
            //
            memcpy( p->dioc_OutBuf, old->Data, old->Len );

            //
            // Return length of copied info.
            //
            *p->dioc_bytesret = old->Len;

            //   
            // Deallocate the buffer.
            //
            PageFree( old->Handle, 0 );

        } else {

            //
            // There is no unread data.
            //
            Signal_Semaphore( LogMutex );
            *p->dioc_bytesret = 0;
        }
        return ERROR_SUCCESS;

    case IOCTL_FILEMON_STOPFILTER:

        FilterOn = FALSE;
        return ERROR_SUCCESS;

    case IOCTL_FILEMON_STARTFILTER:

        FilterOn = TRUE;
        return ERROR_SUCCESS;

    case IOCTL_FILEMON_SETFILTER:

        FilterDef = * (PFILTER) p->dioc_InBuf;
        FilemonUpdateFilters();
        return ERROR_SUCCESS;

    default:
        return ERROR_INVALID_FUNCTION;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费视频app| 最新久久zyz资源站| 日韩国产在线观看一区| 欧美日韩午夜影院| 日韩精品欧美成人高清一区二区| 欧美亚洲一区二区三区四区| 亚洲福利一区二区三区| 日韩免费一区二区三区在线播放| 久草热8精品视频在线观看| 欧美精品一区二区精品网| 国产凹凸在线观看一区二区| 国产精品国产成人国产三级 | 91精品在线免费| 奇米综合一区二区三区精品视频| 精品日韩欧美在线| 国产高清无密码一区二区三区| 中文字幕中文在线不卡住| 91国偷自产一区二区使用方法| 日日夜夜免费精品视频| 26uuu另类欧美亚洲曰本| 波波电影院一区二区三区| 亚洲一区二区三区四区不卡| 91精品国产综合久久精品| 国产成人av福利| 亚洲男人的天堂在线aⅴ视频| 欧美欧美欧美欧美| 大桥未久av一区二区三区中文| 亚洲在线免费播放| 久久综合久久综合久久综合| 色偷偷成人一区二区三区91| 精品一区精品二区高清| 亚洲人妖av一区二区| 日韩免费电影网站| 97国产一区二区| 麻豆91精品视频| 一区二区三区鲁丝不卡| 精品成a人在线观看| 91年精品国产| 国产精品一区二区x88av| 一区二区三区av电影| 久久青草国产手机看片福利盒子| 欧美性感一类影片在线播放| 国产精品亚洲专一区二区三区 | 亚洲欧美另类图片小说| 精品国产一区a| 欧美丰满少妇xxxxx高潮对白| 成人免费观看男女羞羞视频| 人妖欧美一区二区| 亚洲一区二区在线免费看| 中文字幕乱码久久午夜不卡| 日韩美女在线视频| 欧美日韩高清在线| 在线一区二区视频| 不卡一二三区首页| 粉嫩一区二区三区性色av| 久久国产夜色精品鲁鲁99| 五月开心婷婷久久| 亚洲午夜成aⅴ人片| 日韩毛片精品高清免费| 亚洲福利视频一区二区| 亚洲另类春色国产| 国产精品美女久久久久aⅴ国产馆| 精品久久久久99| 91精品欧美久久久久久动漫| 在线精品国精品国产尤物884a| 99久久伊人精品| 成人黄色a**站在线观看| 国产福利不卡视频| 国产一二精品视频| 国产乱码精品一区二区三区忘忧草 | 亚洲国产一区在线观看| 国产精品国产自产拍在线| 国产欧美一区在线| 国产情人综合久久777777| 久久精品一区二区三区不卡 | 亚洲激情自拍偷拍| 尤物视频一区二区| 一区二区三区久久久| 亚洲综合无码一区二区| 亚洲综合视频网| 亚洲电影在线播放| 视频一区视频二区中文字幕| 日韩精品91亚洲二区在线观看| 一区二区三区波多野结衣在线观看| 亚洲黄色尤物视频| 亚洲妇熟xx妇色黄| 蜜桃视频一区二区| 国内精品嫩模私拍在线| 国产精品一色哟哟哟| 成人18精品视频| 色婷婷久久久久swag精品| 欧美日精品一区视频| 在线电影国产精品| 亚洲精品一线二线三线| 国产日本一区二区| 亚洲视频免费看| 亚洲va欧美va人人爽| 日本在线不卡视频| 国产精一区二区三区| 99免费精品在线观看| 欧美日韩免费观看一区三区| 日韩欧美另类在线| 国产精品久久久久精k8| 亚洲综合无码一区二区| 久久精品99国产精品| 成人黄色一级视频| 精品婷婷伊人一区三区三| 欧美成人女星排名| 国产精品久久久久久久久免费樱桃| 一区二区三区中文字幕| 六月丁香综合在线视频| 成人深夜视频在线观看| 欧美日韩国产欧美日美国产精品| 精品日韩在线观看| 亚洲视频一二三| 久久国产免费看| 一本一道综合狠狠老| 精品毛片乱码1区2区3区| 综合亚洲深深色噜噜狠狠网站| 亚洲成人高清在线| 国产一区二区三区综合| 国产日韩精品一区二区浪潮av| 亚洲一区二区三区四区在线观看| 久久99精品国产.久久久久久| 美日韩黄色大片| 91视频com| 久久色中文字幕| 亚洲成av人片| 91网上在线视频| 久久久天堂av| 免费成人在线视频观看| 日本韩国欧美国产| 久久精品亚洲麻豆av一区二区| 亚洲www啪成人一区二区麻豆| 99久久免费视频.com| 26uuu国产日韩综合| 香蕉av福利精品导航| av资源站一区| 欧美韩日一区二区三区四区| 蜜臀av一区二区三区| 欧美日韩久久一区| 亚洲靠逼com| 成人午夜伦理影院| 久久中文娱乐网| 美女尤物国产一区| 91麻豆精品国产91久久久| 一区二区日韩av| 99久久免费精品| 亚洲欧洲av在线| 丁香六月综合激情| 2020国产精品| 国产在线精品国自产拍免费| 91精品国产美女浴室洗澡无遮挡| 亚洲一区二区三区四区五区中文| 色综合天天综合| 中文字幕一区二区日韩精品绯色| 国产九色sp调教91| 国产视频不卡一区| 激情另类小说区图片区视频区| 777xxx欧美| 日韩精品一级中文字幕精品视频免费观看| 在线观看91视频| 亚洲一级二级三级在线免费观看| 91网页版在线| 一区二区三区蜜桃| 欧美日韩中文国产| 日韩不卡一区二区| 日韩三级视频中文字幕| 久久国产精品一区二区| 日韩一级免费一区| 美女国产一区二区三区| 精品国产乱码久久久久久久久| 国内精品久久久久影院色| 精品久久国产字幕高潮| 国产一区二区免费视频| 久久综合色综合88| 成人一区二区三区在线观看| 国产精品久久久久影院老司 | 亚洲一区二区综合| 欧美男同性恋视频网站| 丝袜亚洲另类欧美| 日韩一区二区不卡| 国产精品正在播放| 中文字幕一区二区三区乱码在线 | 精品人伦一区二区色婷婷| 久久se精品一区二区| 久久免费电影网| 91在线观看一区二区| 亚洲国产美女搞黄色| 91麻豆精品国产自产在线观看一区| 捆绑紧缚一区二区三区视频| 久久久久久久av麻豆果冻| 国产成人免费xxxxxxxx| 亚洲欧美另类久久久精品 | 久久99久久99精品免视看婷婷| 一区二区三区四区五区视频在线观看| 欧美日韩在线播放一区| 奇米影视一区二区三区| 欧美国产1区2区| 欧美日韩一区二区三区四区五区|