Ищу любую информацию по поводу того, как узнать сигнальное состояние какого объект ждёт поток (это могу узнать только на уровне ядра),
и какой поток владеет этим объектом, т.е. может перевести его в сигнальное состояние. Главный вопрос — как узнать, какие потоки владеют ресурсами семафора? сколько у него ресурсов? Можно ли это узнать на уровне пользователя?
_>Ищу любую информацию по поводу того, как узнать сигнальное состояние какого объект ждёт поток (это могу узнать только на уровне ядра), _>и какой поток владеет этим объектом, т.е. может перевести его в сигнальное состояние. Главный вопрос — как узнать, какие потоки владеют ресурсами семафора? сколько у него ресурсов? Можно ли это узнать на уровне пользователя?
Потоки "могут" владеть только мутексом. У остальных объектов синхронизации нету вообще такого понятия как "владелец".
Что касается как узнать кто владеет мутантом:
ЗЫ Все эти структуры недокументированны, поля, их назначение и смещения могут меняться (и менялись) от версии к версии и даже от хотфикса к хотфиксу. Документированных путей достать эту информацию боюсь нету.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
O>ЗЫ Все эти структуры недокументированны, поля, их назначение и смещения могут меняться (и менялись) от версии к версии и даже от хотфикса к хотфиксу. Документированных путей достать эту информацию боюсь нету.
а нельзя проводить "настройку" тестовой апликацией... запустить все интересующие конфигурации ожиданий, и посмoтреть что куда записалось...
O>>ЗЫ Все эти структуры недокументированны, поля, их назначение и смещения могут меняться (и менялись) от версии к версии и даже от хотфикса к хотфиксу. Документированных путей достать эту информацию боюсь нету. C>а нельзя проводить "настройку" тестовой апликацией... запустить все интересующие конфигурации ожиданий, и посмoтреть что куда записалось...
Проще и надежнее стянуть с микрософта символы и по ним все определить.
Как много веселых ребят, и все делают велосипед...
Пожалуйста, уважайте коллег и не допускайте излишнего цитирования. Для неуважающих напомню, что есть праавила форума и ресурса + санкции за несоблюдение оных. Модератор
O>ЗЫ Все эти структуры недокументированны, поля, их назначение и смещения могут меняться (и менялись) от версии к версии и даже от хотфикса к хотфиксу. Документированных путей достать эту информацию боюсь нету.
Спасибо, получил много полезной информации. Но вопрос частично остался:
Я могу получить объект, который ждёт поток. Но мне ещё надо выяснить, какой поток(процесс) может освободить этот объект.
Т.е., если это будет Event — его может выставить любой поток имеющий на это право (т.е. открыть Event, если его хэндла нет и выполнить SetEvent), а если это считающий семафор — нужно узнать, какие потоки заняли его — и соответственно один из них может его освободить...
Хотелось бы увидеть Ваши советы, спасибо
_>Я могу получить объект, который ждёт поток. Но мне ещё надо выяснить, какой поток(процесс) может освободить этот объект. _>Т.е., если это будет Event — его может выставить любой поток имеющий на это право (т.е. открыть Event, если его хэндла нет и выполнить SetEvent), а если это считающий семафор — нужно узнать, какие потоки заняли его — и соответственно один из них может его освободить... _>Хотелось бы увидеть Ваши советы, спасибо
У семафора нету понятия "поток-владелец", сделать ReleaseSemaphore может совершенно любой поток, включая те, которые его не Wait'тили.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
_>>Я могу получить объект, который ждёт поток. Но мне ещё надо выяснить, какой поток(процесс) может освободить этот объект. _>>Т.е., если это будет Event — его может выставить любой поток имеющий на это право (т.е. открыть Event, если его хэндла нет и выполнить SetEvent), а если это считающий семафор — нужно узнать, какие потоки заняли его — и соответственно один из них может его освободить... _>>Хотелось бы увидеть Ваши советы, спасибо O>У семафора нету понятия "поток-владелец", сделать ReleaseSemaphore может совершенно любой поток, включая те, которые его не Wait'тили.
Точно, понял. Но любые потоки, если им разрешено?
И ещё — а как тогда представляются критические секции, ведь они не являются объектами ядра?
И можешь детальнее написать как получить структуру KMUTANT?
O>>У семафора нету понятия "поток-владелец", сделать ReleaseSemaphore может совершенно любой поток, включая те, которые его не Wait'тили. _>Точно, понял. Но любые потоки, если им разрешено?
Всмысле разрешено? Есть хэндл на семафор — можно делать с ним все что разрешено этим хэндлом.
_>И ещё — а как тогда представляются критические секции, ведь они не являются объектами ядра?
_>И можешь детальнее написать как получить структуру KMUTANT?
Конкретно KMUTANT "получать" не надо. Она объявлена в DDK
Как много веселых ребят, и все делают велосипед...
Re[6]: Какой ресурс ждёт поток, а каким владеет?
От:
Аноним
Дата:
19.01.10 19:50
Оценка:
Здравствуйте, ononim, Вы писали:
Пожалуйста, уважайте коллег и не допускайте излишнего цитирования. Для неуважающих напомню, что есть праавила форума и ресурса + санкции за несоблюдение оных. Модератор
_>>И можешь детальнее написать как получить структуру KMUTANT? O>Конкретно KMUTANT "получать" не надо. Она объявлена в DDK
Пасиба. Под "разрешено" я имел в виду, сможет ли поток из другого процесса открыть и использовать хэндл
_>>>И можешь детальнее написать как получить структуру KMUTANT? O>>Конкретно KMUTANT "получать" не надо. Она объявлена в DDK А>Пасиба. Под "разрешено" я имел в виду, сможет ли поток из другого процесса открыть и использовать хэндл
Если семафор именованный — другой процесс может, его открыть по имени если SECURITY_DESCRIPTOR семафора разрешает доступ к нему тому другому процессу.
Если у процесса имеются права на процесс- у которого есьт хэндл на семафор — OpenProcess/DuplicateHandle и вуаля.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
_>>>>И можешь детальнее написать как получить структуру KMUTANT? O>>>Конкретно KMUTANT "получать" не надо. Она объявлена в DDK А>>Пасиба. Под "разрешено" я имел в виду, сможет ли поток из другого процесса открыть и использовать хэндл O>Если семафор именованный — другой процесс может, его открыть по имени если SECURITY_DESCRIPTOR семафора разрешает доступ к нему тому другому процессу. O>Если у процесса имеются права на процесс- у которого есьт хэндл на семафор — OpenProcess/DuplicateHandle и вуаля.
А вот такой вопрос — как узнать, сколько времени будет поток ждать объект (т.е., с каким временным параметром было вызвано WaitForSingleObject) и с каким WaitType (all или any) в случае WaitForMultipleObject?
_>А вот такой вопрос — как узнать, сколько времени будет поток ждать объект (т.е., с каким временным параметром было вызвано WaitForSingleObject) и с каким WaitType (all или any) в случае WaitForMultipleObject?
вы бы лучше сказали что хотите сделать
вся эта информация легко достается дебагером из крэшдампов, гораздо легче чем то, что вы хотите сделать
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
_>>А вот такой вопрос — как узнать, сколько времени будет поток ждать объект (т.е., с каким временным параметром было вызвано WaitForSingleObject) и с каким WaitType (all или any) в случае WaitForMultipleObject? O>вы бы лучше сказали что хотите сделать O>вся эта информация легко достается дебагером из крэшдампов, гораздо легче чем то, что вы хотите сделать
В общем, хочу написать приложение, которое бы отслеживало тупиковые ситуации связанные с объектами синхронизации. Думаю писать драйвер, чтобы периодически сканировать граф "потоки-ресурсы" и далее редуцировать его. В принципе, приложении более демонстрационное — сначало можно рассмотреть ожидание мьютексов, ожидание окончания других потоков — мне подходит для нужного графа.
Если я действительно иду очень сложным путём — прошу подсказать мне, где почитать и посмотреть полезную мне информацию
Заранее благодарен