Мы пишем...
[Свежие записи][Архив][Друзья][Личная информация]
Below are the 20 most recent journal entries recorded in the "rezkiy" journal:[<< Previous 20 entries]
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, и отправили стек в пейджфайл, и сразу после этого комплишен на диспатче сигнализирует ивент, то все, приехали. Однако так все делают, не выделять же память в пуле под каждый эвент?
А диспатч рутина вполне может вызваться на воркере того драйвера который вызвал нас.
Господа Безбашенный и Давенгер, я правильно рассудил, или как? Кроме вас все равно никто ничего не поймет.
|
04:56 pm
[ссылка] |
prefast
__drv_acquiresCriticalRegion
__drv_maxIRQL(APC_LEVEL)
__drv_arg(((PRESOURCE_DEF)resource)->resource, __drv_acquiresResource(ResourceLite))
|
10:05 am
[ссылка] |
Янке сегодня год Ответственно заявляю, что не так страшен черт.
UPD: 8 зубов, 10 с чем-то килограммов, ползает, ходит, держась за стеночку или за родительский палец, может стоя без опоры пару раз переставить ноги, балаболит на младенческом, иногда выдавая что-то типа "А что это такое" (интерпретация моя), общительна, любопытна, и вообще замечательна.
|
12:52 pm
[ссылка] |
yanka in desert
|
03:39 pm
[ссылка] |
может кому и интересно... ... доехать на тачке из Сиэтла в Южную Калифорнию? Тачка хорошая, расходы на бензин мои, билет на Аляску утром шестого обратно в Сиэтл -- 129 баксов.
|
03:54 am
[ссылка] |
а вот вам и двойная запись Бесплатно. С работающими с первой попытки онлайновыми сервисами. http://www.ideawins.com/
Learning curve скорее всего будет жестковат, но очень уж заманчиво...
|
11:18 pm
[ссылка] |
No more Money http://www.microsoft.com/money/default.mspx
1. Quicken 2. Excel 3. нафиг 4. 1С?
Вопросы в том, хватит ли мне терпения на двойную запись, и важно ли мне автоматически перерабатывать транзакции.
Почему важна двойная запись? Потому что без нее непонятно как отойти от кассового метода учета расходов и доходов. У меня зарплата раз в неделю, за жилье я плачу раз в месяц, за страховку -- раз или два в год, а за машину -- раз в несколько лет. Мои страховочные расходы не скачут как сумашедшие, они примерно одни и те же. Но по кассе -- тихо, тихо, бабах -- килобакс.
|
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 должно быть полтора, и не поправили безобразие только в одном месте...
|
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, это может быть не только в недрах конструктора как пишет Реймонд Чен, но и после того как начал отрабатывать деструктор.
|
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.... но хотелось бы панимаешь ли понять...
|
12:55 am
[ссылка] |
инфляция чуваки, когда???
Есть такое мнение, что она уже состоялась -- пока народ бабло занимал, они же его не только на водку тратили, так? Поэтому вам и пузырь на рынке активов. Про то что пузырь на рынке активов это не я придумал, а впервые услышал это еще лет несколько назад, то ли в Эксперте, то ли в Ведомостях. Значит, лет больше пяти.
Whatever. Исторически, S&P пяццот торговался по какому коеффициенту ПэЕ? семь? А сейчас, посреди рецессии, четырнадцать? ШАЙТАН. И нефть вот снова вверх прет. Не иначе как инфляционные ожидания. И вообще, она всем поможет, шесть лет по 10 процентов -- от моргиджа осталась половина. Ну, в реальном выражении.
А если инфляционные ожидания -- это и есть половина инфляции.
Вопрос в том, сколько конкретно этой инфляции, и когда, и отвечаете ли вы за это _своим_ баблом, или так, попиздеть. Женя, знаю, отвечает, т.к. набрала долгов по фиксированной ставке. Остальные?
|
01:23 pm
[ссылка] |
медвед http://www.seattlepi.com/local/6420ap_wa_seattle_bear.html
Баллард -- старый район Сиэтла, не даунтаун, но вполне обитаемый, лет сто с чем-то уже.
|
09:22 pm
[ссылка] |
WTT Никогда не думал, что обрадуюсь, снова его увидев. Однако вот обрадовался и пошел, так сказать, осваивать.
|
12:14 pm
[ссылка] |
Seven Хороша. Особенно тема "characters". Как-то даже жалко багчекать такую симпатичную машинку. А придется.
|
07:28 pm
[ссылка] |
До свидания, Крайслер. Он уходит, но обещает вернутся.
Посмотрим, получится ли у профсоюза рулить бизнесом в этот раз. Они как-то пробовали рулить авиакомпанией, получилось плохо. Хотя... его же Фиату отдают. Чем знаменит Фиат? По мне так, ВАЗом.
Интересно получается.
|
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.
ЗЫ. Дело не в том, что они быстрые, мне на это насрать. Дело в том, как они об этом сообщают миру.
|
09:40 am
[ссылка] |
какой ужас... http://blog.seattlepi.com/davidhorsey/archives/166572.asp
Я не понимаю почему нельзя с уважением -- а не с пренебрежением, как автор по ссылке -- относиться с людям с противоположными взглядами на экономическую политику.
|
06:13 pm
[ссылка] |
Про карьеру Если кто не читает Реймонда Чена (а таких наверное большинство), то рекомендую ознакомиться с интересной статьей в его блоге.
Рассказываю дальше. Недавно был случай. Я позвонил в ресторан уточнить, во сколько закрывается кухня. Сказали, до 1:40 кормят, приходите. Ну я приехал в 1:20. Когда мне отказали в еде, попросил менеджера, рассказал ему про предшествовавший визиту звонок, менеджер рассказал что сегодня особый день, и мгновенно урегулировал проблему. Молодец. Но я не про это.
Сижу, значит, у стойки бара, наворачиваю Pad Thai. По диагонали от меня сидит дядька который обсуждает со своим собутыльником, как бы хорошо ему сейчас пожрать. Ну, приходит барменша, он спрашивает у нее что это у меня такое, она отвечает, он выражает желание о чем-то подобном, на которое получает отказ. Через небольшое время после этого дядька продолжает обсуждение с собутыльником. Теперь они стали обсуждать меня, что во мне такого специального, что мне еду продают а ему нет, может я знакомый какой или еще кто. В конце прозвучала фраза, обращенная то ли в воздух, то ли к менеджеру:
- Is he an actor???
Может, есть что-то разумное в мечтах плохо учащихся семиклассников?
|
04:08 pm
[ссылка] |
TWIMC http://www.amazon.com/dp/1932910859?tag=tholneth-20
|
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 минут после активации. - Лайв месенджер логинится и показывает сообщения, в т.ч. кириллицу. - Лайв мейл просто работает. - Синхронизация с эксченджем заработала сразу, просто сразу. Письма приходят на телефон через пять секунд после их появления на десктопе
ГЛАВНОЕ - телефон начал работать во всем здании. РАньше он работал ТОЛЬКО на подоконнике или на улице. Мистика, но приятная.
|
[<< Previous 20 entries] |