建立不與使用者模式共用之區段和檢視的驅動程式,在使用區段和檢視時,必須使用下列通訊協定:
驅動程式在開啟區段物件的句柄時,必須使用核心句柄。 驅動程式可以藉由在系統進程中建立句柄,或指定句柄的 OBJ_KERNEL_HANDLE 屬性,確定句柄是核心句柄。 如需詳細資訊,請參閱 物件句柄。
視圖必須僅從系統執行緒對應。 (否則,檢視可從其建立的進程存取。)驅動程式可以使用系統工作線程來執行對映操作,以確保檢視是從系統進程對映的。 如需詳細資訊,請參閱 系統背景工作角色線程 和 驅動程式線程內容。
與使用者模式進程共用檢視的驅動程式在使用區段和檢視時,必須使用下列通訊協定:
必須由驅動程式(而非使用者模式程式)建立區段物件並映射檢視。
如同之前所述,驅動程式在開啟區段物件的控鈕時,必須使用核心控鈕。 驅動程式可以藉由在系統進程中建立句柄,或指定句柄的 OBJ_KERNEL_HANDLE 屬性,確定句柄是核心句柄。 如需詳細資訊,請參閱 物件句柄。
視圖會映射到共享視圖之進程的執行緒上下文中。 最高層驅動程式可以藉由在分派例程中執行映射作業,例如 DispatchDeviceControl,來保證檢視在目前進程上下文中映射。 較低層級驅動程式的分派例程會在任意的執行緒上下文中運行,因此在分派例程中無法安全地映射視圖。 如需詳細資訊,請參閱 驅動程式線程內容。
驅動程式中檢視的所有記憶體存取必須由 try-except 區塊進行保護。 惡意的使用者模式應用程式可能會取消對應檢視或變更檢視的保護狀態。 系統會當機,除非受到try-except塊保護。 如需詳細資訊,請參閱 處理例外狀況。
驅動程式也必須視需要驗證檢視的內容。 驅動程式寫入器無法假設只有受信任的使用者模式元件可以存取檢視。
必須與使用者模式應用程式共用區段對象的驅動程式(必須能夠建立自己的檢視表)必須使用下列通訊協定:
驅動程式,而不是使用者模式進程,必須建立區段物件。 驅動程式絕不能使用從用戶模式傳遞的控制代碼。
將句柄傳遞至使用者模式之前,驅動程式必須呼叫 ObReferenceObjectByHandle 以取得區段對象的參考。 這可防止惡意應用程式關閉句柄來刪除區段物件。 對象參考應該儲存在驅動程式的裝置延伸模組中。
驅動程式不再使用 section 對象之後,它必須呼叫 ObDereferenceObject 來釋放對象參考。
在執行 Microsoft Windows Server 2003 Service Pack 1 (SP1) 和更新版本的系統上,只有內核模式驅動程式可以開啟 \Device\PhysicalMemory。 不過,驅動程式可以決定向用戶應用程式授予句柄。 若要防止安全性問題,只有驅動程式信任的使用者應用程式才能存取 \Device\PhysicalMemory。