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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? api.c

?? FAT文件系統(tǒng)源代碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
 *      Commit/close functions are exempted simply to allow us to block all
 *      threads and cleanly flush/unmount a volume without deadlocking.
 */

BOOL FATEnter(PVOLUME pvol, BYTE idLog)
{
    if (cLoads == 0) {
        SetLastError(ERROR_NOT_READY);
        return FALSE;
    }
    InterlockedIncrement(&cFATThreads);

    if (!BufEnter(pvol, FALSE)) {
        DEBUGMSGW(ZONE_ERRORS, (DBGTEXTW("FATFS!FATEnter: BufEnter failed, failing API request!\r\n")));
        InterlockedDecrement(&cFATThreads);
        return FALSE;
    }

    return TRUE;
}

void FATEnterQuick(void)
{
    InterlockedIncrement(&cFATThreads);
}


/*  FATExit  - Gates threads exiting FATFS
 *
 *  ENTRY
 *      idLog - one of the LOGID_* equates
 *
 *  EXIT
 *      None
 *
 *  NOTES
 *      Called at the end of most FATFS API entry points.  If we are
 *      the last thread, and the shutdown bit is set, then we will signal
 *      the shutdown event.  The shutdown event is initially reset AND
 *      auto-reset.
 *
 *      Also, if there is any risk of code inside here modifying the error code
 *      we set via SetLastError (if any), then that code must always save/restore
 *      the last error code.  I think even if all the APIs it calls succeeds, some 
 *      of those APIs may do something like "SetLastError(0)" when they initialize, 
 *      so we have to guard against that.
 *
 *  QUALIFICATIONS
 *      This is currently called only on every FATFS API entry point that
 *      could possibly generate I/O (with the exception of commit/close).  If
 *      a thread slips into GetFileTime, for example, who cares?  This could be
 *      restricted even further, and called only on entry points that could
 *      possibly generate WRITES, but since we ALSO want to ensure that shutdowns
 *      are timely (as well as safe), preventing as much I/O as possible seems
 *      worthwhile.
 *
 *      Commit/close functions are exempted simply to allow us to block all
 *      threads and cleanly flush/unmount a volume without deadlocking.
 */

void FATExit(PVOLUME pvol, BYTE idLog)
{
    BufExit(pvol);

    if (InterlockedDecrement(&cFATThreads) == 0) {
    }
}

void FATExitQuick(void)
{
    InterlockedDecrement(&cFATThreads);
}




/*  FATAttach - DLL_PROCESS_ATTACH handler
 *
 *  ENTRY
 *      None
 *
 *  EXIT
 *      TRUE if successful, FALSE if not.  Most failures can probably
 *      be attributed to insufficient memory.
 *
 *  NOTES
 *      This is assumed to be protected by a critical section.  Since it is
 *      currently called only by FATMain, we are protected by the loader's
 *      critical section.
 */

BOOL FATAttach()
{
    BOOL fInit = TRUE;

    if (cLoads++ == 0) {
        DEBUGREGISTER(hFATFS);
        
        InitList((PDLINK)&dlDisks);

#ifdef DEBUG
        InitializeCriticalSection(&csAlloc);
        DEBUGALLOC(DEBUGALLOC_CS);
#endif
        InitializeCriticalSection(&csFATFS);
        DEBUGALLOC(DEBUGALLOC_CS);

        hevStartup  = CreateEvent(NULL, TRUE, TRUE, NULL);
        DEBUGALLOC(DEBUGALLOC_EVENT);
        hevShutdown = CreateEvent(NULL, FALSE, FALSE, NULL);
        DEBUGALLOC(DEBUGALLOC_EVENT);

        hHeap = HeapCreate (0, 0x1000, 0);
    }
    return hevStartup && hevShutdown && hHeap && fInit;
}


/*  FATDetach - DLL_PROCESS_DETACH handler
 *
 *  ENTRY
 *      None
 *
 *  EXIT
 *      TRUE if successful, FALSE if not (currently, it always returns TRUE)
 *
 *  NOTES
 *      This is assumed to be protected by a critical section.  Since it is
 *      currently called only by FATMain, we are protected by the loader's
 *      critical section.
 */

BOOL FATDetach()
{
        // Now make sure every file is closed and every volume is freed,
        // so that we don't leak any memory.  We have deliberately omitted
        // FATEnter/FATExit from FAT_CloseAllFiles and FAT_CloseFile
        // to avoid deadlocking if any files *do* need to be closed.

        UnmountAllDisks(FALSE);

        DEBUGFREE(DEBUGALLOC_EVENT);
        CloseHandle(hevShutdown);
        DEBUGFREE(DEBUGALLOC_EVENT);
        CloseHandle(hevStartup);

        DEBUGFREE(DEBUGALLOC_CS);
        DeleteCriticalSection(&csFATFS);
#ifdef DEBUG
        DEBUGFREE(DEBUGALLOC_CS);
        DeleteCriticalSection(&csAlloc);
#endif

        HeapDestroy (hHeap);
    
        DEBUGMSG(ZONE_INIT,(DBGTEXT("FATFS!FATDetach complete (%d sectors written in %d requests)\r\n"), csecWrite, creqWrite)); 
        return TRUE;
}


BOOL FSD_MountDisk(HDSK hDsk)
{
    DWORD flVol;
    PDSK pdsk = NULL;
    TCHAR szName[MAX_PATH];
    STORAGEDEVICEINFO sdi;
    DWORD dwRet;

    wsprintf(szName, L"%08X", hDsk);
    RETAILMSG(1,(L"FSD_MountDisk hDsk=%08X\r\n",hDsk));
    DEBUGMSGW(ZONE_INIT || ZONE_APIS,(DBGTEXTW("FSD_MountDisk: mounting volumes for hDsk=%08X\r\n"), hDsk));

    flVol = VOLF_NONE;
    
    memset (&sdi, 0, sizeof(STORAGEDEVICEINFO));
    sdi.cbSize = sizeof(STORAGEDEVICEINFO);
    
    if (FSDMGR_DiskIoControl(hDsk, IOCTL_DISK_DEVICE_INFO, &sdi, sizeof(STORAGEDEVICEINFO), NULL, 0, &dwRet, NULL)) {
        if (sdi.dwDeviceFlags & STORAGE_DEVICE_FLAG_READONLY) {
            flVol = VOLF_READONLY;
        }
    }

    DEBUGALLOC(DEBUGALLOC_HANDLE);

    pdsk = MountDisk((HANDLE)hDsk, szName, flVol);

    if (pdsk) {
        pdsk->d_flags |= flVol;     // VOLF_READONLY maps to DSKF_READONLY

        if (pdsk->d_flags & (DSKF_REMOUNTED | DSKF_RECYCLED)) {
            // Make sure the REMOUNT bit in the VOLUME pointer is set
            (DWORD)pdsk |= 0x1;
        }
    }
    
    DEBUGMSG(ZONE_APIS,(DBGTEXT("FSD_Init returned 0x%x\r\n"), pdsk));
    return (pdsk != NULL);
}



BOOL FSD_UnmountDisk(HDSK hDsk)
{
    BOOL fSuccess = TRUE;
    PDSK pdsk = NULL;

    DEBUGMSG(ZONE_INIT || ZONE_APIS,(DBGTEXT("FSD_UnmountDisk(0x%x): unmounting...\r\n"), hDsk));
    RETAILMSG(1,(L"FSD_UnmountDisk 0x%x\r\n",hDsk));
    EnterCriticalSection(&csFATFS);
    if (!hDsk) {
        // Unmount all volumes still marked frozen on all disks
        fSuccess = UnmountAllDisks(TRUE);
    }
    else if (pdsk = FindDisk((HANDLE)hDsk, NULL, NULL)) {
        // Make sure the REMOUNT bit in the VOLUME pointer is clear
        (DWORD)pdsk &= ~1;
        fSuccess = UnmountDisk(pdsk, FALSE);
    }
    LeaveCriticalSection( &csFATFS);
    DEBUGMSG(ZONE_APIS,(DBGTEXT("FSD_Deinit(0x%x) returned %d\r\n"), pdsk, fSuccess));
    return fSuccess;
}


/*  FATMain - FATFS.DLL initialization entry point
 *
 *  ENTRY
 *      DllInstance - DLL module handle
 *      Reason - DLL_* initialization message
 *      Reserved - reserved
 *
 *  EXIT
 *      TRUE if successful, FALSE if not.  Most failures can probably
 *      be attributed to insufficient memory.
 */

BOOL WINAPI DllMain(HANDLE DllInstance, DWORD Reason, LPVOID Reserved)
{
    switch(Reason) {

    case DLL_PROCESS_ATTACH:

        // DEBUGMSG(ZONE_INIT,(DBGTEXT("FATFS!FATMain: DLL_PROCESS_ATTACH\r\n")));

		
        DisableThreadLibraryCalls( (HMODULE)DllInstance);
        hFATFS = (HINSTANCE)DllInstance;
        return FATAttach();

    case DLL_PROCESS_DETACH:
      //DEBUGMSG(ZONE_INIT,(DBGTEXT("FATFS!FATMain: DLL_PROCESS_DETACH\r\n")));
        return FATDetach();

    default:
      //DEBUGMSG(ZONE_INIT,(DBGTEXT("FATFS!FATMain: Reason #%d ignored\r\n"), Reason));
        break;
    }
    return TRUE;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久电影| 欧美精品一区二区三区在线播放| 日韩精品一区二区三区swag | 色婷婷综合久久久中文一区二区| 国产精品乱码人人做人人爱| 日本vs亚洲vs韩国一区三区二区 | av网站免费线看精品| 亚洲国产裸拍裸体视频在线观看乱了| 欧美精品免费视频| 色综合天天综合给合国产| 日本大胆欧美人术艺术动态| 国产精品国产a| 久久久久久久久久久久久女国产乱| 欧美日韩一级片在线观看| 国产精品中文欧美| 蜜臀91精品一区二区三区| 亚洲精品国产a久久久久久| 国产精品日韩成人| 国产午夜精品久久久久久久 | 国产精品福利在线播放| 欧美sm美女调教| 欧美一区二区三区喷汁尤物| 欧美视频在线观看一区| 91麻豆免费看片| 91黄色免费看| 在线成人午夜影院| 欧美日本视频在线| 欧美巨大另类极品videosbest| 91美女视频网站| 在线一区二区视频| 欧美老肥妇做.爰bbww视频| 色婷婷亚洲精品| 日韩视频免费观看高清完整版在线观看| 91看片淫黄大片一级| 一本大道久久精品懂色aⅴ| 日本乱码高清不卡字幕| 欧美日韩中文字幕一区二区| 欧美精品99久久久**| 精品日韩一区二区三区| 亚洲天天做日日做天天谢日日欢| 亚洲国产成人一区二区三区| 久久久久久免费毛片精品| 亚洲综合丝袜美腿| 日本一道高清亚洲日美韩| 97精品国产97久久久久久久久久久久| 在线综合视频播放| 亚洲资源在线观看| 国产91富婆露脸刺激对白| 久久激情五月激情| 国产成人精品1024| 在线观看一区二区精品视频| 欧美丝袜自拍制服另类| 51午夜精品国产| 久久精品亚洲精品国产欧美| 综合网在线视频| 天天综合天天综合色| 久久国产福利国产秒拍| 91色|porny| 欧美成人福利视频| 亚洲色图丝袜美腿| 蜜桃久久久久久久| 91在线播放网址| 日韩视频免费观看高清完整版 | 欧美日本在线看| 亚洲欧洲av在线| 婷婷久久综合九色综合伊人色| 国产真实乱对白精彩久久| 日韩电影免费一区| 国产精品久久久久久久浪潮网站| 国产精品久久久久一区二区三区 | 欧美日韩一区在线观看| 一本到高清视频免费精品| 欧美tickle裸体挠脚心vk| 亚洲日本中文字幕区| 欧美色网一区二区| 欧美成人女星排名| 一区二区日韩av| 国产成人精品亚洲午夜麻豆| 欧美日韩国产天堂| 欧美乱熟臀69xxxxxx| 国产精品欧美一级免费| 国产在线精品一区二区不卡了| 欧美三级电影在线观看| 婷婷国产在线综合| 色综合久久久久综合体桃花网| 久久精品男人天堂av| thepron国产精品| 这里只有精品99re| 成人在线视频一区| 韩日欧美一区二区三区| 亚洲午夜久久久久久久久电影院| 国产精品视频一二三区| 国产成人免费视频网站| 欧美国产成人精品| 色八戒一区二区三区| 亚洲成人黄色影院| 精品国产自在久精品国产| 国产尤物一区二区| 亚洲欧美综合另类在线卡通| 欧美这里有精品| 久久国产日韩欧美精品| 日本一区二区三区四区 | 26uuu精品一区二区在线观看| 精品国产免费人成在线观看| 欧美一区二区三区人| 538在线一区二区精品国产| 欧美日韩成人高清| 欧美区在线观看| 日韩一级欧美一级| 久久综合久久综合久久综合| 精品国产一区二区三区av性色| 日韩写真欧美这视频| www国产精品av| 国产精品狼人久久影院观看方式| 国产精品久久久久久妇女6080| 国产精品久久一级| 日韩欧美一级精品久久| gogo大胆日本视频一区| 日韩精品91亚洲二区在线观看| 欧美一区二区三区啪啪| 国产一区二区三区观看| 精品一二三四区| 欧美人牲a欧美精品| 欧美伊人久久久久久久久影院| 91精品一区二区三区久久久久久| 亚洲va国产va欧美va观看| 欧美日韩国产色站一区二区三区| 亚洲图片一区二区| 91精品国产综合久久久久| 免费成人在线影院| 久久中文字幕电影| 成人午夜私人影院| 亚洲日本在线视频观看| 在线看不卡av| 日韩国产成人精品| 精品91自产拍在线观看一区| 国产精品亚洲视频| 18欧美亚洲精品| 欧美日韩在线不卡| 美脚の诱脚舐め脚责91| 久久品道一品道久久精品| 国产成人一级电影| 亚洲精品视频在线看| 欧美久久久影院| 国产一区二区三区不卡在线观看| 中文字幕av一区 二区| 在线免费精品视频| 蜜乳av一区二区| 国产精品乱码人人做人人爱| 欧美性极品少妇| 久久99精品久久久久久久久久久久| 欧美韩国日本不卡| 国产欧美日韩另类视频免费观看| 色综合婷婷久久| 日韩成人精品视频| 欧美激情在线看| 在线观看日韩毛片| 国产一区二区三区国产| 亚洲精品免费在线| 精品免费99久久| 91小视频在线| 久久精品国产**网站演员| 最新久久zyz资源站| 日韩一区二区在线看片| 99久久精品免费看国产| 日韩成人午夜电影| 亚洲素人一区二区| 日韩欧美成人午夜| 色婷婷综合久久久中文一区二区| 久久精品99国产精品日本| 中文字幕中文字幕一区二区| 欧美一区二区三区影视| jizzjizzjizz欧美| 精品影视av免费| 亚洲午夜电影网| 中文字幕在线观看不卡| 欧美一级欧美一级在线播放| 一本色道**综合亚洲精品蜜桃冫| 久久国产精品无码网站| 亚洲最快最全在线视频| 国产校园另类小说区| 欧美精品视频www在线观看| eeuss鲁一区二区三区| 久久av资源网| 亚洲一区二区三区激情| 国产精品美女久久久久久久久| 欧美一区二区人人喊爽| 色哟哟在线观看一区二区三区| 国产一区二区三区av电影| 婷婷综合另类小说色区| 亚洲三级电影网站| 欧美激情综合五月色丁香 | 精品久久一区二区| 欧美日韩国产a| 色天天综合久久久久综合片| 成人性生交大片免费看中文| 精品写真视频在线观看| 秋霞午夜av一区二区三区| 亚洲午夜久久久久久久久久久 | 国产一区二区福利视频|