共用方式為


連線和檔案結構鎖定

為了鎖定,使用兩個層級的查閱表格:

  • SRV_CALL和NET_ROOT結構的個別裝置物件資料表, (前置詞資料表)

  • FCB 結構的資料表個別NET_ROOT結構 (FCB 資料表)

這些個別資料表可讓不同NET_ROOT結構上的目錄作業在建立連接之後幾乎完全不幹擾。 不過,相同NET_ROOT結構上的目錄作業會稍微干擾。 下表說明特定作業需要哪些鎖定:

作業 資料類型 需要鎖定

建立或完成

SRV_CALL NET_ROOT V_NET_ROOT

NetName 資料表的獨佔鎖定 (RxCoNtext-RxDeviceObject-pRxNetNameTable >>) 的 TableLock 欄位。

參考、取值或查閱

SRV_CALL NET_ROOT V_NET_ROOT

NetName 資料表上的共用或獨佔鎖定 (RxCoNtext-RxDeviceObject-pRxNetNameTable >>) 的 TableLock 欄位。

建立或完成

FCB SRV_OPEN FOBX

FCB 資料表的獨佔鎖定 (NET_ROOT-FcbTable >) 的 TableLock 欄位。

參考、取值或查閱

FCB SRV_OPEN FOBX

FCB 資料表上的共用或獨佔鎖定 (NET_ROOT-FcbTable > 的 TableLock 欄位) 。

請注意,SRV_OPEN和 FOBX 資料結構的操作目前需要與 FCB 資料結構操作所需的相同鎖定。 這只是省下記憶體的想法。 未來的 Windows 版本可能會在 FCB 層級新增另一個資源,以移除這項限制,以便使用一組共用資源來減少衝突的機率,以降低對可接受低層級的衝突機率。

如果您需要這兩個鎖定 (FinalizeNetFcb,例如) ,您必須先鎖定 NetName 資料表,然後在 FCB 資料表上鎖定。 您必須以相反的順序釋放鎖定。

SRV_CALL、NET_ROOT和V_NET_ROOT建立和最終處理常式受到 NetName 資料表上 RDBSS 鎖定的取得和發行所控管。

FCB 建立和最終處理常式是由與 NET_ROOT 結構相關聯之 NetName 資料表上的鎖定取得和釋放所控管。

FOBX 和 SRVOPEN 建立和最終處理常式是由 FCB 資料表上的鎖定取得和釋放所控管。

下表摘要說明需要取得鎖定的鎖定和模式,以建立和完成各種資料結構:

運算類型 SRV_CALL NET_ROOT FCB SRV_OPEN FOBX

建立

NetName 資料表上的獨佔鎖定

NetName 資料表上的獨佔鎖定

FCB 資料表上的獨佔鎖定

FCB 資料表上的獨佔鎖定

FCB 資料表上的獨佔鎖定

Finalize

NetName 資料表上的獨佔鎖定

NetName 資料表上的獨佔鎖定

FCB 資料表上的獨佔鎖定

FCB 資料表上的獨佔鎖定

FCB 資料表上的獨佔鎖定

參考和取消參考這些資料結構也必須遵守特定慣例。

當與任何資料結構相關聯的參考計數下降至 1 (名稱資料表所保留的唯一參考時,在大部分情況下) ,資料結構可能是最終處理的候選項目。 資料結構可以立即完成,也可以標示為清除。 這兩種方法都是在 RDBSS 中實作。 在取值期間符合鎖定需求時,會立即完成資料結構。 其中一個例外狀況是實作延遲的作業優化 (取 FCB 結構,例如) 。 否則,資料結構會標示為進行清除。

網路迷你重新導向器在 NetName 資料表上應該具有獨佔鎖定,才能呼叫最終處理常式。

若要在下列其中一個資料結構上執行 Create,網路迷你重新導向器驅動程式應該執行類似下列動作:

    getshared();lookup();
    if (failed) {
        release(); getexclusive(); lookup();
            if ((failed) { create(); }
        }
    deref();
    release();

當您成功取得鎖定時,請將節點插入資料表、釋放鎖定,然後查看伺服器是否可用。 如果伺服器可供使用,請設定其餘的資訊,並解除封鎖在相同伺服器上等候的任何人, (SRV_CALL或NET_ROOT結構) 。