共用方式為


區段物件和檢視的安全性問題

建立不與使用者模式共用區段和檢視的驅動程式,在使用區段和檢視時,必須使用下列通訊協定:

  • 驅動程式在開啟區段物件的控制碼時,必須使用核心控制碼。 驅動程式可以藉由在系統進程中建立控制碼,或指定控制碼的 OBJ_KERNEL_HANDLE 屬性,確定控制碼是核心控制碼。 如需詳細資訊,請參閱 物件控制碼

  • 檢視只能從系統執行緒對應。 (否則,檢視可從其內容建立于.) 驅動程式的進程存取,以確保檢視是從系統進程進行對應,方法是使用系統背景工作執行緒來執行對應作業。 如需詳細資訊,請參閱 系統背景工作執行緒驅動程式執行緒內容

與使用者模式進程共用檢視的驅動程式在使用區段和檢視時,必須使用下列通訊協定:

  • 驅動程式不是使用者模式進程,必須建立區段物件並對應檢視。

  • 如先前所述,驅動程式在開啟區段物件的控制碼時,必須使用核心控制碼。 驅動程式可以藉由在系統進程中建立控制碼,或指定控制碼的 OBJ_KERNEL_HANDLE 屬性,確定控制碼是核心控制碼。 如需詳細資訊,請參閱 物件控制碼

  • 檢視會對應到共用檢視之進程的執行緒內容中。 最高層級驅動程式可以藉由在分派常式中執行對應作業,例如 DispatchDeviceControl,保證檢視會對應到目前的進程內容中。 較低層級驅動程式的分派常式會在任意執行緒內容中執行,因此無法安全地對應分派常式中的檢視。 如需詳細資訊,請參閱 驅動程式執行緒內容

  • 驅動程式內檢視的所有記憶體存取都必須受到try-保護,但區塊除外。 惡意的使用者模式應用程式可能會取消對應檢視或變更檢視的保護狀態。 兩者都會造成系統損毀,除非嘗試受到封鎖以外的保護- 。 如需詳細資訊,請參閱 處理例外狀況

驅動程式也必須視需要驗證檢視的內容。 驅動程式寫入器無法假設只有受信任的使用者模式元件才能存取檢視。

必須與使用者模式應用程式共用區段物件的驅動程式, (必須能夠建立自己的檢視) 必須使用下列通訊協定:

  • 驅動程式不是使用者模式進程,必須建立區段物件。 驅動程式絕對不能使用從使用者模式傳遞的控制碼。

  • 將控制碼傳遞至使用者模式之前,驅動程式必須先呼叫 ObReferenceObjectByHandle ,才能取得 section 物件的參考。 這可防止惡意應用程式藉由關閉控制碼來刪除區段物件。 物件參考應該儲存在驅動程式的裝置擴充功能中。

  • 驅動程式不再使用 section 物件之後,它必須呼叫 ObDereferenceObject 以釋放物件參考。

在執行具有 Service Pack 1 (SP1) 和更新版本的 Microsoft Windows Server 2003 的系統上,只有核心模式驅動程式可以開啟 \Device\PhysicalMemory。 不過,驅動程式可以決定為使用者應用程式提供控制碼。 若要避免安全性問題,只有驅動程式信任的使用者應用程式才應該獲得 \Device\PhysicalMemory的存取權。