簡體   English   中英

需要幫助理解“DBWinMutex”

[英]Need help understanding “DBWinMutex”

我正在使用這篇文章編寫我自己的 DebugView 版本: https://www.codeproject.com/Articles/23776/Mechanism-of-OutputDebugString作為起點。 該代碼似乎工作正常。 但是我不明白命名互斥體“DBWinMutex”的使用。 這個互斥鎖在代碼開頭打開:

CComBSTR DBWinMutex = L"DBWinMutex";
HANDLE m_hDBWinMutex = ::OpenMutex(MUTEX_ALL_ACCESS,
                                   FALSE,
                                   DBWinMutex);

並沒有在程序結束前關閉??

我覺得這很奇怪。 我認為必須反復鎖定和解鎖互斥鎖,以便 OutputDebugString 可以寫入共享的 memory “DBWIN_BUFFER”?

但是,我能夠讀取其他程序編寫的 OutputDebugString 消息,因此互斥鎖似乎不會鎖定“DBWIN_BUFFER”進行寫入。 此外,我還可以與我的 DebugView 實現並行運行 DebugView,它們都可以讀取 OutputDebugString 消息。 因此,互斥鎖似乎也不授予“DBWIN_BUFFER”獨占讀取權限。

使用上面的 MUTEX_ALL_ACCESS 訪問意味着我必須以管理員身份運行程序。 當我將其替換為 SYNCHRONIZE 訪問時,該程序在 function 看來完全相同,只是我不必以管理員身份運行它。 這可以嗎?或者它可能會導致一些微妙的錯誤?

我還測試了上面 OpenMutex 的返回,如果它是 null 調用 CreateMutex。

您鏈接到的文章中所述, DBWinMutex僅由OutputDebugString()本身使用,以防止多個線程同時寫入 output 緩沖區。 調試監視器根本不需要使用DBWinMutex

圖片

但是,上圖中有一個錯誤。 它應該看起來更像這樣:

圖片

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM