• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開(kāi)心的工作
            簡(jiǎn)單、開(kāi)放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            IFS Kit下關(guān)于FastIo的OSR文檔翻譯(3)

            FastIoQueryBasicInfo and FastIoQueryStandardInfo

            這兩個(gè)操作為標(biāo)準(zhǔn)的NtQueryInformationFile API操作提供了支持,而FastIoQueryBasicInfo也經(jīng)常被用來(lái)處理NtCreateFile的特定操作。文件的基本屬性包括創(chuàng)建時(shí)間、訪問(wèn)時(shí)間和修改時(shí)間,以及隱藏、文件夾或其它屬性等。文件的標(biāo)準(zhǔn)屬性包括文件占用的空間、文件的大小、文件的硬連接號(hào)、被請(qǐng)求刪除的標(biāo)志,是否是文件夾的標(biāo)識(shí)。

            由于這些信息經(jīng)常在緩存中,所以它是FAST I/O操作的最佳候選。其實(shí)許多程序用這種方法來(lái)獲取文件基本的信息,因?yàn)檫@種方法提高了操作的效率和程序的性能,如文件管理器程序(winfile.exe)。

            這兩個(gè)Fast I/O例程有相同的接口:

            typedef BOOLEAN (*PFAST_IO_QUERY_ABSIC_INFO)(
            IN struct _FILE_OBJECT *FileObject,
            IN BOOLEAN Wait,
            OUT PFILE_BASIC_INFORMATION Buffer,
            OUT PIO_STATUS_BLOCK IoStatus,
            IN struct _DEVICE_OBJECT *DeviceObject);

            Wait參數(shù)表示調(diào)用者是否阻塞以等待獲取信息的返回,如果設(shè)置為FALSE,則調(diào)用要么立刻完成,要么返回FALSE,如果返回FALSE,則會(huì)生成一個(gè)包含整個(gè)操作必要的上下文件的IRP。有趣的是在NT3.51中當(dāng)Wait設(shè)置為FALSE時(shí)這兩個(gè)例程將不被調(diào)用,當(dāng)然這在以后的版本中會(huì)修改。

            這兩個(gè)例程一但被調(diào)用,它們會(huì)查詢文件對(duì)象第一次打開(kāi)時(shí)保存的信息,這些信息也可能被實(shí)時(shí)變化,例如,文件的最近訪問(wèn)時(shí)間屬性會(huì)被文件系統(tǒng)設(shè)置的當(dāng)前的系統(tǒng)時(shí)間,當(dāng)然設(shè)置這些屬性取決于文件系統(tǒng)的實(shí)現(xiàn)。

            FastIoLock,F(xiàn)astIoUnLockSingle,F(xiàn)astIoUnLockAll,and FastIoUnLockAllByKey
            這些例程被用來(lái)控制特殊文件的加鎖狀態(tài)。對(duì)文件的加鎖以字節(jié)為單位,所以可以對(duì)文件的多個(gè)字節(jié)進(jìn)行加密。標(biāo)準(zhǔn)的NT文件系統(tǒng)使用文件系統(tǒng)運(yùn)行時(shí)開(kāi)發(fā)包(FsRtl函數(shù))所提供的通用代碼來(lái)驗(yàn)證鎖權(quán)限并存儲(chǔ)文件的加鎖范圍。鎖狀態(tài)通過(guò)調(diào)用NT API函數(shù)NtLockFile和NtUnLockFile來(lái)控制。

            在Windows NT中有兩種鎖,一種是排它鎖,是寫(xiě)鎖,說(shuō)明加鎖的地放要進(jìn)行修改;另一種是共享鎖,是讀鎖,說(shuō)明加鎖的地放用來(lái)的讀的。多個(gè)共享鎖在重疊操作中可以被授權(quán),并且一直保存到釋放為止。將各種加鎖的信息存儲(chǔ)起來(lái)在訪問(wèn)這些信息的時(shí)候會(huì)提高速度。
            FastIoLock的原型:
            Typedef BOOLEAN (*PFAST_IO_LOCK)(
            IN struct _FILE_OJBECT *FileObject,
            IN PLARGE_INTEGER FileOffset,
            IN PLARGE_INTEGER Length,
            PEPROCESS ProcessId,
            ULONG Key,
            BOOLEAN FailImmediately,
            BOOLEAN ExclusiveLock,
            OUT PIO_STATUS_BLOCK IoStatus,
            IN struct _DEVICE_OBJECT *DeviceObject
            );
            FileOffset 和Length參數(shù)對(duì)應(yīng)加鎖的范圍,ProcessId標(biāo)識(shí)加鎖的進(jìn)程,如果進(jìn)行退出,鎖將會(huì)清除。Key參數(shù)提供一個(gè)非透明的值,用來(lái)關(guān)聯(lián)多個(gè)鎖,例如調(diào)用FastIoUnLockAllByKey可以快速訪問(wèn)多個(gè)鎖。FailImmediately用來(lái)標(biāo)識(shí)當(dāng)鎖無(wú)效時(shí)是立刻返回失敗還是阻塞直到鎖可用。對(duì)于FsRtl函數(shù),如果是無(wú)效的鎖則忽略FailImmediately參數(shù),函數(shù)返回FALSE。ExclusiveLock參數(shù)用來(lái)標(biāo)識(shí)是排它鎖還是共享鎖。

            FastUnlockSingle例程被用來(lái)釋放對(duì)文件的加鎖,原型如下:
            Typedef BOOLEAN (*PFAST_IO_UNLOCK_SINGLE)(
            IN struct _FILE_OBJECT *FileObject,
            IN PLARGE_INTEGER FileOffset,
            IN PLARGE_INTEGER Length,
            PEPROCESS ProcessId,
            ULONG Key,
            OUT PIO_STATUS_BLOCK IoStatus,
            IN struct _DEVICE_OBJECT *DeviceObject
            );
            對(duì)大多文件系統(tǒng)來(lái)說(shuō),如果文件沒(méi)有加鎖,此例程總是返回TRUE,即使朝無(wú)效的鎖,操作也會(huì)完成,因?yàn)橛肐RP來(lái)操作也同樣會(huì)產(chǎn)生相同的錯(cuò)誤。

            如果這個(gè)解鎖操作成功,那么FileOffset,Length,ProcessId,和Key必須和相應(yīng)的鎖信息匹配,否則操作會(huì)返回錯(cuò)誤STATUS_RANGE_NOT_LOCKED。FastIoUnlockAll例程用來(lái)釋放特殊文件所有的鎖,函數(shù)原型如下:
            typedef BOOLEAN(*PFAST_IO_UNLOCK_ALL)(
            IN struct _FILE_OBJECT *FileObject,
            PEPROCESS ProcessId,
            OUT PIO_STATUS_BLOCK IoStatus,
            IN struct _DEVICE_OBJECT *DeviceObject
            );
            在這種情況下,F(xiàn)ast I/O例程查找進(jìn)程ProcessId所操作的文件所有的鎖,并刪除,無(wú)論是排它鎖還是共享鎖。這個(gè)例程常用在當(dāng)系統(tǒng)由于關(guān)掉程序或終止程序而調(diào)用NtCloseFile時(shí)。

            FastIoUnlockAllByKey操作用來(lái)通過(guò)一些特殊的鍵值來(lái)刪除一系列鎖。原型如下:
            Typedef BOOLEAN (*PFAST_IO_UNLOCK_ALL_BY_KEY)(
            IN struct _FILE_OBJECT *FileObject,
            PVOID ProcessId,
            ULONG Key,
            OUT PIO_STATUS_BLOCK_IoStatus,
            IN struct _DEVICE_OBJECT *DeviceObject
            );
            提供這個(gè)例程是為了便于文件服務(wù)如SRV。在NT3.51的I/O管理器中沒(méi)有出現(xiàn)這個(gè)調(diào)用。鍵值用來(lái)文件服務(wù)給遠(yuǎn)程客戶機(jī)文件加鎖時(shí)分配的。因?yàn)樵S多遠(yuǎn)程客戶端,僅有ProcessId是遠(yuǎn)遠(yuǎn)不夠的。同樣,對(duì)于多文件服務(wù)器,僅使用鍵值也會(huì)在其它的文件服務(wù)器釋放時(shí)導(dǎo)致錯(cuò)誤。二者同時(shí)使用以確保正確操作并允許遠(yuǎn)程加鎖。
            久久久精品久久久久特色影视| 精品水蜜桃久久久久久久| 久久精品国产清自在天天线 | 人妻丰满AV无码久久不卡| 婷婷五月深深久久精品| 国产成人无码久久久精品一| 久久本道伊人久久| 久久激情亚洲精品无码?V| 久久久这里只有精品加勒比| 亚洲国产美女精品久久久久∴| 久久久无码精品亚洲日韩蜜臀浪潮| 久久国产精品无码一区二区三区| 久久99精品国产一区二区三区| 国产亚洲成人久久| 中文国产成人精品久久不卡| av无码久久久久不卡免费网站| 国产69精品久久久久99| 久久久久亚洲AV成人网人人软件 | 久久国产精品成人免费| 久久免费大片| 国产精品美女久久久久久2018| 国内精品欧美久久精品| 久久人人爽人人爽人人片AV不 | 久久久久无码精品| 久久精品人人做人人妻人人玩| 久久久久无码中| 国产精品久久毛片完整版| 亚洲成av人片不卡无码久久| 无码国内精品久久综合88 | 五月丁香综合激情六月久久 | 久久久久久久综合日本| 久久久久人妻一区精品色| 精品国产乱码久久久久软件| 伊人色综合久久天天| 婷婷五月深深久久精品| 亚洲精品97久久中文字幕无码| 久久99精品国产麻豆| 久久国语露脸国产精品电影| 久久综合给合综合久久| 日本久久久久久中文字幕| 久久精品无码专区免费青青|