За что "убиваются" процессы

Как часто бывает у вас такое стечение обстоятельств, когда при некоторых условиях в некоторую форму не удается поместить определенные данные (например, создать каталог с определенным именем или открыть определенный файл), потому что "Приложение выполнило недопустимую операцию и будет закрыто"? Не спешите пенять на "глюкавость окон" или кривые руки - быть может, вам поможет мой рецепт. Вопрос разрешим вполне определенно. Нажмите кнопочку "Сведения" на этом гадком представителе семейства оконных вида мелкомягких ;-)) и прочтите адрес, на который ссылается стек, он имеет вид типа xxxx:yyyy.

В силу того, что при функционировании приложения для каждого потока, им создаваемого (за исключением потоков с приоритетом выше 24-го, то есть realtime), служебными процессами Win9x производится подсчет контрольной суммы (параллельно аналогичным службам, обитающим в памяти и на винчестере). При несовпадении вычисленной и некоторой "достоверной" (что это такое - тема отдельного разговора) сумм в целях предотвращения потери данных (действительно, при вмешательстве извне такое несовпадение будет иметь место) процесс "прибивается" системой, при этом регистры процессора остаются в неизменном состоянии, что подготовленному человеку представляется способом оценки причины "падежа".

При вычислении контрольной суммы потока учитываются вместе с его кодом и данные, вводимые в полях формы. Если их содержимое таково, что контрольная сумма кода при суммировании с контрольной суммой данных даст число, большее максимально допустимой 0001:0000 (шестнадцатиричное), то произойдет (такова внутренняя структура Окон) перенос флага CF, а Форточки воспринимают это в любом случае как сигнал к ошибке. Вероятность такого стечения обстоятельств, конечно, исчезающе мала, но ведь и сверка производится "по десять раз на дню", так что не удивляйтесь, если вам в эту секунду (час) не удается ввести куда-то определенную информацию, а программа "вылетает" раз за разом.

Таким образом, если причина "глюка" установлена с высокой достоверностью, рекомендую просто перезагрузить графическую оболочку Окон и работать в свое удовольствие.

Доктор Mexicanetz Express,
tso@chem.bsu.unibel.by

Версия для печатиВерсия для печати

Номер: 

40 за 2000 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Аватар пользователя Alf
2Доктор Mexicanetz Express

У меня w2k и ICQ 2000b, как только пытаюсь сохранить лог, система присекает мои действия, говорит мол что программа сгенерила ерор о в течении 2 минут её закрывет. С 2000а такового ниразу не наблюдалось.

Аватар пользователя Glen
Кто может прокоммнетировать эту статью насчет контрольной суммы? Я никогда про такое не слышал.

Вообще же если программа написана не на Assembler, то обычно такие ошибки означают, что программа обратилась к учвстку памяти за пределом своего адресного пространства. Ошибка "несанкионированный доступ к порту ввода/вывода" вряд ли может возникнуть, так как все выполняют такие операции не через порты непосредственно, а через некие библиотеки (или самой операционной системы, или еше какие-то, скажем, MFC).

Аватар пользователя Max Kurmaz
Честно говоря, всегда считал, что окно с сообщением об ошибке ("недопустимая операция") появляется при срабатывании аппаратной защиты памяти. Может, это действительно какая-то контр. сумма? Ведь исключения защищенного режима проявляются в виде BSOD.