Home
Мы пишем... Below are the 20 most recent journal entries recorded in the "rezkiy" journal:

[<< Previous 20 entries]

Июль 8, 2009
07:46 pm

[ссылка]

pageability of stacks
Вот есть воркер тред. Системный, созданный драйвером. Он что-то там шуршит на PASSIVE_LEVEL. Наступает превед, то есть например конец квантума, и начинают исполнять кого-то еще. Внимание, вопрос: может ли кернел взять и отправить на диск те жалкие три страницы, где лежит стек этого замечательного треда, пока тред READY но совсем не RUNNING? Конкретно, могу ли я взять что-то на стеке этого треда и передать в DPC?

Известно, что если тред ждет в KeWaitForSingleObject(object, waitreason, UserMode, whaever) то ДА. Если тред ждет в KeWaitForSingleObject(object, waitreason, KernelMode, whaever), то НЕТ. А если он НИЧЕГО не сказал и его прото так выпинали с процессора, то тогда как???

Здравый смысл советует что НЕТ, не отправит:

Вот например диспатч рутина. Она что-то там шуршит и передает в комплишен рутину указатель на ивент который у нее самой на стеке. Сама же делает IoCallDriver, а потом через пару инструкций делает KeWaitForSingleObject(... KernelMode...).

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

А диспатч рутина вполне может вызваться на воркере того драйвера который вызвал нас.

Господа Безбашенный и Давенгер, я правильно рассудил, или как? Кроме вас все равно никто ничего не поймет.

(8 комментариев | Оставить комментарий)

04:56 pm

[ссылка]

prefast
__drv_acquiresCriticalRegion
__drv_maxIRQL(APC_LEVEL)
__drv_arg(((PRESOURCE_DEF)resource)->resource, __drv_acquiresResource(ResourceLite))

(2 комментария | Оставить комментарий)

Июль 6, 2009
10:05 am

[ссылка]

Янке сегодня год
Ответственно заявляю, что не так страшен черт.

UPD: 8 зубов, 10 с чем-то килограммов, ползает, ходит, держась за стеночку или за родительский палец, может стоя без опоры пару раз переставить ноги, балаболит на младенческом, иногда выдавая что-то типа "А что это такое" (интерпретация моя), общительна, любопытна, и вообще замечательна.

(8 комментариев | Оставить комментарий)

Июнь 27, 2009
12:52 pm

[ссылка]

yanka in desert

(2 комментария | Оставить комментарий)

Июнь 22, 2009
03:39 pm

[ссылка]

может кому и интересно...
... доехать на тачке из Сиэтла в Южную Калифорнию? Тачка хорошая, расходы на бензин мои, билет на Аляску утром шестого обратно в Сиэтл -- 129 баксов.

(2 комментария | Оставить комментарий)

Июнь 17, 2009
03:54 am

[ссылка]

а вот вам и двойная запись
Бесплатно. С работающими с первой попытки онлайновыми сервисами.
http://www.ideawins.com/

Learning curve скорее всего будет жестковат, но очень уж заманчиво...

(1 комментарий | Оставить комментарий)

Июнь 10, 2009
11:18 pm

[ссылка]

No more Money
http://www.microsoft.com/money/default.mspx

1. Quicken
2. Excel
3. нафиг
4. 1С?

Вопросы в том, хватит ли мне терпения на двойную запись, и важно ли мне автоматически перерабатывать транзакции.

Почему важна двойная запись? Потому что без нее непонятно как отойти от кассового метода учета расходов и доходов. У меня зарплата раз в неделю, за жилье я плачу раз в месяц, за страховку -- раз или два в год, а за машину -- раз в несколько лет. Мои страховочные расходы не скачут как сумашедшие, они примерно одни и те же. Но по кассе -- тихо, тихо, бабах -- килобакс.

(5 комментариев | Оставить комментарий)

02:18 pm

[ссылка]

C
Оказывается, так нельзя...
const PRTL_GENERIC_COMPARE_ROUTINE DkCompareRoutine[MY_ENUM_MAX] = 
{
    [MY_ENUM_VALUE0] = ImplementedCompareRoutine,
    [MY_ENUM_VALUE1] = NULL,
    [MY_ENUM_VALUE2] = NULL
};

Приходится писать так:
const PRTL_GENERIC_COMPARE_ROUTINE DkCompareRoutine[MY_ENUM_MAX] = 
{
    ImplementedCompareRoutine,
    NULL,
    NULL
};
C_ASSERT(MY_ENUM_VALUE0 == 0);
C_ASSERT(MY_ENUM_VALUE1 == 1);
C_ASSERT(MY_ENUM_VALUE2 == 2);


Зачем C_ASSERT? Чтобы кривые ручки, мои или чьи-то, не решили что между 1 и 2 должно быть полтора, и не поправили безобразие только в одном месте...

(Оставить комментарий)

Июнь 8, 2009
11:47 am

[ссылка]

the story of one crash
пришел дамп. В месте завала ситуация выглядит примерно так:
01e5fc58 785922fa kernel32!UnhandledExceptionFilter+0x55b
01e5ff90 01d356fa msvcr90!abort+0x10f [f:\dd\vctools\crt_bld\self_x86\crt\src\abort.c @ 137]
01e5ffb4 7c80b713 (binary)!(thread function)+0xca

ясное дело, сами мы abort() не вызываем. Это сделали за нас... А что мы собссно вызывали?
01d356ed 8b45e8          mov     eax,dword ptr [ebp-18h] куда показывает локальная переменная
01d356f0 8b10            mov     edx,dword ptr [eax]     то есть не просто куда показывает а то куда 
                                                         показывает то на что она показывает
01d356f2 8b4de8          mov     ecx,dword ptr [ebp-18h] невинный reordering
01d356f5 8b4248          mov     eax,dword ptr [edx+48h] да, 13-й указатель по счету
01d356f8 ffd0            call    eax по нему и вызываем
... и тут оно завалилось

Ну что, вызов виртуальной функции через __thiscall, однако. Ничего странного. В коде именно это и написано. (UPD Был пропущен шаг...) Но в стек трейсе ее нет. А что у нас на стеке??
Смотрим на стек... как работает инструкция call? Сохраняет eip на стеке, вызывает то что сказали. "Наш" фрейм 01e5ffb4, смотрим что там (читать снизу вверх начиная с 01e5ffb8)
01e5ff80  01e5ffb4 рядом с нашим бейз поинтером???? Все пропало. То есть вот фрейм которого нет в трейсе.
01e5ff84  78591679 msvcr90!_purecall+0x22 но ЧТО за фак?????????? какого хрена 
                   невинная мембер функция хранит у себя такой странный поинтер на стеке???
01e5ff88  00000000 это тоже они....
01e5ff8c  3cc076a1 это какие-то локальные переменные того кого мы вызвали...
01e5ff90  01e5ffb4 это наш бейз поинтер
01e5ff94  7c80b713 (binary)!(thread function)+0xca это наш eip по случаю call
01e5ff98  00000000 и тут тоже разумно
01e5ff9c  008ed340 значения
01e5ffa0  00000000 правдоподобные
01e5ffa4  000004c7 в них разумные
01e5ffa8  00000000 переменные
01e5ffac  008ee6a0 локальные
01e5ffb0  00000001 и храним тут свои
01e5ffb4  01e5ffec мы сохранили его бейз поинтер
01e5ffb8  7c80b713 kernel32!BaseThreadStart+0x37 он нас вызвал
01e5ffbc  008ee6a0


Смотрим КОГО же такого странного мы на самом вызывали...

0:008> dd [ebp-18h] L1
01e5ff9c  008ed340
0:008> dd 008ed340 L1
008ed340  01d46714 
0:008> dd 01d46714 + 0x48 L1
01d4675c  01d28106
0:008> ln 01d28106 
(01d28106)   (binary)!purecall   |
Exact matches:

Ну, что-то стало понятно. Вызвали _чисто_ вирутальную функцию. Оно и завалилось. Изучение vtable этого экземпляра показало, что vtable _весь_ от дедушки, а не от внука, как должно было быть.
0:008> ln 01d46714 
(01d46714)   (binary)!(grandparent class)::`vftable'   |


Как объяснить, что vtable такой странный, у нас же внук, к тому же пятью строками выше мы вызывали другие виртуальные фукнкции которых у деда не было, почему оно не завалилось там???

Оказалось, что за это время отработал деструктор. Поэтому vtable такой необычный. Так что если вдруг видите purecall, это может быть не только в недрах конструктора как пишет Реймонд Чен, но и после того как начал отрабатывать деструктор.

(3 комментария | Оставить комментарий)

Июнь 4, 2009
10:26 pm

[ссылка]

emptying the RTL's splay tree
как бы это сделать попроще чтобы велик не изобрести?
    PRTL_GENERIC_TABLE Table;
    ...
    PVOID ptr;
    PVOID RestartKey = NULL;
//  while (!RtlIsGenericTableEmpty(Table))
    for (ptr = RtlEnumerateGenericTableWithoutSplaying(Table, &RestartKey);
         ptr != NULL;
         ptr = RtlEnumerateGenericTableWithoutSplaying(Table, &RestartKey))
    {
        RtlDeleteElementGenericTable(Table, ptr);
    }


пропускает понимаешь ли половину элементов.... прямо как ТаблицаЗначений при таком же подходе догадайтесь-в-каком-продукте.
понятно что можно раскомментировать строчку с while.... но хотелось бы панимаешь ли понять...

(3 комментария | Оставить комментарий)

Июнь 1, 2009
12:55 am

[ссылка]

инфляция
чуваки, когда???

Есть такое мнение, что она уже состоялась -- пока народ бабло занимал, они же его не только на водку тратили, так? Поэтому вам и пузырь на рынке активов. Про то что пузырь на рынке активов это не я придумал, а впервые услышал это еще лет несколько назад, то ли в Эксперте, то ли в Ведомостях. Значит, лет больше пяти.

Whatever. Исторически, S&P пяццот торговался по какому коеффициенту ПэЕ? семь? А сейчас, посреди рецессии, четырнадцать? ШАЙТАН. И нефть вот снова вверх прет. Не иначе как инфляционные ожидания. И вообще, она всем поможет, шесть лет по 10 процентов -- от моргиджа осталась половина. Ну, в реальном выражении.

А если инфляционные ожидания -- это и есть половина инфляции.

Вопрос в том, сколько конкретно этой инфляции, и когда, и отвечаете ли вы за это _своим_ баблом, или так, попиздеть. Женя, знаю, отвечает, т.к. набрала долгов по фиксированной ставке. Остальные?

(3 комментария | Оставить комментарий)

Май 18, 2009
01:23 pm

[ссылка]

медвед
http://www.seattlepi.com/local/6420ap_wa_seattle_bear.html

Баллард -- старый район Сиэтла, не даунтаун, но вполне обитаемый, лет сто с чем-то уже.

(5 комментариев | Оставить комментарий)

Май 15, 2009
09:22 pm

[ссылка]

WTT
Никогда не думал, что обрадуюсь, снова его увидев. Однако вот обрадовался и пошел, так сказать, осваивать.

(Оставить комментарий)

Май 5, 2009
12:14 pm

[ссылка]

Seven
Хороша. Особенно тема "characters". Как-то даже жалко багчекать такую симпатичную машинку. А придется.

(Оставить комментарий)

Апрель 30, 2009
07:28 pm

[ссылка]

До свидания, Крайслер.
Он уходит, но обещает вернутся.

Посмотрим, получится ли у профсоюза рулить бизнесом в этот раз. Они как-то пробовали рулить авиакомпанией, получилось плохо. Хотя... его же Фиату отдают. Чем знаменит Фиат? По мне так, ВАЗом.

Интересно получается.

(4 комментария | Оставить комментарий)

Апрель 28, 2009
08:00 pm

[ссылка]

finally, they're showing some class
http://www.microsoft.com/windows/internet-explorer/videos.aspx?mname=IE8_Perf_Test2

That said... Quote from a person I know:

- Blame IE. You can't be wrong.

ЗЫ. Дело не в том, что они быстрые, мне на это насрать. Дело в том, как они об этом сообщают миру.

(4 комментария | Оставить комментарий)

Апрель 16, 2009
09:40 am

[ссылка]

какой ужас...
http://blog.seattlepi.com/davidhorsey/archives/166572.asp

Я не понимаю почему нельзя с уважением -- а не с пренебрежением, как автор по ссылке -- относиться с людям с противоположными взглядами на экономическую политику.

(4 комментария | Оставить комментарий)

Апрель 8, 2009
06:13 pm

[ссылка]

Про карьеру
Если кто не читает Реймонда Чена (а таких наверное большинство), то рекомендую ознакомиться с интересной статьей в его блоге.

Рассказываю дальше. Недавно был случай. Я позвонил в ресторан уточнить, во сколько закрывается кухня. Сказали, до 1:40 кормят, приходите. Ну я приехал в 1:20. Когда мне отказали в еде, попросил менеджера, рассказал ему про предшествовавший визиту звонок, менеджер рассказал что сегодня особый день, и мгновенно урегулировал проблему. Молодец. Но я не про это.

Сижу, значит, у стойки бара, наворачиваю Pad Thai. По диагонали от меня сидит дядька который обсуждает со своим собутыльником, как бы хорошо ему сейчас пожрать. Ну, приходит барменша, он спрашивает у нее что это у меня такое, она отвечает, он выражает желание о чем-то подобном, на которое получает отказ. Через небольшое время после этого дядька продолжает обсуждение с собутыльником. Теперь они стали обсуждать меня, что во мне такого специального, что мне еду продают а ему нет, может я знакомый какой или еще кто. В конце прозвучала фраза, обращенная то ли в воздух, то ли к менеджеру:

- Is he an actor???

Может, есть что-то разумное в мечтах плохо учащихся семиклассников?

(Оставить комментарий)

Март 16, 2009
04:08 pm

[ссылка]

TWIMC
http://www.amazon.com/dp/1932910859?tag=tholneth-20

(Оставить комментарий)

Февраль 25, 2009
01:18 pm

[ссылка]

про WM
Как знают читатели этого журнала, я одно время работал в WM, а до этого стал фанатом реализации адресной книги в их продуктах. В общем-то только ее фанатом. Остальным не пользовался.

Но тут приперло.

Меня угораздило поселиться в месте, где нет интернета. Никакого, даже соседского. Ну то есть соседский-то есть, но запаролен. Хакать неохота, ибо неправильно это.

Есть телефон. На нем был WM5. Я слил контакты на декстоп (out-of-the-box experience на Висте, сама пошла на WU, скачала WM Device Center, установила, синхронизировалась), проапгрейдил WM на WM6-something, подписался на интернет.

Ну что... Из минусов:

- Мобильный IE не понимает некоторых ссылок и пытается открывать .msi файлы вместо того чтобы скачивать
- тот же недостаток у лайв мейла.
- нет инбоксового экспириенса на ХР, надо ставить ActiveSync и/или дрова Блютуса, все это когда-то на компе было, но я это все посносил за ненадобностью.

Из плюсов:

- не считая IE и соединения с XP машиной, все работает как часы.
- проблемы с IE лечатся установкой Оперы
- Жопорез заработал через 15 минут после активации.
- Лайв месенджер логинится и показывает сообщения, в т.ч. кириллицу.
- Лайв мейл просто работает.
- Синхронизация с эксченджем заработала сразу, просто сразу. Письма приходят на телефон через пять секунд после их появления на десктопе

ГЛАВНОЕ
- телефон начал работать во всем здании. РАньше он работал ТОЛЬКО на подоконнике или на улице. Мистика, но приятная.

(9 комментариев | Оставить комментарий)

[<< Previous 20 entries]

Разработано LiveJournal.com

Реклама