-
> Riply © (26.09.08 20:11) [18] > > > [16] Городской Шаман (26.09.08 19:37) > > Если у MS куча багов в ОС, то почему вы считаете что не > может быть багов в документации. > > Я так не считаю. Разумеется есть. > "Не ошибается только тот, кто ничего не делает" (с) (К сожалению, > не помню чья) > Но если меня спросят: "Где вероятнее встретить ошибку ?
MSDN писали индусы, а солдатов каждую свою строчку проверил на своём опыте.
Хотя, если сравнивать Фленова и MSDN, то вы правы.
-
Городской Шаман (26.09.08 21:56) [20]
> MSDN писали индусы, а солдатов каждую свою строчку проверил > на своём опыте.
Строчку "Hello, world" ? Так ее многие проверяли на своем опыте. Не доверяю я книгам русских авторов - это либо переводчики либо последователи Фленова и Архангельского.
Для написания драйверов за глаза хватает документации DDK, никаких Солдатовых и Шрайберов не требуется. Опять же, хорошие и проверенные массой народу драйверы с исходниками и картинками есть у Руссиновича.
-
> Если у MS куча багов в ОС, то почему вы считаете что не > может быть багов в документации.
Да потому что ее читают на несколько порядков больше народу и шлют свои фидбэки. Там на каждой странице есть ссылка: Send feedback to Microsoft - как думаешь, зачем придумана ? И в том числе по этим фидбэкам в документацию вносятся исправления.
-
> Игорь Шевченко © (26.09.08 23:42) [21] > > Для написания драйверов за глаза хватает документации DDK, > никаких Солдатовых и Шрайберов не требуется
Хватает. Но когда нужно быстро разобраться в отличиях написания программ между пользовательским режимом и ядром и быстро написать рабочий драйвер (который будет работать в реальной системе) то проще воспользоваться готовыми шаблонами решений того же Солдатова.
Ну а потом можно уже подбирать свой стиль, внимательно читая DDK.
Это раньше люди годами занимались изучение чего-то сложного, а сейчас "встал и сделал" и "это должно было быть сделано вчера"...
-
Городской Шаман (27.09.08 02:42) [23]
> проще воспользоваться готовыми шаблонами решений того же > Солдатова.
Даже не смешно. Готовых решений там не видно днем с огнем.
-
> Игорь Шевченко © (27.09.08 14:37) [24] > > Даже не смешно. Готовых решений там не видно днем с огнем.
Там не готовые шаблоны драйверов, а готовые шаблоны различных решений для тех кто привык к работе в пользовательском режиме. Тоесть приводятся адекватные решения в режиме ядра того что человек привык делать в пользовательском режиме. Так что особо переучиваться даже не нужно будет, ну и пару тонкостей запомнить.
Плохо что в режиме ядра нельзя ООП заюзать, свой менеджер памяти писать придётся, а это долго :(
-
Городской Шаман (27.09.08 21:23) [25]
> Там не готовые шаблоны драйверов, а готовые шаблоны различных > решений для тех кто привык к работе в пользовательском режиме. > Тоесть приводятся адекватные решения в режиме ядра того > что человек привык делать в пользовательском режиме. Так > что особо переучиваться даже не нужно будет
В печке место такой книжке.
-
> Игорь Шевченко © (27.09.08 21:42) [26] > > > Тоесть приводятся адекватные решения в режиме ядра того > > что человек привык делать в пользовательском режиме. Так > > что особо переучиваться даже не нужно будет > > В печке место такой книжке.
Видел я драйвера написанные только по DDK причем студентами. У Dlink все драйвера такие. Если установить девайсину от Dlink на компьютер, то как минимум раз в день синий экран гарантирован.
А в книжках автор делится опытом, как все таки правильно применять эти 1024 функции в режиме ядра чтобы не было потом горько и обидно пользователю этих драйверов.
Это тоже самое что Delphi учить по help-у, не прочитав ни одной книжки перед этим. Я так делал. Просмотрел свои программы, которые я писал в самом начале, понял что я похожее повторил в них все антипаттерны. Но они работают, хоть и с глюками.
Так что книга полезна тем что автор делится секретами когда использовать различные паттены, а когда точно нельзя использовать определенные паттерны.
-
Городской Шаман (28.09.08 06:37) [27]
> Если установить девайсину от Dlink на компьютер, то как > минимум раз в день синий экран гарантирован.
Оно конечно смешно, но именно у меня стояли девайсины от DLink - а именно сетевые платы. Работали как часы, с момента установки.
Ты руки не пробовал выпрямить ?
> Это тоже самое что Delphi учить по help-у, не прочитав ни > одной книжки перед этим.
Конечно тоже смешно, но я прошел именно такой путь - изучал Delphi не прочитав ни одной книжки - по одной простой причине - их, книжек, еще не успели написать, ну и напечатать тоже. Ты как думаешь вообще - авторы, которые эти книжки писали, тоже ждали, пока на них первокнига не снизойдет ?
-
> Игорь Шевченко © (28.09.08 11:08) [28] > > Городской Шаман (28.09.08 06:37) [27] > > > Если установить девайсину от Dlink на компьютер, то как > > минимум раз в день синий экран гарантирован. > > Оно конечно смешно, но именно у меня стояли девайсины от > DLink - а именно сетевые платы. Работали как часы, с момента > установки. > > Ты руки не пробовал выпрямить ?
Значит вам повезло с моделью. У Dlink встречается нормальное оборудование типа DWL-2100AP, но такое бывает в процентах 20 случаев.
> Игорь Шевченко © (28.09.08 11:08) [28] > > > Это тоже самое что Delphi учить по help-у, не прочитав > ни > > одной книжки перед этим. > > > Конечно тоже смешно, но я прошел именно такой путь - изучал > Delphi не прочитав ни одной книжки - по одной простой причине > - их, книжек, еще не успели написать, ну и напечатать тоже. > Ты как думаешь вообще - авторы, которые эти книжки писали, > тоже ждали, пока на них первокнига не снизойдет ?
Нет не думаю. Но думаю, что если WDM модель была создана в 98, NT в 96 и IFS модель драйвера тоже где-то в 96, то авторы этих книг имели намного больше времени, чем я, чтобы изучить тонкости работы драйверов в системе Windows. Ну а так как мне именно сейчас понадобилось разобраться в разработке драйверов, то я лучше часть граблей обойду и воспользуюсь опытом этих авторов.
Так как драйвера (резидентные обработчики прерываний) я разрабатывал только под DOS, то ввиду несколько отличающейся модели драйвера в Windows (которому более подходит название плагин ядра) мне проще основы изучить по книге.
А по документации учится не сложно, но часто можно допустить такие ошибки которые мастеру бы и голову не пришли. Вот лично моё решение, когда я учился разработке БД и SQL на живом и до сих пор работающем проекте.
Данные одной системной утилиты извлекались и сохранялись в базу Access. SQL на нужном уровне я изучил по документации Delphi примерам и документации Access, коннект к базе создавался через ODBC (подсмотрел в реестре). Но была проблемка - данные не всегда после сохранения оказывались в базе. Как вы думаете в чем?
-
А по документации учится не сложно, но часто можно допустить такие ошибки, которые мастеру бы и голову не пришли. Вот лично моё решение, когда я учился разработке БД и SQL на живом и до сих пор работающем проекте. Данные одной системной утилиты извлекались и сохранялись в базу Access. SQL на нужном уровне я изучил по документации Delphi примерам и документации Access, коннект к базе создавался через ODBC (подсмотрел в реестре). Но была проблемка - данные не всегда после сохранения оказывались в базе. Как вы думаете, в чем? Оказалось проблема в транзакциях!!! Точнее, в комите, я привык работать с ФС-базами (в институте), там необходимости в комите не было (это сейчас знаю что это, а тогда не знал и инет был фиговый). Как я ее решил – Положил на форму таймер, который выполнял раз в секунду вот этот код:
procedure TNTDForm.TimerNtdTimer(Sender: TObject);
begin
TimerNtd.Enabled:=False;
CsGraphMainForm.SDDatabase1.StartTransaction;
CsGraphMainForm.SDDatabase1.Commit;
TimerNtd.Enabled:=True;
end;
И проблема чудесным образом разрешилась, просто тогда я считал по аналогии с файл-серверными, что комит нужен для сброса буфера базы на диск. А данная программа используется и работает по сей день. Вот для того чтобы избежать таких “чудесных” самопальных решений (хоть и рабочих) – нужны книги, даже того же Фленова.
-
Нет, Софт, книги Фленова не нужны, потому что они вредны. Они учат шаблонам. А овладение шаблонами еще не знание и уж тем более, не повод для наездов на MS.
-
> Вот для того чтобы избежать таких “чудесных” самопальных > решений (хоть и рабочих) – нужны книги, даже того же Фленова. > > <Цитата> > > Игорь Шевченко © (29.09.08 02:00) [31] > > Нет, Софт, книги Фленова не нужны, потому что они вредны. > Они учат шаблонам. А овладение шаблонами еще не знание > и уж тем более, не повод для наездов на MS. >
И в добавок. Они учат шаблонам содержащим ошибки. А ученик выучивший эти шаблоны об этих ошибках и не знает ничего.
-
> [1] Rouse_ © (26.09.08 11:41) > Но есть у меня тут кусочек драйвера, который тоже нормально работает: Появилось чуть свободного времени - решила посмотреть твой "кусочек драйвера". Разумеется, сразу появилась проблемма. Ну как же без них то :) Как у тебя определяется структура _EPROCESS ? Я посмотрела ее в двух источниках, пользующхся моим наибольшим доверием (ReactOS и линуксоиды). У них определения разные, причем разница - критична. Неприятности начинаются еще с _KPROCESS: У ReactOS она заканчивается такими полями: UCHAR ThreadSeed; /* 066 */
UCHAR DisableBoost; /* 067 */
} KPROCESS; а у линуксоидов добавлено еще четыре поля: UCHAR PowerState;
BOOLEAN DisableQuantum;
UCHAR IdealNode;
UCHAR Spare;
} KPROCESS, *PKPROCESS; Как результат _EPROCESS у них начинает различаться уже с первых полей, а дальше - хуже. С новыми полями разница в смещении только растет. (например у поля UniqueProcessId это уже $84 против $94 ) Приведу кусочек от линуксоидов (он мне больше нравиться :) ) typedef struct _EPROCESS ;
PVOID Session; UCHAR ImageFileName[16]; LIST_ENTRY JobLinks; PVOID LockedPagesList; LIST_ENTRY ThreadListHead; PVOID SecurityPort; PVOID PaeTop; ULONG ActiveThreads; ULONG GrantedAccess; ULONG DefaultHardErrorProcessing; SHORT LastThreadExitStatus; PPEB Peb; EX_FAST_REF PrefetchTrace; LARGE_INTEGER ReadOperationCount; LARGE_INTEGER WriteOperationCount; LARGE_INTEGER OtherOperationCount; LARGE_INTEGER ReadTransferCount; LARGE_INTEGER WriteTransferCount; LARGE_INTEGER OtherTransferCount; ULONG CommitChargeLimit; ULONG CommitChargePeak; PVOID AweInfo; Собираюсь взять их данные за основу. У тебя такие же смещения или нет ? Если нет, до дай мне, пожалуйста, твой вариант - буду брать среднее-арифметические смещения :)
-
> [33] Riply © (06.10.08 06:41)
Уфф... При помощи моей кошки, чертовой бабушки и калькулятора, вроде удалось все привести к "правильному" виду. :) Но проверка, все-равно, не помешает. "Меня терзают смутные сомнения", что это безобразие может быть разным, даже в разных сервис паках.
-
для рассмотрения структур EPROCESS, KPROCESS и прочих рекомендую скачать и установить Debugging Tools for Windows (с www.microsoft.com), скачать отладочные символы (насколько я знаю, именно скачать, а не настроить сервер символов) и в windbg в режиме локальной отладки ядра сказать dt nt!_EPROCESS
-
> [35] Игорь Шевченко © (06.10.08 10:05) > для рассмотрения структур EPROCESS, KPROCESS и прочих рекомендую скачать и установить Debugging Tools for Windows
Спасибо.
P.S. Т.е. все что мы с вместе кошкой делали (возились с EPROCESS) можно отправить "коту под хвост" ? :)
-
Riply тут дело в том, что полностью доверять реактосу - нельзя. У них в некоторых случаях встречаются несоответствия с win (что вполне понятно). У тебя DDK нет, что ли?
-
> [37] slow!alfamoon!com (06.10.08 11:29) > У тебя DDK нет, что ли?
Есть..., вроде..., но... наверное, какой-то не очень правильный. Например, струкруры EPROCESS я в нем не нашла.
-
> Если нет, до дай мне, пожалуйста, твой вариант
typedef struct _EPROCESS ;
ULONG PaePageDirectoryPage;
UCHAR ImageFileName[ 16 ];
ULONG VmTrimFaultValue;
BOOLEAN SetTimerResolution;
UCHAR PriorityClass;
union ;
USHORT SubSystemVersion;
};
PVOID Win32Process;
struct _EJOB *Job;
ULONG JobStatus;
LIST_ENTRY JobLinks;
PVOID LockedPagesList;
PVOID SecurityPort ;
PWOW64_PROCESS Wow64Process;
LARGE_INTEGER ReadOperationCount;
LARGE_INTEGER WriteOperationCount;
LARGE_INTEGER OtherOperationCount;
LARGE_INTEGER ReadTransferCount;
LARGE_INTEGER WriteTransferCount;
LARGE_INTEGER OtherTransferCount;
SIZE_T CommitChargeLimit;
SIZE_T CommitChargePeak;
LIST_ENTRY ThreadListHead;
PRTL_BITMAP VadPhysicalPagesBitMap;
ULONG_PTR VadPhysicalPages;
KSPIN_LOCK AweLock;
} EPROCESS;
#define PS_JOB_STATUS_NOT_REALLY_ACTIVE 0x00000001
#define PS_JOB_STATUS_ACCOUNTING_FOLDED 0x00000002
#define PS_JOB_STATUS_NEW_PROCESS_REPORTED 0x00000004
#define PS_JOB_STATUS_EXIT_PROCESS_REPORTED 0x00000008
#define PS_JOB_STATUS_REPORT_COMMIT_CHANGES 0x00000010
#define PS_JOB_STATUS_LAST_REPORT_MEMORY 0x00000020
typedef EPROCESS *PEPROCESS;
|