<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=444124&amp;view=findpost&amp;p=3902946</guid>
        <pubDate>Thu, 11 Apr 2024 15:29:24 +0000</pubDate>
        <title>KeWaitForSingleObject()</title>
        <link>https://forum.sources.ru/index.php?showtopic=444124&amp;view=findpost&amp;p=3902946</link>
        <description><![CDATA[Qraizer: В такой редакции можно попасть на дидлук. Если – из-за кривых поинтеров, например, или неверной последовательности деинициализации – мьютекс перестанет существовать.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=444124&amp;view=findpost&amp;p=3902931</guid>
        <pubDate>Thu, 11 Apr 2024 12:58:40 +0000</pubDate>
        <title>KeWaitForSingleObject()</title>
        <link>https://forum.sources.ru/index.php?showtopic=444124&amp;view=findpost&amp;p=3902931</link>
        <description><![CDATA[GAGARIN: atomic_bool не надо, в дампе памяти ядра будет видно захвачен мьютекс или нет, но дампа пока тоже нет)<br>
Неверную синхронизацию перепроверил - там всё гут. Если бы не было гут, то за 12 лет эта проблема бы очень часто давала бы о себе знать.<br>
<br>
Вобщем упростил работу со списком, там она вроде и верная была, но странная. И захват мьютекса сделал так:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">VOID FooLock()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;NTSTATUS Status = STATUS_SUCCESS;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;PAGED_CODE();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;do</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Status = KeWaitForSingleObject(&amp;FooMutex, Executive, KernelMode, FALSE, NULL);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;} while (Status != STATUS_SUCCESS);</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Так или иначе ответ на исходный вопрос получен, спасибо.]]></description>
        <author>GAGARIN</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=444124&amp;view=findpost&amp;p=3902486</guid>
        <pubDate>Tue, 02 Apr 2024 14:31:35 +0000</pubDate>
        <title>KeWaitForSingleObject()</title>
        <link>https://forum.sources.ru/index.php?showtopic=444124&amp;view=findpost&amp;p=3902486</link>
        <description><![CDATA[Qraizer: Если точно не IRQL, тогда остаётся только отлаживаться. Можно завести std::atomic_bool, который выставлять после захвата/освобождения и чекать его перед.<br><br>P.S. Теоретически в программе может быть баг, связанный с неверной синхронизацией. Часто встречающаяся ошибка – захват объекта только при изменении общего ресурса и неиспользование захвата при только чтении.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=444124&amp;view=findpost&amp;p=3902421</guid>
        <pubDate>Mon, 01 Apr 2024 21:24:41 +0000</pubDate>
        <title>KeWaitForSingleObject()</title>
        <link>https://forum.sources.ru/index.php?showtopic=444124&amp;view=findpost&amp;p=3902421</link>
        <description><![CDATA[GAGARIN: Спасибо за ответ. Нет, IRQL &lt;= APC_LEVEL]]></description>
        <author>GAGARIN</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=444124&amp;view=findpost&amp;p=3902418</guid>
        <pubDate>Mon, 01 Apr 2024 19:52:53 +0000</pubDate>
        <title>KeWaitForSingleObject()</title>
        <link>https://forum.sources.ru/index.php?showtopic=444124&amp;view=findpost&amp;p=3902418</link>
        <description><![CDATA[Qraizer: Теоретически нет, судя по параметрам. Другое дело, что я бы проверил IRQL. На уровнях вне DISPATCH_LEVEL объекты синхронизации не работают.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=444124&amp;view=findpost&amp;p=3902415</guid>
        <pubDate>Mon, 01 Apr 2024 17:02:58 +0000</pubDate>
        <title>KeWaitForSingleObject()</title>
        <link>https://forum.sources.ru/index.php?showtopic=444124&amp;view=findpost&amp;p=3902415</link>
        <description><![CDATA[GAGARIN: Для синхронизации доступа к списку используется вот такое:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">VOID FooLock()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;NTSTATUS Status = STATUS_SUCCESS;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;PAGED_CODE();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;do</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Status = KeWaitForSingleObject(&amp;FooMutex, Executive, KernelMode, FALSE, NULL);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;} while (Status == STATUS_ALERTED);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">VOID FooUnlock()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;PAGED_CODE();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;KeReleaseMutex(&amp;FooMutex, FALSE);</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
И работало всё это уже 12 лет, но вот начались сыпаться BSODы у кастомера о том, что список испорчен. Пока есть только минидамп, в нём нельзя понять захвачен ли мьютекс. Может ли KeWaitForSingleObject() вернуть какой-то статус типа STATUS_KERNEL_APC или иной и не захватить мьютекс?]]></description>
        <author>GAGARIN</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      </channel>
      </rss>
	