ERESOURCE 常式簡介
系統會提供取得和釋放 ERESOURCE 結構的常式,以及檢查其目前狀態。
取得和釋放 ERESOURCE 結構
驅動程式可以使用 ERESOURCE 結構來實作 獨佔/共用同步處理。 獨佔/共用同步處理的運作方式如下:
任意數目的執行緒可以取得共用的 ERESOURCE。
只有一個執行緒可以獨佔取得 ERESOURCE。 如果尚未以共用方式取得執行緒,則只能獨佔取得 ERESOURCE。
目前無法取得 ERESOURCE 的執行緒可以選擇性地進入等候狀態,直到可以取得 ERESOURCE 為止。 系統會維護兩個正在等候 ERESOURCE 的執行緒清單:獨佔等候程式和共用等候者清單。
專用/共用同步處理的一般用途是實作讀取/寫入鎖定。 讀取/寫入鎖定可讓數個執行緒執行讀取作業,但一次只能寫入一個執行緒。 這可以直接在取得 ERESOURCE 方面實作。
驅動程式會配置 ERESOURCE 的儲存體,並使用 ExInitializeResourceLite初始化它。 系統會維護使用中所有 ERESOURCE 結構的清單。 當驅動程式不再需要特定的 ERESOURCE 時,它必須呼叫 ExDeleteResourceLite ,才能從系統清單中刪除它。 驅動程式也可以藉由呼叫 ExReinitializeResourceLite來重複使用 ERESOURCE。
驅動程式可以在 ERESOURCE 上執行下列基本作業:
取得與 ExAcquireResourceSharedLite共用的 ERESOURCE。 只有當資源尚未獨佔取得且沒有獨佔等候程式時,此常式才會取得資源。
使用 ExAcquireResourceExclusiveLite以獨佔方式取得 ERESOURCE。 只要資源尚未獨佔或共用,此常式就會取得資源。
使用 ExConvertExclusiveToSharedLite將獨佔取得轉換為共用下載。
使用 ExReleaseResourceLite釋放取得的資源。
ExAcquireResourceSharedLite和ExAcquireResourceExclusiveLite的Wait參數會決定目前的執行緒是否等候取得 ERESOURCE。 如果您指定 FALSE 的值,且無法取得 ERESOURCE,則常式會傳回 FALSE。 如果您指定 TRUE的值,則目前的執行緒會放在 ERESOURCE 的適當等候清單中。
檢查 ERESOURCE 結構的狀態
驅動程式也可以判斷 ERESOURCE 的目前狀態,如下所示:
使用 ExIsResourceAcquiredLite 或 ExIsResourceAcquiredSharedLite 來判斷 ERESOURCE 是否已取得為共用或獨佔。 使用 ExIsResourceAcquiredExclusiveLite 來檢查是否已特別取得 ERESOURCE。
使用 ExGetSharedWaiterCount 來判斷 ERESOURCE 的共用等候程式數目,並使用 ExGetExclusiveWaiterCount 來判斷 ERESOURCE 的獨佔等候程式數目。