Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
) давно сотрудничают с FBI, только делают это по тихому и без лишнего шума?
антивирус, который пожирает больше половины оперативной памяти и занимает кучу места на диске
Limit = xyz. Но это так, не особо, может быть, существенно, но там есть и более не-reader-friendly «находки» в форматировании. И часто этим злоупотребляют, и в часто код действительно выходит трэшевым.Во-первых, люди старательно увеличивают количество строк кода везде, где это возможно
Во-вторых, очень часто используются сомнительные по эффективности алгоритмы. Например, почти везде понатыканы очереди, в которых почти везде осуществляется линейный поиск. При чём это даже в тех компонентах, которые заявлены как realtime. В таймерах, например
В-третьих, лично меня напрягает то, что даже в самом ядре ядра (которое Ke) обработка ошибок сделана на исключениях. При этом, когда исключение возникает, стек разворачивается без освобождения захваченных ресурсов, просто передаётся управление на обработку исключения
Может, отвратительно — это и слишком резко сказано, но когда смотрю на этот код, мне его хочется править и править, чтобы он не вызывал такую степень отторжения у меня.
Обычное ПО, написанное обычными людьми, со своими косяками и находками. Ничего особо гениального, горшки не боги обжигают.
if (!IoResourceList) {
//
// If IoResourceList is NULL, return failure.
//
return NULL;
$ grep finally ntos/ke/* -R
ntos/ke/tests/xcphnd/xcpt4.c: } finally {
ntos/ke/tests/xcphnd/xcpt4.c: } finally {
ntos/ke/tests/xcphnd/xcpt4.c: // Break from a finally clause in a loop.
ntos/ke/tests/xcphnd/xcpt4.c: } finally {
ntos/ke/tests/xcphnd/xcpt4.c: // Break from a doubly nested finally clause in a loop.
ntos/ke/tests/xcphnd/xcpt4.c: } finally {
ntos/ke/tests/xcphnd/xcpt4.c: } finally {
ntos/ke/tests/xcphnd/xcpt4.c: // Break from a doubly nested finally clause in a loop.
ntos/ke/tests/xcphnd/xcpt4.c: } finally {
ntos/ke/tests/xcphnd/xcpt4.c: } finally {
То есть, вы не считаете, что вызов функций 'в столбик', абзацы кода очень часто длиной всего в 3-4 строки, и прочее, в том числе и комментарии…
Во-первых, известно, что для таймеров можно добиться сложности O(1) в худшем случае на всех операциях, кроме его создания.
Во-вторых, про таймеры, особенно KiInsertTimerTable… Не нашёл никаких упоминаний о указанных Вами таблицах.
Но это список, и о каком логарифме идёт речь — не понятно. А для таймеров, вообще-то, стандартный примитив — это куча, а не списки или хэш-таблицы.
NTSTATUS'ы — это, насколько я понял, вообще никакие не цепочки…
if (!NT_SUCCESS(status)) {
// cleanup
return status;
}Я действительно не понимаю, где происходит освобождение захватов в таких случаях (я так честно и написал — не понимаю, и это меня напрягает).
о что try-except редко или часто используются — это не важно (но вообще, 335 точек try-except — это солидно на 150 тысяч строк MS-кода. Во всём Half-Life 2 и то меньше.
Важно то, как они используются… И я, сколько не копался, так и не нашёл мест освобождения захватов после исключений.
#if defined(_WIN64)
if (requestorMode != KernelMode) {
try {
//
// If this is a 32-bit asynchronous IO, then mark the Iosb being sent as so.
// Note: IopMarkApcRoutineIfAsyncronousIo32 must be called after probing
// the IoStatusBlock structure for write.
//
IopMarkApcRoutineIfAsyncronousIo32(IoStatusBlock,ApcRoutine,FALSE);
} except (EXCEPTION_EXECUTE_HANDLER) {
//
// An IRP could not be allocated. Cleanup and return an appropriate
// error status code.
//
IopAllocateIrpCleanup( fileObject, eventObject );
if (auxiliaryBuffer) {
ExFreePool( auxiliaryBuffer );
}
return GetExceptionCode ();
}
}
#endifНу, людей вообще-то на любую работу отбирают…
А вот Ваша уверенность в том, что Катлер — гений, интересна. Почему Вы так думаете?
говорил о возможной передаче не «алгоритмов шифрования», а «исходных кодов» Скайпа. Не понятно правда, чем такое опровержение должно успокоить
Microsoft готова передать ФСБ шифровальный алгоритм Skype