Показаны сообщения с ярлыком Process Explorer. Показать все сообщения
Показаны сообщения с ярлыком Process Explorer. Показать все сообщения

среда, 13 июля 2011 г.

Как узнать размер папки?

Как узнать размер папки, к которой нет доступа - спросил меня коллега. Проблема в том, что при попытке сделать это привычным способом - правой кнопкой мыши, возвращается значение 0. Но при этом, сказал он, бекап ведь работает нормально. Такая себе инженерная задачка.
На самом деле тут все достаточно просто. Есть две привилегии: SeBackupPrivilege и SeRestorePrivilege. Наличие этих привилегий в токене процесса дает возможность этому процессу обходить стандартные списки доступа к файлам. Что делать? Проще всего - создать пользователя и добавить его в группу Backup Operators. Согласно настройкам в групповых политиках, эта группа получает эти привилегии. Однако тут есть тонкий момент. Новый механизм integrity level не дает добавить эти привилегии в токен любого процесса. Даже если запустить процесс, который будет  обращаться к таким файлам, от имени пользователя из группы Backup Operators с ходу ничего не получится. Нужно запускать процесс с повышенными привилегиями (elevated privileges). В этом случае все начинает работать.

среда, 4 августа 2010 г.

Случай с тормозящим компом

Van Helsing's ToolKitImage by Compound Eye via Flickr
Странные, странные, странные проблемы. Соседний компьютер, вдруг, ни с того ни с сего начал жутко тормозить. Мышка двигается рывками, дергается, замирает. Окошки отрисовываются очень медленно. Процессы запускаются долго и вдумчиво :). В общем, все совсем неприятно.

Решил немного разобраться с этим вопросом. Надо же было помочь коллеге. Короче говоря, первым делом был запущен process explorer. Он показал, что основным напрягающим фактором являются прерывания. Они поглощали от 60% процессорного времени. К сожалению, при помощи самого procexp нельзя посмотреть, какой компонент системы отвечает за возникающие прерывания. Однако для этой цели есть другой инструмент - xperf. Он является частью Windows Perfomance Toolkit, который в свою очередь можно скачать вместе с Windows SDK. В общем и целом, будем использовать его. Правда тут есть небольшой момент. Клиентская система, на которой все это происходило, работала на Windows XP. К сожалению для этой операционной системы нет xperf. Однако можно просто проинсталлировать Perfomance Toolkit на Vista или Windows 7, а затем скопировать папку с xperf на нашего клиента. Далее, на клиентской системе, в командной строке с правами администратора запускаем ETW трассировку при помощи xperf:

xperf -on latency -stackwalk profile

Теперь наша задача - добиться повторения. Ну в моем случае это не составило трудности. После того, как трассировка поработала какое-то время, делаем вот так:

xperf -d tracecpu.etl

Теперь открываем этот файл и смотрим в него. Видим мы примерно следующее:
 

Как видно из ролика, основным, так сказать, потребителем прерываний является драйвер, отвечающий за дисковую подсистему, atapi.sys.

После этого первым деля м внимательно посмотрел на винт. Оказалось, что шлейф, которым он подключен – поврежден. Замена шлейфа решила проблему.