• <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.¢%

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

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

            FastIoQueryBasicInfo and FastIoQueryStandardInfo

            這兩個操作為標準的NtQueryInformationFile API操作提供了支持,而FastIoQueryBasicInfo也經常被用來處理NtCreateFile的特定操作。文件的基本屬性包括創建時間、訪問時間和修改時間,以及隱藏、文件夾或其它屬性等。文件的標準屬性包括文件占用的空間、文件的大小、文件的硬連接號、被請求刪除的標志,是否是文件夾的標識。

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

            這兩個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參數表示調用者是否阻塞以等待獲取信息的返回,如果設置為FALSE,則調用要么立刻完成,要么返回FALSE,如果返回FALSE,則會生成一個包含整個操作必要的上下文件的IRP。有趣的是在NT3.51中當Wait設置為FALSE時這兩個例程將不被調用,當然這在以后的版本中會修改。

            這兩個例程一但被調用,它們會查詢文件對象第一次打開時保存的信息,這些信息也可能被實時變化,例如,文件的最近訪問時間屬性會被文件系統設置的當前的系統時間,當然設置這些屬性取決于文件系統的實現。

            FastIoLock,FastIoUnLockSingle,FastIoUnLockAll,and FastIoUnLockAllByKey
            這些例程被用來控制特殊文件的加鎖狀態。對文件的加鎖以字節為單位,所以可以對文件的多個字節進行加密。標準的NT文件系統使用文件系統運行時開發包(FsRtl函數)所提供的通用代碼來驗證鎖權限并存儲文件的加鎖范圍。鎖狀態通過調用NT API函數NtLockFile和NtUnLockFile來控制。

            在Windows NT中有兩種鎖,一種是排它鎖,是寫鎖,說明加鎖的地放要進行修改;另一種是共享鎖,是讀鎖,說明加鎖的地放用來的讀的。多個共享鎖在重疊操作中可以被授權,并且一直保存到釋放為止。將各種加鎖的信息存儲起來在訪問這些信息的時候會提高速度。
            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參數對應加鎖的范圍,ProcessId標識加鎖的進程,如果進行退出,鎖將會清除。Key參數提供一個非透明的值,用來關聯多個鎖,例如調用FastIoUnLockAllByKey可以快速訪問多個鎖。FailImmediately用來標識當鎖無效時是立刻返回失敗還是阻塞直到鎖可用。對于FsRtl函數,如果是無效的鎖則忽略FailImmediately參數,函數返回FALSE。ExclusiveLock參數用來標識是排它鎖還是共享鎖。

            FastUnlockSingle例程被用來釋放對文件的加鎖,原型如下:
            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
            );
            對大多文件系統來說,如果文件沒有加鎖,此例程總是返回TRUE,即使朝無效的鎖,操作也會完成,因為用IRP來操作也同樣會產生相同的錯誤。

            如果這個解鎖操作成功,那么FileOffset,Length,ProcessId,和Key必須和相應的鎖信息匹配,否則操作會返回錯誤STATUS_RANGE_NOT_LOCKED。FastIoUnlockAll例程用來釋放特殊文件所有的鎖,函數原型如下:
            typedef BOOLEAN(*PFAST_IO_UNLOCK_ALL)(
            IN struct _FILE_OBJECT *FileObject,
            PEPROCESS ProcessId,
            OUT PIO_STATUS_BLOCK IoStatus,
            IN struct _DEVICE_OBJECT *DeviceObject
            );
            在這種情況下,Fast I/O例程查找進程ProcessId所操作的文件所有的鎖,并刪除,無論是排它鎖還是共享鎖。這個例程常用在當系統由于關掉程序或終止程序而調用NtCloseFile時。

            FastIoUnlockAllByKey操作用來通過一些特殊的鍵值來刪除一系列鎖。原型如下:
            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
            );
            提供這個例程是為了便于文件服務如SRV。在NT3.51的I/O管理器中沒有出現這個調用。鍵值用來文件服務給遠程客戶機文件加鎖時分配的。因為許多遠程客戶端,僅有ProcessId是遠遠不夠的。同樣,對于多文件服務器,僅使用鍵值也會在其它的文件服務器釋放時導致錯誤。二者同時使用以確保正確操作并允許遠程加鎖。
            久久亚洲电影| 久久精品国产欧美日韩99热| 亚洲人成无码久久电影网站| 99久久精品费精品国产| 91精品国产综合久久久久久| 激情伊人五月天久久综合| 国内精品伊人久久久久AV影院| 久久久无码精品亚洲日韩蜜臀浪潮| 久久精品国产免费观看三人同眠| 色青青草原桃花久久综合| 久久亚洲日韩看片无码| 亚洲午夜久久久久妓女影院| 色婷婷综合久久久中文字幕| 无遮挡粉嫩小泬久久久久久久| 亚洲中文字幕久久精品无码喷水 | 精品乱码久久久久久夜夜嗨| 97久久精品人人澡人人爽| 久久婷婷五月综合成人D啪| 久久久午夜精品| 国产精品久久久久jk制服| Xx性欧美肥妇精品久久久久久| 精品一久久香蕉国产线看播放| 中文字幕无码久久久| 久久精品国产亚洲av高清漫画| 国产ww久久久久久久久久| 一本综合久久国产二区| 天堂久久天堂AV色综合| a级毛片无码兔费真人久久| 久久午夜夜伦鲁鲁片免费无码影视| 亚洲乱码精品久久久久..| 青青青国产精品国产精品久久久久 | 国产精品久久自在自线观看| 久久久久久噜噜精品免费直播 | 精品无码久久久久国产动漫3d| 99久久婷婷国产综合亚洲| 久久久精品久久久久久| 亚洲精品无码久久久久sm| 久久精品国产福利国产琪琪 | AV色综合久久天堂AV色综合在 | 国内精品人妻无码久久久影院导航| 久久精品国产亚洲AV无码麻豆|