Hi All У меня такой вопрос... изучив по мере понимания архив форума win32. хотелось бы уточнить у знающих следующие: 1.насколько различны линейки виндов 2000-ХР-2003-... с точки зрения написания программы на асме+win32api так чтоб програ работала на всех этих виндах то есть без использования недокументированных и прочих сомнительных функций? Или по другому: насколько существенны различия в функциях API этих виндов.
aip Afaik api общий, разумеется, есть дополнения, но они не критичны. Xp лояльнее чем 2k к ошибкам программиста, например, не сохранение регистров EBX, EDI, EDI в оконных обработчиках.
2k лояльнее чем win98, а XP ещё лояльнее, а какая лояльная будет Longhorn - скоро обезьяны смогут программы писать
Imho syscalls не должны валиться от кривых параметров. По крайней мере при вызове из user-mode. А вот user-mode app - черт с ним, пускай валится, если у программера руки не оттуда выросли. Это даже к лучшему, естественный отбор и более ровный софт. Жалко что MS и любители managed code думают иначе... Разгребать всякие try { if(strlen(str)==0) {...} } except(...) уже достало.
То есть насколько могу судить по ответам то примерно такой код будет работать на любых виндах Код (Text): invoke CreateFile,[stina],\ GENERIC_WRITE,\ FILE_SHARE_READ,\ NULL,OPEN_ALWAYS,\ FILE_ATTRIBUTE_ARCHIVE,0 mov [astfa_hf],eax invoke SetFilePointer,[astfa_hf],0,0,FILE_END invoke WriteFile,[astfa_hf],[stinb],[lenbs],astfawr,0
aip Что значит "будет работать"? Если под работой понимать наличие указанных тобой функции, то они есть во всех перечисленных тобой ОС. И их поведение, с точки зрения программиста, одинаково. Если под работой понимать успешность их (функций) выполнение, то это зависит от параметров, которые ты им передал.
q_q И их поведение, с точки зрения программиста, одинаково. Если под работой понимать успешность их (функций) выполнение, то это зависит от параметров, которые ты им передал. Одинаково, да не совсем. Я в MSDN натыкался в паре статей на комментарии, что максимально допустимые значения параметров различаются в 2000 и XP.
CyberManiac Одинаково, да не совсем Ты хочешь сказать, что функции api меняют свою функциональность в зависимости от версии ОС? Imho для обеспечения новой функциональности придумывают новые функции и в документации оговаривают поддерживаемую версию ОС. максимально допустимые значения параметров Не понял. Это что за термин? "Допустимые значения" - понимаю, а причем тут максимальность?
All Просто мне интересно узнать будет ли программка написаная с ориентиром на w2k работать (выполнять все задуманные функции) на всех последующих виндовсах хР, 2003, LongHorn ))
- в общем случае будет, если не станешь задействовать структуры специфичные для w2K. Юзай чистый win32 API. А вот для совместимости с 9х есть некоторые ограничения (в частности юникод и пр.) подробнее у Рихтера. Хотя насчет LongHorn-а, который для обезъян я не уверен...
Zufyxe некоторые ограничения (в частности юникод и пр.) Насчет юникод вопрос особый... может и не по топику но суть в том что если определять при компиляции Код (Text): section '.data' data readable writeable filea db '~file_a.txt',0 stringa db 'First string for write into file',0 stringb db 'БлаБлаБла',0 то по F3 или Hiew в екзешнике данные строки не Unicode формата ... как это соотносится с работой ядра в Unicode
- про юникод, я в том смысле, что 9х не поддерживает его, в принципе. Таким образом, если юзать в программе API-функции ориентированные на параметры в юникоде, типа CreateFileW, LoadLibraryW и тп. то это однозначно в 9х работать не будет. Подробнее у Рихтера.
В w2k и XP есть разница в ядре - добавлены новые IOCTL_... команды для драйверов. У меня была ситуация, когда драйвер работавший нормально в w2k не работал толком в XP, пришлось добавлять обработку других команд Есть разница в работе файловых систем - когда система считывает FAT w2k считывает по секторам (в несколько заходов), а в XP это оптимизировано - считывается FAT целиком, одним запросом... Причем обкатывал драйвер на разных ОС (рус. и англ.) и всегда в ядре были какие-то особенности... мелочи, а не приятно. По поводу пользовательского API, там скорее всего мало что измениться, как правитльно было сказано "Юзай чистый win32 API" и не используй ф-ции помеченные obsolete - устаревшие и если уже совсем нет доверия к MS, ставь в прологе/эпилоге ф-ций pushad/popad )))
С англицкого это "устаревшие", н-р типичные представители из MSDN: Obsolete Functions _hread _hwrite _lclose _lcreat _llseek _lopen _lread _lwrite OpenFile SetHandleCount Вообще их мало, но грабли есть
SteelRat тое есть Код (Text): invoke OpenFile... заменять Код (Text): invoke CreateFileA... FILE_OPEN ???
Ага, а лучше CreateFileW так как начиная с w2k ядро уже юникодовое и Longhorn скорее будет абсолютно UNICODE (без CreateFileA) Вот и соображай
SteelRat ага и в секции дата писать Код (Text): filename DB 0,'F',0,'i',0,'l',0,'e',0,'.',0,'t',0,'x',0,'t',0,0
У Four-F есть прекрасные макросы для MASM, на WASM можно скачать, KmdKit называются... Может я и "перегнул" с выбросом не юникодовых API, но дело движется именно к этому, да и обещают еще 64-х разрядную )