Not a kernel guy

… in the Windows kernel team

Thursday, March 8, 2007

Список “опасных” функций.

В MSDN добавили список “опасных” функций и рекомендуемых безопасных аналогов.

Правда самое главное, почему-то, засунули в середину длиннющей страницы:

Simply replacing a banned function call with a better replacement does not guarantee that the code is secure. It’s possible to misuse the replacement function, most commonly by getting the destination buffer size wrong.
Review all instances of replaced function calls, and verify that the destination buffer size is correct.

Простая замена «опасной» функции «безопасным» аналогом не гарантирует безопасности кода. Неправильное использование «безопасных» функций возможно. Наиболее часто передается неправильный размер целевого буфера. Просмотрите все случаи замены функций и проверьте, что размер целевого буфера задан верно.

Это нужно было написать большими красными буквами в самом начале. :-)

via Michael Howard.

Posted at 4:29 pm •

RSS feed | Trackback URI

9 Comments »

Comment by Steel Monster — March 12, 2007 @ 2:14 am

На первый взгляд это выглядит как запущенный случай NIH-синдрома.

 
Comment by Steel Monster — March 12, 2007 @ 2:35 am

Опаньки… Оказывается это я ретроград…
“The strcpy_s secure version of strcpy, standardised in ISO/IEC TR 24731, is so far supported by some C libraries, including Microsoft C Runtime Library.”

 
Comment by 468 — March 12, 2007 @ 2:57 am

Простите за жууткий оффтопик) Я просто уже не знаю куда обратиться :)

Вопрос ужасен) нужно создать непрерывный на диске файл (потипу ntldr)… вариантов 2:
1) создавать и проверять на непрерывность (как, чем??)
2) создать сразу непрерывный (хотя наверное так невозможно)

Подскажите в какую сторону копать? Размер файла - примерно 200-300 к..

ну и важно чтобы файл не “ездил” по диску во время дефрагментации, достаточно ли для этого атрибута HIDDEN+SYSTEM, нужно ли постоянно держать файл? (все под Win)

PS Решение нужно как на FAT так и на NTFS. Это точно можно сделать, но как проще и правильней…???

Обращаюсь к Вам так как вы ближе всего к истине те к ..team ;) , СПАСИБО, и пардон на оффтопик, обещаю не злоупотреблять :)

 
Comment by Not a kernel guy — March 12, 2007 @ 10:56 am

 

нужно создать непрерывный на диске файл (потипу ntldr)… вариантов 2:
1) создавать и проверять на непрерывность (как, чем??)
2) создать сразу непрерывный (хотя наверное так невозможно)

Подскажите в какую сторону копать? Размер файла - примерно 200-300 к..

Похоже, что нужно копать в сторону Disk Defragmenting API.

Кроме того, на http://www.sysinternals.com раньше была утилита для дефрагментации отдельных файлов. Вполне возможно, что её исходники можно найти в сети.

ну и важно чтобы файл не “ездил” по диску во время дефрагментации, достаточно ли для этого атрибута HIDDEN+SYSTEM, нужно ли постоянно держать файл? (все под Win)

Это скорее от утилит дефрагментации зависит. Скорее всего нужно держать файл открытым. Но даже так нет гарантии. У Русиновича была утилитка для дефрагментации открытых файлов. Она просто дефрагментировала их во время загрузки системы.

Может проще будет реализовать чтение файлов с NTFS? :-)

 
Comment by Not a kernel guy — March 12, 2007 @ 11:02 am

 

Опаньки… Оказывается это я ретроград…
“The strcpy_s secure version of strcpy, standardised in ISO/IEC TR 24731, is so far supported by some C libraries, including Microsoft C Runtime Library.”

Какая-то доля NIH-синдрома всё-таки присутствует, я думаю. Другое дело, что лучших альтернатив как-то не видно. ISO шибко медленна на подъём.

 
Comment by 468 — March 21, 2007 @ 3:39 am

ага, спасибо за ответ!! я пропал - но именно потому, что коллега дошел сам до defragmenting api и мы это сделали.

по поводу держать файл - скорее всего так и будем, на сторонние утилиты, которые несмотря на держание файла дефрагментируют - забьем, в принципе это скорее административно решается… (пропишем в документации)

теперь, другая проблема. как найти номер сектора этого файла на жестком диске? в Defragmenting API можно получить VCN и LCN, но VCN это вообще не то (\

 
Comment by 468 — March 21, 2007 @ 3:51 am

рр. в третий раз пытаюсь запостить. [No valid entry. Please try again:]

[(VCN), which is its relative offset from the beginning of the file], а [LCNs should be treated only as ordinal, or relative, numbers. There is no guaranteed mapping of logical clusters to physical hard drive sectors]…

читать NTFS конечно можно попробовать, у нас даже есть код который это делает до загрузки Windows, но он глючит и я пока туда не лез.. В том числе потому, что это будет “хаком”, который может перестать работаь в любой момент…

пока мы ищем поиском по сигнатуре, но это долго и не оптимально…

Если у вас есть мысли - в каком направлении нам стоит двигаться - буду очень благодарен :)

И большое спасибо за ответ!! :)

PS кавычки постить нельзя оказывается

 
Comment by Not a kernel guy — March 21, 2007 @ 9:40 am

 

как найти номер сектора этого файла на жестком диске? в Defragmenting API можно получить VCN и LCN

Не знаю.

читать NTFS конечно можно попробовать, у нас даже есть код который это делает до загрузки Windows, но он глючит и я пока туда не лез.. В том числе потому, что это будет “хаком”, который может перестать работаь в любой момент…

А “делать свое чёрное дело” сразу после загрузки драйвера NTFS - не получается? Это был бы выход.

 
Comment by 468 — March 22, 2007 @ 1:06 am

Посмотрим, идея хорошая, но пока непонятно насколько это нам подходит… большое спасибо за ответы! :)

 

Your Comment (smaller | larger)

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Powered by WordPress