//
// Here is the "M A R K L U C O V S K Y" hack from hell.
//
// It's here because Mark says he can't avoid sending me double beginning
// backslashes win the Win32 layer.
//if ((OplockCleanup.FileObject->FileName.Length > sizeof( WCHAR )) &&
(OplockCleanup.FileObject->FileName.Buffer[1] == L'\\') &&
(OplockCleanup.FileObject->FileName.Buffer[0] == L'\\')) {
OplockCleanup.FileObject->FileName.Length -= sizeof( WCHAR );
RtlMoveMemory( &OplockCleanup.FileObject->FileName.Buffer[0],
&OplockCleanup.FileObject->FileName.Buffer[1],
OplockCleanup.FileObject->FileName.Length );
*FullFileName = *OriginalFileName = OplockCleanup.FileObject->FileName;
//
// If there are still two beginning backslashes, the name is bogus.
//if ((OplockCleanup.FileObject->FileName.Length > sizeof( WCHAR )) &&
(OplockCleanup.FileObject->FileName.Buffer[1] == L'\\')) {
Status = STATUS_OBJECT_NAME_INVALID;
try_return( Status );
}
}
Здравствуйте, Alexander G, Вы писали:
AG>Здравствуйте, x64, Вы писали:
x64>>(из исходников NTFS NT4):
AG>Интересно, их раздают под NDA или они просто так валяются ?
На торрентах может каждый скачать часть исходников винды, чуть ли не Вин2000 на 400Мб. Там есть такие емейилы как "письма детям", "империя в огне" которых только заголовки присутствуют к сожалениею, а тела самих писем отсутствуют. Вот их бы очень хотелось почитать
забавно а что если Length поставить в 3, и сделать так чтобы Buffer заканчивался на конце валидной страницы памяти. Свалится на выделенной строчке или там где-то раньше проверки еще есть? x64>Улыбнуло (из исходников NTFS NT4): x64>
O>забавно а что если Length поставить в 3, и сделать так чтобы Buffer заканчивался на конце валидной страницы памяти. Свалится на выделенной строчке или там где-то раньше проверки еще есть?
x64>>Улыбнуло (из исходников NTFS NT4): x64>>
Здравствуйте, MShura, Вы писали:
MS>Тоже неплохо будет, если Length будет 3, а Buffer NULL. MS>Еще забавней будет, если запрос на выделение N байт памяти будет выделяться только N/2
А что мелочится, стукнуть кувалдой по работающему винту и всё
O>>забавно а что если Length поставить в 3, и сделать так чтобы Buffer заканчивался на конце валидной страницы памяти. Свалится на выделенной строчке или там где-то раньше проверки еще есть? x64>>>Улыбнуло (из исходников NTFS NT4): x64>>>
MS>Тоже неплохо будет, если Length будет 3, а Buffer NULL. MS>Еще забавней будет, если запрос на выделение N байт памяти будет выделяться только N/2
Ну смысл проверки OplockCleanup.FileObject->FileName.Length > sizeof( WCHAR ) чтоб не свалится в последующих двух строчках. Но ведь OplockCleanup.FileObject->FileName.Length > sizeof( WCHAR ) совсем не означает что OplockCleanup.FileObject->FileName.Length >= 2*sizeof( WCHAR ). Одна из типичных ошибок кстати при работе с UNICODE_STRING.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
O>Одна из типичных ошибок кстати при работе с UNICODE_STRING.
Одна из типичных ошибок кстати при работе со структурами — отсутствие выравнивания.
Если на нечётном байте страница памяти кончилась, значит строка не была выровнена.
Смысл той проверки — проверить длину с учётм того, что передана корректная UNICODE_STRING. Безопасно проверить некорректную UNICODE_STRING намного сложнее.
O>>Одна из типичных ошибок кстати при работе с UNICODE_STRING. AG>Одна из типичных ошибок кстати при работе со структурами — отсутствие выравнивания. AG>Если на нечётном байте страница памяти кончилась, значит строка не была выровнена.
AG>Смысл той проверки — проверить длину с учётм того, что передана корректная UNICODE_STRING. Безопасно проверить некорректную UNICODE_STRING намного сложнее.
Ну так я спрашивал изначально — что является входными данными этого кода? Ежели то что пришло из юзермода — то совсем плохо.. А ежели что нет — все равно код "не красивый". Учитывая то что чтобы сделать его красивее достаточно добавить 3 символа
Как много веселых ребят, и все делают велосипед...