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

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

?? wd_misc.c

?? ucfs嵌入式文件系統,經典實力開發,與大家一起分享
?? C
字號:
/************************************************************************                          Micrium, Inc.*                      949 Crestview Circle*                     Weston,  FL 33327-1848**                            uC/FS**                (c) Copyright 2002, Micrium, Inc.*                      All rights reserved.************************************************************************----------------------------------------------------------------------
File        : wd_misc.c
Purpose     : Device Driver using Windows I/O function for logical sector
              access.
----------------------------------------------------------------------
Known problems or limitations with current version
----------------------------------------------------------------------
None.
---------------------------END-OF-HEADER------------------------------
*/

/*********************************************************************
*
*             #include Section
*
**********************************************************************
*/

#include "fs_port.h"
#include "fs_dev.h" 
#include "fs_lbl.h" 
#include "fs_conf.h"
#include "fs_api.h"
#include <string.h>

#if FS_USE_WINDRIVE_DRIVER

#ifndef _WIN32
#error Driver requires Windows API
#endif /* _WIN32 */

#include <windows.h>


/*********************************************************************
*
*             Local data types
*
**********************************************************************
*/

typedef struct {
  FS_u32 block;
  char buffer[FS_WD_BLOCKSIZE];
} _FS_wd_cachetype;


/*********************************************************************
*
*             Local variables        
*
**********************************************************************
*/

static HANDLE _hdrive[FS_WD_MAXUNIT];
static _FS_wd_cachetype  _FS_wd_cache[FS_WD_MAXUNIT][FS_WD_CACHENUM];
static int _FS_wd_cache_index[FS_WD_MAXUNIT];
static _FS_wd_cachetype  _FS_wd_wbuffer[FS_WD_MAXUNIT][FS_WD_WBUFFNUM];
static int _online[FS_WD_MAXUNIT];


/*********************************************************************
*
*             Local functions
*
**********************************************************************
*/

/*********************************************************************
*
*             _FS_WD_DevStatus
*/

static int _FS_WD_DevStatus(FS_u32 id) {
  int i;

  if (!_online[id]) {
    _online[id] = 1;
    if (id==0) {
      _hdrive[id] = CreateFile (FS_WD_DEV0NAME, 
                     GENERIC_READ | GENERIC_WRITE,
                     FILE_SHARE_READ|FILE_SHARE_WRITE,
                     NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
                     NULL);
    }
    else {
      _hdrive[id] = CreateFile (FS_WD_DEV1NAME, 
                     GENERIC_READ | GENERIC_WRITE,
                     FILE_SHARE_READ|FILE_SHARE_WRITE,
                     NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
                     NULL);
    }

    for (i=0;i<FS_WD_CACHENUM;i++) {
      _FS_wd_cache[id][i].block=-1;
    }
    _FS_wd_cache_index[id] = 0;

    for (i=0;i<FS_WD_WBUFFNUM;i++) {
      _FS_wd_wbuffer[id][i].block=-1;
    }

    return FS_LBL_MEDIACHANGED;
  }
  return 0;
}


/*********************************************************************
*
*             _FS_WD_DevRead
*/

static int _FS_WD_DevRead(FS_u32 id, FS_u32 block, void *buffer) {
  DWORD bytenum;
  int i;

  /* check if buffer in wbuffer */
  i = 0;
  while (i<FS_WD_WBUFFNUM) {
    if (_FS_wd_wbuffer[id][i].block==block) {
      memcpy(buffer,_FS_wd_wbuffer[id][i].buffer,512);
      return 0;
    }
    i++;
  }
  
  for (i=0;i<FS_WD_CACHENUM;i++) {
    if (_FS_wd_cache[id][i].block==block) {
      memcpy(buffer,_FS_wd_cache[id][i].buffer,512);
      return 0;
    }
  }

  SetFilePointer(_hdrive[id],block*512,0,FILE_BEGIN);
  ReadFile(_hdrive[id], buffer, 512, &bytenum, NULL);
  
  _FS_wd_cache[id][_FS_wd_cache_index[id]].block = block;
  memcpy(_FS_wd_cache[id][_FS_wd_cache_index[id]].buffer,buffer,512);
  _FS_wd_cache_index[id]++;
  if (_FS_wd_cache_index[id]>=FS_WD_CACHENUM) {
    _FS_wd_cache_index[id] = 0;
  }

  return 0;
}


/*********************************************************************
*
*             _FS_WD_DevWrite
*/

static int _FS_WD_DevWrite(FS_u32 id, FS_u32 block, void *buffer) {
  DWORD bytenum;
  int i,j;

  /* clear in read cache */
  for (i=0;i<FS_WD_CACHENUM;i++) {
    if (_FS_wd_cache[id][i].block==block) {
      _FS_wd_cache[id][i].block = -1;
    }
  }

  /* check if buffer in wbuffer */
  i = 0;
  while (i<FS_WD_WBUFFNUM) {
    if (_FS_wd_wbuffer[id][i].block==block) {
      memcpy(_FS_wd_wbuffer[id][i].buffer,buffer,512);
      return 0;
    }
    i++;
  }

  /* check for free wbuffer */
  i = 0;
  while (i<FS_WD_WBUFFNUM) {
    if (_FS_wd_wbuffer[id][i].block==-1) {
      memcpy(_FS_wd_wbuffer[id][i].buffer,buffer,512);
      _FS_wd_wbuffer[id][i].block = block;
      return 0;
    }
    i++;
  }

  /* write back complete cache  */
  i = 0;
  while ((_FS_wd_wbuffer[id][i].block==-1) && (i<FS_WD_WBUFFNUM)) {
    i++;
  }

  while (i<FS_WD_WBUFFNUM) {

    for (j=0;j<FS_WD_WBUFFNUM;j++) {
      if ((_FS_wd_wbuffer[id][j].block!=-1) &&
        (_FS_wd_wbuffer[id][j].block<_FS_wd_wbuffer[id][i].block)) {
        i = j;
      }
    }

    if (_FS_wd_wbuffer[id][i].block!=-1) {
      SetFilePointer(_hdrive[id],_FS_wd_wbuffer[id][i].block*512,0,FILE_BEGIN);
      WriteFile(_hdrive[id], _FS_wd_wbuffer[id][i].buffer,512, &bytenum, NULL);
      _FS_wd_wbuffer[id][i].block = -1;
    }

    i = 0;
    while ((_FS_wd_wbuffer[id][i].block==-1) && (i<FS_WD_WBUFFNUM)) {
      i++;
    }
  } 

  memcpy(_FS_wd_wbuffer[id][0].buffer,buffer,512);
  _FS_wd_wbuffer[id][0].block = block;


  return 0;
}


/*********************************************************************
*
*             _FS_WD_DevIoCtl
*/

static int _FS_WD_DevIoCtl(FS_u32 id, FS_i32 cmd, FS_i32 aux, void *buffer) {
  DWORD bytenum;
  int i;

  if (cmd==FS_CMD_FLUSH_CACHE) {
    if (_online[id]) {
      i = 0;
      while (i<FS_WD_WBUFFNUM) {
        if (_FS_wd_wbuffer[id][i].block!=-1) {
          SetFilePointer(_hdrive[id],_FS_wd_wbuffer[id][i].block*512,0,FILE_BEGIN);
          WriteFile(_hdrive[id], _FS_wd_wbuffer[id][i].buffer,512, &bytenum, NULL);
          _FS_wd_wbuffer[id][i].block = -1;
        }
        i++;
      }
      CloseHandle(_hdrive[id]);
      _online[id] = 0;
    }
  }
  return 0;
}


/*********************************************************************
*
*             Global variables        
*
**********************************************************************
*/

const FS__device_type FS__windrive_driver = {
  "Windrive driver",
  _FS_WD_DevStatus,
  _FS_WD_DevRead,
  _FS_WD_DevWrite,
  _FS_WD_DevIoCtl
};

#endif /* FS_USE_WINDRIVE_DRIVER */


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产精品99久久久久久老狼| 丁香天五香天堂综合| 一本色道久久综合亚洲精品按摩| 国产三级精品视频| 国产成人av影院| 国产三级精品三级| 丁香六月久久综合狠狠色| 欧美精品久久天天躁| 天天做天天摸天天爽国产一区| 在线免费观看日本一区| 亚洲一区电影777| 91麻豆精品国产91久久久使用方法| 一级日本不卡的影视| 欧美日韩成人综合| 精品一区二区久久久| 国产欧美一区二区三区在线看蜜臀| 久久99蜜桃精品| 精品久久国产老人久久综合| 国产一区二区影院| 亚洲视频免费在线| 欧美欧美欧美欧美首页| 国产在线一区二区综合免费视频| 欧美成人bangbros| 99国产精品久久| 午夜久久久影院| 久久久久久亚洲综合影院红桃 | 欧美又粗又大又爽| 免费观看30秒视频久久| 国产精品国产三级国产aⅴ无密码| 日本电影亚洲天堂一区| 激情综合色播激情啊| 国产偷国产偷精品高清尤物| 51精品久久久久久久蜜臀| 国产目拍亚洲精品99久久精品| 美女性感视频久久| 国产精品无遮挡| 欧美一卡二卡三卡| 91久久精品网| 大白屁股一区二区视频| 三级欧美韩日大片在线看| 久久久精品国产免大香伊| 91麻豆国产在线观看| 国产麻豆视频精品| 一区二区三区色| 久久久蜜臀国产一区二区| 9久草视频在线视频精品| 久久精品国产免费| 亚洲乱码中文字幕| 国产日韩欧美精品在线| 日韩欧美一二区| 欧美色国产精品| 色综合久久久久久久久久久| 国产一区在线观看麻豆| 亚洲高清中文字幕| 亚洲精品少妇30p| 亚洲人成精品久久久久| 国产精品美女久久久久久久网站| 日韩欧美色综合| 日韩欧美成人一区| 777精品伊人久久久久大香线蕉| 91免费在线看| 欧洲一区在线观看| 91国偷自产一区二区开放时间 | 一本在线高清不卡dvd| 成人性生交大片免费看视频在线 | 午夜精品影院在线观看| 亚洲成人动漫在线免费观看| 亚洲超碰97人人做人人爱| 亚洲午夜在线电影| 亚洲成人一区二区在线观看| 亚洲国产日韩一区二区| 亚洲一区二区视频在线观看| 亚洲午夜免费视频| 免费人成在线不卡| 国产永久精品大片wwwapp| 日韩1区2区日韩1区2区| 美洲天堂一区二卡三卡四卡视频| 三级在线观看一区二区| 久久精品999| 久久国产综合精品| 国产精品资源在线观看| 国内外成人在线| 成人激情文学综合网| 欧美少妇xxx| 精品久久久久久久人人人人传媒| 久久久久久久久久美女| 国产精品的网站| 丝袜亚洲精品中文字幕一区| 精彩视频一区二区| 欧美日韩一区三区四区| 亚洲国产精品高清| 久久精品国产一区二区三| 一本高清dvd不卡在线观看| 91在线视频网址| 欧美一级欧美三级在线观看| 日韩欧美高清一区| 亚洲一区二区三区四区不卡| 成人免费的视频| 26uuu久久天堂性欧美| 亚洲国产aⅴ成人精品无吗| 丁香啪啪综合成人亚洲小说| 日韩三级在线观看| 亚洲sss视频在线视频| 99国产精品久| 国产精品少妇自拍| 国产福利一区在线| 精品国产一区二区三区久久影院| 亚洲成人av一区| 欧美日韩mp4| 日韩精品午夜视频| 日韩欧美视频一区| 蜜臀久久99精品久久久久宅男| 91麻豆精品国产综合久久久久久| 一区二区三区在线视频免费| 91小视频免费观看| 国产精品二区一区二区aⅴ污介绍| 久久99国产精品久久| 欧美精品一区二区蜜臀亚洲| 久久精品国产一区二区| www国产精品av| 粉嫩av一区二区三区在线播放| 国产无遮挡一区二区三区毛片日本| 国产一区在线看| 中文字幕欧美国产| 日本精品裸体写真集在线观看| 亚洲成人三级小说| 日韩精品一区二区三区视频播放| 久久国产麻豆精品| 欧美国产日韩亚洲一区| 色悠久久久久综合欧美99| 一区二区三区日本| 日韩免费观看2025年上映的电影| 国产一区在线精品| 亚洲色欲色欲www| 欧美色大人视频| 国产美女一区二区| 一区二区三区av电影| 精品国产一区二区三区av性色 | 欧美成人官网二区| 91一区一区三区| 久久99热国产| 一区二区三区免费看视频| 欧美一区二区人人喊爽| www.欧美日韩国产在线| 午夜视黄欧洲亚洲| 国产精品福利影院| 日韩一区二区三区电影 | 一区二区三区四区不卡在线| 欧美成人精精品一区二区频| 91小视频免费观看| 国产中文一区二区三区| 日韩电影在线观看一区| 国产精品久久国产精麻豆99网站| 欧美精品久久一区二区三区| kk眼镜猥琐国模调教系列一区二区| 天堂资源在线中文精品| 中文字幕日本不卡| 欧美韩日一区二区三区| ww久久中文字幕| 欧美二区三区91| 欧美日韩高清不卡| 在线观看免费一区| 色久综合一二码| 91色porny在线视频| 高清免费成人av| 国产精品综合在线视频| 久久99九九99精品| 男男gaygay亚洲| 日本aⅴ亚洲精品中文乱码| 亚洲成人综合视频| 肉丝袜脚交视频一区二区| 国产精品白丝在线| 国产精品久久久久久久第一福利| 精品国产乱码91久久久久久网站| 成人免费毛片片v| 成人免费看视频| 成人免费看片app下载| 国产成人午夜电影网| 国产999精品久久| 国产成人精品免费| 99re这里都是精品| 欧美在线视频全部完| 欧美日韩国产中文| 666欧美在线视频| 精品国偷自产国产一区| 欧美成人乱码一区二区三区| 精品粉嫩aⅴ一区二区三区四区| 精品久久久久久综合日本欧美| 久久亚区不卡日本| 国产精品国产a| 亚洲综合视频网| 看电影不卡的网站| 一本到三区不卡视频| 欧美日韩国产bt| 国产日韩精品一区| 亚洲国产精品久久久久秋霞影院| 免费不卡在线视频| 国产一区二区三区免费播放| 成人99免费视频| 日韩一区二区高清|