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

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

?? fdi.h

?? Microsoft CAB庫壓縮文件
?? H
?? 第 1 頁 / 共 4 頁
字號(hào):
 *              FDIIsCabinet(), and make sure the setID matches the one for
 *              the current cabinet specified in the fdintCABINET_INFO, and
 *              that the disk number is one greater.
 *
 *              NOTE: FDI will continue to call fdintNEXT_CABINET until it
 *                    gets the cabinet it wants, or until you return -1
 *                    to abort the FDICopy() call.
 *
 *      The documentation below on the FDI error codes provides explicit
 *      guidance on how to avoid each error.
 *
 *      If you find you must return a failure to FDI from one of your
 *      callback functions, then FDICopy() frees all resources it allocated
 *      and closes all files.  If you can figure out how to overcome the
 *      problem, you can call FDICopy() again on the last cabinet, and
 *      skip any files that you already copied.  But, note that FDI does
 *      *not* maintain any state between FDICopy() calls, other than possibly
 *      memory allocated for the decompressor.
 *
 *      See FDIERROR for details on FDI error codes and recommended actions.
 *
 *
 *  Progress Indicator Suggestions:
 *      As above, all of the file I/O functions are supplied by you.  So,
 *      updating a progress indicator is very simple.  You keep track of
 *      the target files handles you have opened, along with the uncompressed
 *      size of the target file.  When you see writes to the handle of a
 *      target file, you use the write count to update your status!
 *      Since this method is available, there is no separate callback from
 *      FDI just for progess indication.
 */

#ifndef INCLUDED_FDI
#define INCLUDED_FDI    1

//** Specify structure packing explicitly for clients of FDI
#pragma pack(4)


/***    FDIERROR - Error codes returned in erf.erfOper field
 *
 *  In general, FDI will only fail if one of the passed in memory or
 *  file I/O functions fails.  Other errors are pretty unlikely, and are
 *  caused by corrupted cabinet files, passing in a file which is not a
 *  cabinet file, or cabinet files out of order.
 *
 *  Description:    Summary of error.
 *  Cause:          List of possible causes of this error.
 *  Response:       How client might respond to this error, or avoid it in
 *                  the first place.
 */
typedef enum {
    FDIERROR_NONE,
        // Description: No error
        // Cause:       Function was successfull.
        // Response:    Keep going!

    FDIERROR_CABINET_NOT_FOUND,
        // Description: Cabinet not found
        // Cause:       Bad file name or path passed to FDICopy(), or returned
        //              to fdintNEXT_CABINET.
        // Response:    To prevent this error, validate the existence of the
        //              the cabinet *before* passing the path to FDI.

    FDIERROR_NOT_A_CABINET,
        // Description: Cabinet file does not have the correct format
        // Cause:       File passed to to FDICopy(), or returned to
        //              fdintNEXT_CABINET, is too small to be a cabinet file,
        //              or does not have the cabinet signature in its first
        //              four bytes.
        // Response:    To prevent this error, call FDIIsCabinet() to check a
        //              cabinet before calling FDICopy() or returning the
        //              cabinet path to fdintNEXT_CABINET.

    FDIERROR_UNKNOWN_CABINET_VERSION,
        // Description: Cabinet file has an unknown version number.
        // Cause:       File passed to to FDICopy(), or returned to
        //              fdintNEXT_CABINET, has what looks like a cabinet file
        //              header, but the version of the cabinet file format
        //              is not one understood by this version of FDI.  The
        //              erf.erfType field is filled in with the version number
        //              found in the cabinet file.
        // Response:    To prevent this error, call FDIIsCabinet() to check a
        //              cabinet before calling FDICopy() or returning the
        //              cabinet path to fdintNEXT_CABINET.

    FDIERROR_CORRUPT_CABINET,
        // Description: Cabinet file is corrupt
        // Cause:       FDI returns this error any time it finds a problem
        //              with the logical format of a cabinet file, and any
        //              time one of the passed-in file I/O calls fails when
        //              operating on a cabinet (PFNOPEN, PFNSEEK, PFNREAD,
        //              or PFNCLOSE).  The client can distinguish these two
        //              cases based upon whether the last file I/O call
        //              failed or not.
        // Response:    Assuming this is not a real corruption problem in
        //              a cabinet file, the file I/O functions could attempt
        //              to do retries on failure (for example, if there is a
        //              temporary network connection problem).  If this does
        //              not work, and the file I/O call has to fail, then the
        //              FDI client will have to clean up and call the
        //              FDICopy() function again.

    FDIERROR_ALLOC_FAIL,
        // Description: Could not allocate enough memory
        // Cause:       FDI tried to allocate memory with the PFNALLOC
        //              function, but it failed.
        // Response:    If possible, PFNALLOC should take whatever steps
        //              are possible to allocate the memory requested.  If
        //              memory is not immediately available, it might post a
        //              dialog asking the user to free memory, for example.
        //              Note that the bulk of FDI's memory allocations are
        //              made at FDICreate() time and when the first cabinet
        //              file is opened during FDICopy().

    FDIERROR_BAD_COMPR_TYPE,
        // Description: Unknown compression type in a cabinet folder
        // Cause:       [Should never happen.]  A folder in a cabinet has an
        //              unknown compression type.  This is probably caused by
        //              a mismatch between the version of FCI.LIB used to
        //              create the cabinet and the FDI.LIB used to read the
        //              cabinet.
        // Response:    Abort.

    FDIERROR_MDI_FAIL,
        // Description: Failure decompressing data from a cabinet file
        // Cause:       The decompressor found an error in the data coming
        //              from the file cabinet.  The cabinet file was corrupted.
        //              [11-Apr-1994 bens When checksuming is turned on, this
        //              error should never occur.]
        // Response:    Probably should abort; only other choice is to cleanup
        //              and call FDICopy() again, and hope there was some
        //              intermittent data error that will not reoccur.

    FDIERROR_TARGET_FILE,
        // Description: Failure writing to target file
        // Cause:       FDI returns this error any time it gets an error back
        //              from one of the passed-in file I/O calls fails when
        //              writing to a file being extracted from a cabinet.
        // Response:    To avoid or minimize this error, the file I/O functions
        //              could attempt to avoid failing.  A common cause might
        //              be disk full -- in this case, the PFNWRITE function
        //              could have a check for free space, and put up a dialog
        //              asking the user to free some disk space.

    FDIERROR_RESERVE_MISMATCH,
        // Description: Cabinets in a set do not have the same RESERVE sizes
        // Cause:       [Should never happen]. FDI requires that the sizes of
        //              the per-cabinet, per-folder, and per-data block
        //              RESERVE sections be consistent across all the cabinets
        //              in a set.
        // Response:    Abort.

    FDIERROR_WRONG_CABINET,
        // Description: Cabinet returned on fdintNEXT_CABINET is incorrect
        // Cause:       NOTE: THIS ERROR IS NEVER RETURNED BY FDICopy()!
        //              Rather, FDICopy() keeps calling the fdintNEXT_CABINET
        //              callback until either the correct cabinet is specified,
        //              or you return ABORT.
        //              When FDICopy() is extracting a file that crosses a
        //              cabinet boundary, it calls fdintNEXT_CABINET to ask
        //              for the path to the next cabinet.  Not being very
        //              trusting, FDI then checks to make sure that the
        //              correct continuation cabinet was supplied!  It does
        //              this by checking the "setID" and "iCabinet" fields
        //              in the cabinet.  When MAKECAB.EXE creates a set of
        //              cabinets, it constructs the "setID" using the sum
        //              of the bytes of all the destination file names in
        //              the cabinet set.  FDI makes sure that the 16-bit
        //              setID of the continuation cabinet matches the
        //              cabinet file just processed.  FDI then checks that
        //              the cabinet number (iCabinet) is one more than the
        //              cabinet number for the cabinet just processed.
        // Response:    You need code in your fdintNEXT_CABINET (see below)
        //              handler to do retries if you get recalled with this
        //              error.  See the sample code (EXTRACT.C) to see how
        //              this should be handled.

    FDIERROR_USER_ABORT,
        // Description: FDI aborted.
        // Cause:       An FDI callback returnd -1 (usually).
        // Response:    Up to client.

} FDIERROR;


/*
 * FAT file attribute flag used by FCI/FDI to indicate that
 * the filename in the CAB is a UTF string
 */
#ifndef _A_NAME_IS_UTF
#define _A_NAME_IS_UTF  0x80
#endif

/*
 * FAT file attribute flag used by FCI/FDI to indicate that
 * the file should be executed after extraction
 */
#ifndef _A_EXEC
#define _A_EXEC         0x40
#endif


/***    HFDI - Handle to an FDI context
 *
 *  FDICreate() creates this, and it must be passed to all other FDI
 *  functions.
 */
typedef void FAR *HFDI; /* hfdi */


/***    FDICABINETINFO - Information about a cabinet
 *
 */
typedef struct {
    long        cbCabinet;              // Total length of cabinet file
    USHORT      cFolders;               // Count of folders in cabinet
    USHORT      cFiles;                 // Count of files in cabinet
    USHORT      setID;                  // Cabinet set ID
    USHORT      iCabinet;               // Cabinet number in set (0 based)
    BOOL        fReserve;               // TRUE => RESERVE present in cabinet
    BOOL        hasprev;                // TRUE => Cabinet is chained prev
    BOOL        hasnext;                // TRUE => Cabinet is chained next
} FDICABINETINFO; /* fdici */
typedef FDICABINETINFO FAR *PFDICABINETINFO; /* pfdici */


/***    FDIDECRYPTTYPE - PFNFDIDECRYPT command types
 *
 */
typedef enum {
    fdidtNEW_CABINET,                   // New cabinet
    fdidtNEW_FOLDER,                    // New folder
    fdidtDECRYPT,                       // Decrypt a data block
} FDIDECRYPTTYPE; /* fdidt */


/***    FDIDECRYPT - Data for PFNFDIDECRYPT function
 *
 */
typedef struct {
    FDIDECRYPTTYPE    fdidt;            // Command type (selects union below)
    void FAR         *pvUser;           // Decryption context
    union {
        struct {                        // fdidtNEW_CABINET
            void FAR *pHeaderReserve;   // RESERVE section from CFHEADER
            USHORT    cbHeaderReserve;  // Size of pHeaderReserve
            USHORT    setID;            // Cabinet set ID
            int       iCabinet;         // Cabinet number in set (0 based)
        } cabinet;

        struct {                        // fdidtNEW_FOLDER
            void FAR *pFolderReserve;   // RESERVE section from CFFOLDER
            USHORT    cbFolderReserve;  // Size of pFolderReserve
            USHORT    iFolder;          // Folder number in cabinet (0 based)
        } folder;

        struct {                        // fdidtDECRYPT
            void FAR *pDataReserve;     // RESERVE section from CFDATA
            USHORT    cbDataReserve;    // Size of pDataReserve
            void FAR *pbData;           // Data buffer
            USHORT    cbData;           // Size of data buffer
            BOOL      fSplit;           // TRUE if this is a split data block
            USHORT    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.
        } decrypt;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级欧美三级| 久久久91精品国产一区二区精品 | 欧美成人一区二区三区片免费| 国产精品77777| 蜜臀av性久久久久av蜜臀妖精| 亚洲国产精品成人综合| 日韩精品一区二区三区视频播放| 欧美三级韩国三级日本三斤| 国产在线精品不卡| 免费一区二区视频| 日韩和欧美的一区| 国产专区综合网| 麻豆91在线观看| 日韩电影在线看| 国产在线精品国自产拍免费| 激情成人午夜视频| 日韩vs国产vs欧美| 久久国产精品72免费观看| 五月开心婷婷久久| 亚洲gay无套男同| 九九九精品视频| 国产一区二区三区蝌蚪| 国产成人自拍在线| 日本高清无吗v一区| 在线看日韩精品电影| 91首页免费视频| 欧美人狂配大交3d怪物一区| 91精品国产91久久久久久最新毛片 | 成人动漫一区二区在线| 国产一区二区免费视频| 亚洲高清视频在线| 老司机免费视频一区二区三区| 青青草国产成人99久久| 国产高清精品久久久久| 欧美日韩卡一卡二| wwwwww.欧美系列| 18涩涩午夜精品.www| 日本亚洲三级在线| 成人黄色小视频| 欧美亚洲综合网| 久久在线免费观看| 亚洲激情第一区| 午夜欧美电影在线观看| 蜜桃av一区二区在线观看| proumb性欧美在线观看| 欧美又粗又大又爽| 欧美v日韩v国产v| 亚洲国产精品久久久久秋霞影院| 蜜桃视频在线一区| 色综合天天综合| 97se狠狠狠综合亚洲狠狠| 亚洲精品在线观| 亚洲欧美日韩电影| 久久成人久久爱| 日韩一级免费一区| 伊人一区二区三区| 美女视频第一区二区三区免费观看网站 | 成人午夜又粗又硬又大| 在线观看免费视频综合| 久久综合色之久久综合| 国产精品成人一区二区三区夜夜夜| 蜜桃精品视频在线| 在线观看国产日韩| 国产精品女主播av| 蜜臀av一级做a爰片久久| 欧美一a一片一级一片| 国产三级欧美三级日产三级99| 六月丁香婷婷久久| 欧美三级资源在线| 亚洲伦理在线精品| 日韩成人免费在线| 欧美一区二区视频网站| 亚洲色图视频网| 成人网男人的天堂| 欧美国产欧美综合| 国产乱子伦一区二区三区国色天香| 欧美中文字幕不卡| 国产日本一区二区| 成人激情小说乱人伦| 久久久激情视频| 国内外成人在线视频| 日韩一区二区精品葵司在线| 亚洲成a人片在线观看中文| 91日韩在线专区| 亚洲一区二区三区在线| 在线免费观看一区| 一区二区三区四区在线| 99热99精品| 亚洲欧美日韩国产综合在线| www.在线成人| 亚洲国产一区在线观看| 在线观看91av| 美女网站视频久久| 在线精品国精品国产尤物884a| 香蕉乱码成人久久天堂爱免费| 欧美特级限制片免费在线观看| 夜夜爽夜夜爽精品视频| 日韩欧美国产系列| 国产一区二区三区电影在线观看| 欧美成人一级视频| 99精品黄色片免费大全| 亚洲精品成人a在线观看| 欧美午夜精品免费| 亚洲国产日韩综合久久精品| 69精品人人人人| 久久精品久久精品| 日韩美女在线视频| 不卡电影免费在线播放一区| 亚洲精品免费看| 欧亚洲嫩模精品一区三区| 视频一区视频二区中文字幕| 精品国产乱码久久久久久夜甘婷婷| 午夜精品影院在线观看| 色久综合一二码| 轻轻草成人在线| 精品免费99久久| 成人免费高清视频| 亚洲午夜激情网站| 国产精品久久久久天堂| 欧美亚一区二区| 免费的成人av| 亚洲国产精品精华液网站| 日韩欧美一区二区在线视频| 91丝袜呻吟高潮美腿白嫩在线观看| 日精品一区二区三区| 国产欧美日韩视频一区二区 | 亚洲高清免费观看高清完整版在线观看 | 亚洲人123区| 久久精品免视看| 欧美日韩dvd在线观看| 国产麻豆精品95视频| 青青草原综合久久大伊人精品| 中文字幕在线观看一区| 制服丝袜中文字幕亚洲| 在线亚洲免费视频| 成人一道本在线| 奇米影视7777精品一区二区| 亚洲午夜三级在线| 亚洲欧洲日韩在线| 精品电影一区二区| 日韩三级视频中文字幕| 欧洲精品视频在线观看| 国产超碰在线一区| 国产精品伊人色| 亚洲电影欧美电影有声小说| 国产精品国产三级国产有无不卡| 欧美性生活大片视频| 99久久精品99国产精品| 国产精品综合在线视频| 五月天一区二区三区| 亚洲精品精品亚洲| 欧美久久久久久久久久| 91美女蜜桃在线| 成人一区二区三区视频在线观看| 免费成人在线影院| 毛片一区二区三区| 亚洲国产成人91porn| 亚洲青青青在线视频| 国产欧美一区二区精品忘忧草 | 欧美一个色资源| 成人h动漫精品一区二| 国产sm精品调教视频网站| 国产激情视频一区二区在线观看| 国产成人综合自拍| 成人sese在线| 91在线精品秘密一区二区| 91偷拍与自偷拍精品| 色八戒一区二区三区| 欧美丰满嫩嫩电影| 2019国产精品| 国产精品毛片高清在线完整版| 亚洲欧美日韩小说| 免费在线观看精品| 懂色av噜噜一区二区三区av| 日本高清不卡一区| 欧美一区二区在线播放| 国产欧美精品一区aⅴ影院| 专区另类欧美日韩| 久久狠狠亚洲综合| 成年人国产精品| 欧美日韩高清不卡| 久久色在线观看| 一二三四区精品视频| 紧缚奴在线一区二区三区| 成人免费毛片a| 7777精品伊人久久久大香线蕉完整版 | 中文字幕欧美区| 亚洲无线码一区二区三区| 久久er99精品| 91福利视频网站| 久久久久国产精品厨房| 亚洲精选免费视频| 国产精品一区一区| 欧美日韩成人一区二区| 中文幕一区二区三区久久蜜桃| 午夜av一区二区三区| heyzo一本久久综合| 精品国产一二三区| 亚洲18影院在线观看| 不卡影院免费观看|