Some engineer's blog

NSIS installer Terminal Services plugin

Для инсталлятора потребовалось знать информацию о сессиях на хосте где запущен он. Поиски в обширной галлерее плагинов не дали результатов. Пришлось быстро запилить свой плагинчик.

Получаем список текущих сессий WTSEnumerateSessions, дальше пробуем получить информацию об аккаунте WTSQuerySessionInformation. возвращаем все эти данные через простейший интерфейс (цикл\функция).

 

Схема терморегулятора TECE 77410010

Сломался контроллер отопления TECE. В любом положении реостата на выходе всегда пульсирует напряжение. Для починки зарисовал его схемку дабы разобраться. Как показали поиски - это OEMный продукт который производит для TECE, REHAU и остальных брендов немецкая компания Möhlenhoff. У них в каталоге он числится под именем Alpha Thermostat (AR2x модели).

Гирляндный автомат

Новый год хороший праздник! В этот момент наряжают елки, украшают квартиры и дома. Если в наличии много Китайских гирлянд и световых приборов (лазеров в особенности) то всей этой технике необходимо время чтоб "остыть". Значит надо чередовать периоды включения и выключения. Напрашивающееся своей простотой решение ввиде горстки Китайских-же суточных таймеров по 150рэ не шибко хорошо потому что период там жестко задан 15 либо 30 минут. А хочется большей энтропии :) 

win32 S.M.A.R.T. disk drive statistics inventory

Еще одна полезная утиль потребовавшаяся на одной работе

MS System Center Configuration Manager не умеет инвентаризировать "искаропке" SMART-статистику дисков. поэтому на коленке был быстро оформлен код который получает эту статистику. и потом VBS скриптом загонял в WMI откуда его уже преспокойно читал SCCM в цикле очередной инвентаризации

Win32 COM server doing Monitor EDID inventory saving to WMI

очередной старинный мелкий проектик писанный для целей внутренней инвентаризации мониторов в среде MS System Center Configuration Manager (SCCM). Дело в том что имевшиеся на рынке решения не умели делать инвентаризацию если на консоли (Session-0) никто не залогинен.
Вот сидит пользователь в RDP, или вообще после включения машинки не логинился, а обычные утилиты (EnTech MonInfo) не могли нормально доставать в этом случае информацию о подключенных мониторах. Кроме всего этого NOIDMIF файлики отжили свое в SCCM 2012 и новых. Самый верный способ это провайдер WMI собственный который сразу как его дернула инвентаризация или еще кто - выдал свежую актуальную информацию.

MS outlook mailbox inventory and default delivery from cmd

Продолжая публикацию старых полезных утилит из прошлого (2011-2014).

 Довольно важная штука здесь (побудившая как-раз к написанию) это изменение дефолтного места доставки почты в мейлбокс\файл из командной строки. потому что ручками оно единично весело а когда надо нескольким тысячам сотрудников быстро туда-сюда...

хелп должен сказать всё что умеет утиля.

tested on MS Outlook 2003/2007/2010/2013 versions
usage: outlookdeliverychanger.exe <function> <parameter>
where <function> is one of the:
/list - print on console all mail profiles,accounts,stores for current user
/listxml - export to XML file specified in <parameter> all mail profiles,accounts,stores for current user
/exportdef - export default delivery to XML file specified in <parameter>
/importdef - import default delivery from XML file specified in <parameter>
/setdefmailbox - set default delivery to mailbox
/setdefbypath - set default delivery to PST store path in <parameter>
/delstorebypath - remove store from profile by full path in <parameter>
/dellocalstores - remove all LOCAL stores from profile (not on exchange server)
/delnondefstores - remove all NON DEFAULT delivery (files) stores from profile

tinyxml2 с поддержкой utf-16

Частенько, очень, нужно без конвертации дополнительной (WideCharToMultiByte и т.п.) работать нативно с utf-16 типом данных (MFC CString Wide char string aka UNICODE) в Win32.

Заморочился в 2013м году и перепилил tinyxml2 для поддержки прямой. Только важный момент:

-теперь библиотека работает только с UTF-16 данными. никакой utf8 не поддерживается!

зато можно смело работать с UNICODE строками в MSVC2010-2015 

 

Управление отоплением (ТЭН)

Тепло это хорошо. Когда теплом можно управлять не вставая с дивана - еще лучше!

Существуют разные варианты включения нагревательных приборов для достижения точного нагрева и поддержания температуры в помещениях. Пришедшие в голову:

  • Реле коммутируем (управляем включением\выключением)
  • Симистором коммутируем при прохождении напряжения через ноль (Zerocross) (управляем включением\выключением)
  • Симистором коммутируем после прохождения через нуль на определенное время (управляем мощностью)
  • Смешанный способ - при прохождении через нуль коммутируем симистором , потом включаем реле закорачивая симистор (таким образом симистор не нагревается при прохожении больших токов) (управляем включением\выключением)

По алгоритмам:

  • Гистерезисом
  • PID-петлей. или PI-петлей т.к. Derivative в больших инертных системах не нужен по большому счету.

а я Alwill AVAST капратифный сломал ;)

Перенос моей статьи, для истории, из ЖЖ (livejournal.com)

АВАСТовский ADNM север оказывается крайне легко можно положить на лопатки вместе с дистрибуцией сигнатурок и прочими вещами. Как так легко да еще и не привелегированным пользователем? А просто элементарно!
Все началось сегодня с того что обьем сикельной базы разросся буквально гигабайтами за пару суток. Наловить столько вирусни нереально, стали разбираться. Обнаружили смешной просчет архитектуры клиент-серверной у аваста:
клиентская часть антивируса (агент) высылает на сервер строковые (да, прямо огромные строки!) данные о каждом своем чихе. Например о том что у него ошибка доступа к файлу какому-либо ;))) Северная часть не задумываясь(!) мигом делает INSERT INTO в таблицу Events (без индексов кстати) и вставляет вот эту вот огромную текстовую строку от клиента ;)
Пример строки (не самой длиной):
AAVM - scanning error: x_AavmCheckFileDirectEx: avfilesScanReal of C:\WINDOWS\TEMP\shshost.dll failed, 00000005.

когда сделали запрос в сикельной базе аваста SELECT COUNT(generated), objectname from events where generated >='02-17-2009' group by objectname
....увидели что каждый клиент успевает "настрелять" таких строк сотнями тысяч ;)


Вывод: если создавать произвольные файлы локально на клиентской машине (не требует прав) с "правильными" расширениями но в таком режиме доступа когда DENY_READWRITE сторонним процессам. клиент AVAST от этого сходит с ума и начинает атаковать свой сервер (и локальный event log машины кстати!)... У сервера мало того что нет тротлинга сообщений, так еще и внутренняя форма хранения этой информации - крайне неоптимизированна с точки зрения дизайна базы данных :(

Prof of concept писать не буду - это уже незаконно.

 

Windows 2008 Fileserver cluster

Перенос моей статьи, для истории, из ЖЖ (livejournal.com)

Переезд с файлового сервера под 2003 на новую 2008 дает много интересного
но, к сожалению, есть и неприятности. Пока я столкнулся со следующим:

  1. Для отключения offline cache (net share ...=... /cache:none) потребовалось писать Win32 приложение, которое будет дергать напрямую API NetShareSetInfo() поскольку для кластерных шар 2008го команда net share /cache НЕ РАБОТАЕТ!
  2. В 2003м была полезная фича: авторасшаривание каталогов в определенной директории. Это сильно экономило время затрачиваемое на создание, например, хомешников юзерей. Теперь такого функционала нету, о чем официально заявляла команда разработчиков. Пришлось убить время и написать Win32 приложение, которое будет само следить за операциями с директориями в указанном пути и шарить или убирать соответствующий ресурс.

 

Для решения первой проблемы исходный код http://pastebin.com/f1dccba49
Для решения второй проблемы код тут http://pastebin.com/f635cac65

Оба проекта собираются в VS2008SP1 с поддержкой UNICODE и далее на используемые кластера
ставится Visual C Runtime Redistributable 2008 x32 SP1 комплект, а потом сами ЕХЕшники.

Если у кого-то вдруг возникнут эти проблемы и не будет под рукой VS - отпишитесь ниже, я выложу
ЕХЕшники готовые.

 

Newer posts → Home ← Older posts