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

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

?? fdi.h

?? Microsoft CAB庫壓縮文件
?? H
?? 第 1 頁 / 共 4 頁
字號:
    };
} FDIDECRYPT; /* fdid */
typedef FDIDECRYPT FAR *PFDIDECRYPT; /* pfdid */


/***    FNALLOC - Memory Allocation
 *      FNFREE  - Memory Free
 *
 *  These are modeled after the C run-time routines malloc() and free()
 *  FDI expects error handling to be identical to these C run-time routines.
 *
 *  As long as you faithfully copy the semantics of malloc() and free(),
 *  you can supply any functions you like!
 *
 *  WARNING: You should never assume anything about the sequence of
 *           PFNALLOC and PFNFREE calls -- incremental releases of
 *           FDI may have radically different numbers of
 *           PFNALLOC calls and allocation sizes!
 */
//** Memory functions for FDI
typedef void HUGE * (FAR DIAMONDAPI *PFNALLOC)(ULONG cb); /* pfna */
#define FNALLOC(fn) void HUGE * FAR DIAMONDAPI fn(ULONG cb)

typedef void (FAR DIAMONDAPI *PFNFREE)(void HUGE *pv); /* pfnf */
#define FNFREE(fn) void FAR DIAMONDAPI fn(void HUGE *pv)


/***    PFNOPEN  - File I/O callbacks for FDI
 *      PFNREAD
 *      PFNWRITE
 *      PFNCLOSE
 *      PFNSEEK
 *
 *  These are modeled after the C run-time routines _open, _read,
 *  _write, _close, and _lseek.  The values for the PFNOPEN oflag
 *  and pmode calls are those defined for _open.  FDI expects error
 *  handling to be identical to these C run-time routines.
 *
 *  As long as you faithfully copy these aspects, you can supply
 *  any functions you like!
 *
 *  WARNING: You should never assume you know what file is being
 *           opened at any one point in time!  FDI will usually
 *           stick to opening cabinet files, but it is possible
 *           that in a future implementation it may open temporary
 *           files or open cabinet files in a different order.
 *
 *  Notes for Memory Mapped File fans:
 *      You can write wrapper routines to allow FDI to work on memory
 *      mapped files.  You'll have to create your own "handle" type so that
 *      you can store the base memory address of the file and the current
 *      seek position, and then you'll allocate and fill in one of these
 *      structures and return a pointer to it in response to the PFNOPEN
 *      call and the fdintCOPY_FILE call.  Your PFNREAD and PFNWRITE
 *      functions will do memcopy(), and update the seek position in your
 *      "handle" structure.  PFNSEEK will just change the seek position
 *      in your "handle" structure.
 */
//** File I/O functions for FDI
typedef int  (FAR DIAMONDAPI *PFNOPEN) (char FAR *pszFile, int oflag, int pmode);
typedef UINT (FAR DIAMONDAPI *PFNREAD) (int hf, void FAR *pv, UINT cb);
typedef UINT (FAR DIAMONDAPI *PFNWRITE)(int hf, void FAR *pv, UINT cb);
typedef int  (FAR DIAMONDAPI *PFNCLOSE)(int hf);
typedef long (FAR DIAMONDAPI *PFNSEEK) (int hf, long dist, int seektype);

#define FNOPEN(fn) int FAR DIAMONDAPI fn(char FAR *pszFile, int oflag, int pmode)
#define FNREAD(fn) UINT FAR DIAMONDAPI fn(int hf, void FAR *pv, UINT cb)
#define FNWRITE(fn) UINT FAR DIAMONDAPI fn(int hf, void FAR *pv, UINT cb)
#define FNCLOSE(fn) int FAR DIAMONDAPI fn(int hf)
#define FNSEEK(fn) long FAR DIAMONDAPI fn(int hf, long dist, int seektype)



/***    PFNFDIDECRYPT - FDI Decryption callback
 *
 *  If this function is passed on the FDICopy() call, then FDI calls it
 *  at various times to update the decryption state and to decrypt FCDATA
 *  blocks.
 *
 *  Common Entry Conditions:
 *      pfdid->fdidt  - Command type
 *      pfdid->pvUser - pvUser value from FDICopy() call
 *
 *  fdidtNEW_CABINET:   //** Notification of a new cabinet
 *      Entry:
 *        pfdid->cabinet.
 *          pHeaderReserve  - RESERVE section from CFHEADER
 *          cbHeaderReserve - Size of pHeaderReserve
 *          setID           - Cabinet set ID
 *          iCabinet        - Cabinet number in set (0 based)
 *      Exit-Success:
 *          returns anything but -1;
 *      Exit-Failure:
 *          returns -1; FDICopy() is aborted.
 *      Notes:
 *      (1) This call allows the decryption code to pick out any information
 *          from the cabinet header reserved area (placed there by DIACRYPT)
 *          needed to perform decryption.  If there is no such information,
 *          this call would presumably be ignored.
 *      (2) This call is made very soon after fdintCABINET_INFO.
 *
 *  fdidtNEW_FOLDER:    //** Notification of a new folder
 *      Entry:
 *        pfdid->folder.
 *          pFolderReserve  - RESERVE section from CFFOLDER
 *          cbFolderReserve - Size of pFolderReserve
 *          iFolder         - Folder number in cabinet (0 based)
 *      Exit-Success:
 *          returns anything but -1;
 *      Exit-Failure:
 *          returns -1; FDICopy() is aborted.
 *      Notes:
 *          This call allows the decryption code to pick out any information
 *          from the folder reserved area (placed there by DIACRYPT) needed
 *          to perform decryption.  If there is no such information, this
 *          call would presumably be ignored.
 *
 *  fdidtDECRYPT:       //** Decrypt a data buffer
 *      Entry:
 *        pfdid->folder.
 *          pDataReserve  - RESERVE section for this CFDATA block
 *          cbDataReserve - Size of pDataReserve
 *          pbData        - Data buffer
 *          cbData        - Size of data buffer
 *          fSplit        - TRUE if this is a split data block
 *          cbPartial     - 0 if this is not a split block, or the first
 *                              piece of a split block; Greater than 0 if
 *                              this is the second piece of a split block.
 *      Exit-Success:
 *          returns TRUE;
 *      Exit-Failure:
 *          returns FALSE; error during decrypt
 *          returns -1; FDICopy() is aborted.
 *      Notes:
 *          FCI will split CFDATA blocks across cabinet boundaries if
 *          necessary.  To provide maximum flexibility, FDI will call the
 *          fdidtDECRYPT function twice on such split blocks, once when
 *          the first portion is read, and again when the second portion
 *          is read.  And, of course, most data blocks will not be split.
 *          So, there are three cases:
 *
 *           1) fSplit == FALSE
 *              You have the entire data block, so decrypt it.
 *
 *           2) fSplit == TRUE, cbPartial == 0
 *              This is the first portion of a split data block, so cbData
 *              is the size of this portion.  You can either choose to decrypt
 *              this piece, or ignore this call and decrypt the full CFDATA
 *              block on the next (second) fdidtDECRYPT call.
 *
 *           3) fSplit == TRUE, cbPartial > 0
 *              This is the second portion of a split data block (indeed,
 *              cbPartial will have the same value as cbData did on the
 *              immediately preceeding fdidtDECRYPT call!).  If you decrypted
 *              the first portion on the first call, then you can decrypt the
 *              second portion now.  If you ignored the first call, then you
 *              can decrypt the entire buffer.
 *              NOTE: pbData points to the second portion of the split data
 *                    block in this case, *not* the entire data block.  If
 *                    you want to wait until the second piece to decrypt the
 *                    *entire* block, pbData-cbPartial is the address of the
 *                    start of the whole block, and cbData+cbPartial is its
 *                    size.
 */
typedef int (FAR DIAMONDAPI *PFNFDIDECRYPT)(PFDIDECRYPT pfdid); /* pfnfdid */
#define FNFDIDECRYPT(fn) int FAR DIAMONDAPI fn(PFDIDECRYPT pfdid)


/***    FDINOTIFICATION - Notification structure for PFNFDINOTIFY
 *
 *  See the FDINOTIFICATIONTYPE definition for information on usage and
 *  meaning of these fields.
 */
typedef struct {
// long fields
    long      cb;
    char FAR *psz1;
    char FAR *psz2;
    char FAR *psz3;                     // Points to a 256 character buffer
    void FAR *pv;                       // Value for client

// int fields
    int       hf;

// short fields
    USHORT    date;
    USHORT    time;
    USHORT    attribs;

    USHORT    setID;                    // Cabinet set ID
    USHORT    iCabinet;                 // Cabinet number (0-based)
    USHORT    iFolder;                  // Folder number (0-based)

    FDIERROR  fdie;
} FDINOTIFICATION, FAR *PFDINOTIFICATION;  /* fdin, pfdin */


/***    FDINOTIFICATIONTYPE - FDICopy notification types
 *
 *  The notification function for FDICopy can be called with the following
 *  values for the fdint parameter.  In all cases, the pfdin->pv field is
 *  filled in with the value of the pvUser argument passed in to FDICopy().
 *
 *  A typical sequence of calls will be something like this:
 *      fdintCABINET_INFO     // Info about the cabinet
 *      fdintENUMERATE        // Starting enumeration
 *      fdintPARTIAL_FILE     // Only if this is not the first cabinet, and
 *                            // one or more files were continued from the
 *                            // previous cabinet.
 *      ...
 *      fdintPARTIAL_FILE
 *      fdintCOPY_FILE        // The first file that starts in this cabinet
 *      ...
 *      fdintCOPY_FILE        // Now let's assume you want this file...
 *      // PFNWRITE called multiple times to write to this file.
 *      fdintCLOSE_FILE_INFO  // File done, set date/time/attributes
 *
 *      fdintCOPY_FILE        // Now let's assume you want this file...
 *      // PFNWRITE called multiple times to write to this file.
 *      fdintNEXT_CABINET     // File was continued to next cabinet!
 *      fdintCABINET_INFO     // Info about the new cabinet
 *      // PFNWRITE called multiple times to write to this file.
 *      fdintCLOSE_FILE_INFO  // File done, set date/time/attributes
 *      ...
 *      fdintENUMERATE        // Ending enumeration
 *
 *  fdintCABINET_INFO:
 *        Called exactly once for each cabinet opened by FDICopy(), including
 *        continuation cabinets opened due to file(s) spanning cabinet
 *        boundaries. Primarily intended to permit EXTRACT.EXE to
 *        automatically select the next cabinet in a cabinet sequence even if
 *        not copying files that span cabinet boundaries.
 *      Entry:
 *          pfdin->psz1     = name of next cabinet
 *          pfdin->psz2     = name of next disk
 *          pfdin->psz3     = cabinet path name
 *          pfdin->setID    = cabinet set ID (a random 16-bit number)
 *          pfdin->iCabinet = Cabinet number within cabinet set (0-based)
 *      Exit-Success:
 *          Return anything but -1
 *      Exit-Failure:
 *          Returns -1 => Abort FDICopy() call
 *      Notes:
 *          This call is made *every* time a new cabinet is examined by
 *          FDICopy().  So if "foo2.cab" is examined because a file is
 *          continued from "foo1.cab", and then you call FDICopy() again
 *          on "foo2.cab", you will get *two* fdintCABINET_INFO calls all
 *          told.
 *
 *  fdintCOPY_FILE:
 *        Called for each file that *starts* in the current cabinet, giving
 *        the client the opportunity to request that the file be copied or
 *        skipped.
 *      Entry:
 *          pfdin->psz1    = file name in cabinet
 *          pfdin->cb      = uncompressed size of file
 *          pfdin->date    = file date
 *          pfdin->time    = file time
 *          pfdin->attribs = file attributes
 *          pfdin->iFolder = file's folder index
 *      Exit-Success:
 *          Return non-zero file handle for destination file; FDI writes
 *          data to this file use the PFNWRITE function supplied to FDICreate,
 *          and then calls fdintCLOSE_FILE_INFO to close the file and set
 *          the date, time, and attributes.  NOTE: This file handle returned
 *          must also be closeable by the PFNCLOSE function supplied to
 *          FDICreate, since if an error occurs while writing to this handle,
 *          FDI will use the PFNCLOSE function to close the file so that the

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美高清视频www夜色资源网| 亚洲色图.com| 中文字幕一区免费在线观看| 亚洲一区免费在线观看| 国产一区福利在线| 欧美日韩aaaaaa| 国产精品成人一区二区三区夜夜夜 | 69堂成人精品免费视频| 国产精品无人区| 久久精品噜噜噜成人av农村| 欧美性视频一区二区三区| 国产精品视频第一区| 国产综合久久久久久久久久久久| 欧美性猛片xxxx免费看久爱| 亚洲欧美日韩精品久久久久| 成人激情文学综合网| 久久久久99精品国产片| 久久成人久久爱| 日韩视频在线一区二区| 日韩精品成人一区二区在线| 欧美日韩一级二级三级| 亚洲小说春色综合另类电影| av电影在线观看完整版一区二区| 久久久久国产一区二区三区四区| 精品一区二区在线播放| 91精品国产综合久久久久久久久久| 亚洲国产成人高清精品| 日本道免费精品一区二区三区| 亚洲日本护士毛茸茸| 99国产精品久| 日韩理论片网站| 在线一区二区视频| 亚洲一区二区精品3399| 欧美军同video69gay| 午夜a成v人精品| 欧美日韩dvd在线观看| 日韩高清国产一区在线| 欧美一区二区三区四区五区 | 亚洲欧洲av一区二区三区久久| 国产盗摄视频一区二区三区| 中文字幕不卡在线播放| 99国产精品久久久久久久久久 | 成人国产亚洲欧美成人综合网 | 人人狠狠综合久久亚洲| 日韩一区二区三区在线| 国产一区二区三区综合| 日本一区二区视频在线| 成人午夜伦理影院| 一区二区三区四区激情 | 在线亚洲+欧美+日本专区| 亚洲综合免费观看高清在线观看| 欧美视频一区在线| 毛片av一区二区| 国产亚洲1区2区3区| 色婷婷精品久久二区二区蜜臂av | 欧美精品一区二区在线播放| 国产一区二区三区视频在线播放| 亚洲国产精品传媒在线观看| 欧美在线观看你懂的| 欧美aaaaa成人免费观看视频| 久久久99精品免费观看不卡| 91在线观看下载| 日日骚欧美日韩| 欧美经典一区二区三区| 色婷婷综合在线| 裸体歌舞表演一区二区| 中文字幕一区二区视频| 欧美巨大另类极品videosbest | 欧美久久一二三四区| 精品一区二区三区久久久| 亚洲欧美日韩中文字幕一区二区三区| 在线观看国产日韩| 国产成人精品免费| 天天免费综合色| 国产午夜精品一区二区三区视频 | 久久久精品免费网站| 欧美伊人久久久久久午夜久久久久| 久久成人免费网| 一区二区三区在线视频播放| 久久久久99精品国产片| 91麻豆精品国产91久久久久久| 国产ts人妖一区二区| 蜜臀a∨国产成人精品| 一区二区三区四区不卡在线| 国产欧美日韩麻豆91| 欧美一卡二卡三卡四卡| 在线观看免费视频综合| 成人免费看片app下载| 激情六月婷婷久久| 热久久国产精品| 亚洲一区二区av电影| 亚洲人吸女人奶水| 国产性天天综合网| 久久品道一品道久久精品| 欧美日本在线一区| 在线观看亚洲精品| 91一区二区在线| 成人性生交大片免费看视频在线| 国产一区二区三区在线观看免费 | 亚洲精品菠萝久久久久久久| 久久精品视频免费| 久久久久国产精品麻豆ai换脸 | 青娱乐精品在线视频| 亚洲一区在线观看视频| 亚洲欧美日韩小说| 中文字幕五月欧美| 国产精品人人做人人爽人人添| 国产亚洲一区二区三区四区 | 91色九色蝌蚪| 91美女精品福利| 97se亚洲国产综合自在线| av资源站一区| 色吧成人激情小说| 欧美色欧美亚洲另类二区| 欧洲视频一区二区| 欧美三级电影一区| 欧美日韩二区三区| 91精品国产全国免费观看| 7777精品伊人久久久大香线蕉最新版| 在线播放/欧美激情| 日韩一区和二区| 久久精品无码一区二区三区| 国产精品久久久久aaaa| 亚洲欧美日韩国产一区二区三区| 一区二区三区成人| 日韩精品亚洲专区| 另类中文字幕网| 国产盗摄精品一区二区三区在线| 成a人片亚洲日本久久| 91婷婷韩国欧美一区二区| 欧美性xxxxxx少妇| 日韩欧美一级片| 国产拍揄自揄精品视频麻豆| 亚洲激情av在线| 天天色天天操综合| 国产精品18久久久久久久久 | 精品99久久久久久| 国产日韩在线不卡| 亚洲一区二区三区四区五区黄| 蜜臀av亚洲一区中文字幕| 高清成人在线观看| 欧洲一区在线观看| 26uuu成人网一区二区三区| 亚洲国产成人在线| 午夜久久福利影院| 国产高清精品网站| 欧美探花视频资源| 久久久久国产一区二区三区四区 | 欧美日韩二区三区| 久久伊人中文字幕| 亚洲一区二区三区四区在线免费观看 | 亚洲蜜臀av乱码久久精品蜜桃| 图片区日韩欧美亚洲| 国产成人免费在线观看不卡| 欧美亚洲综合在线| 精品1区2区在线观看| 亚洲女同一区二区| 国产一区二区视频在线| 91福利国产精品| 久久久国产精品不卡| 亚洲高清免费视频| 成人午夜看片网址| 欧美一区二区三区系列电影| 亚洲色图视频网| 国产又黄又大久久| 欧美欧美欧美欧美首页| 中文字幕亚洲不卡| 国产高清精品网站| 日韩免费性生活视频播放| 亚洲视频狠狠干| 国产成人在线网站| 日韩免费福利电影在线观看| 亚洲午夜精品在线| 成人app网站| 久久亚洲精华国产精华液| 日韩激情av在线| 欧美男人的天堂一二区| 亚洲精品国久久99热| 成人国产精品免费观看| 国产丝袜美腿一区二区三区| 久久福利视频一区二区| 欧美精品日日鲁夜夜添| 亚洲成人av电影在线| 日本伦理一区二区| 亚洲黄色av一区| 99re这里只有精品视频首页| 欧美国产综合色视频| 黄色小说综合网站| 精品国一区二区三区| 免费在线成人网| 制服丝袜亚洲播放| 日韩主播视频在线| 日韩一区二区三区四区| 奇米777欧美一区二区| 欧美一区二区在线免费观看| 亚洲成人你懂的| 91精品国产免费久久综合| 日本在线不卡一区| 精品三级在线看| 国产麻豆精品theporn|