ZwCreateFile: Почему GENERIC_ALL не дает аппендить?
От: sergey77666 Марс  
Дата: 14.01.18 02:11
Оценка:
Так работает:
DesiredAccess = FILE_APPEND_DATA | SYNCHRONIZE;


А так почему-то нет (вместо аппенда перезаписывает файл):
DesiredAccess = GENERIC_ALL | FILE_APPEND_DATA;

Ну, и так тоже:
DesiredAccess = GENERIC_ALL;


Всякому ясно, что такие вот "generic" — также, как и "for dummies" — это зло, от которого нужно избавляться.
Но что именно там лишнее?
Объявлен он так:
#define GENERIC_ALL                      (0x10000000L)

Что тоже очень плохо, кстати. Лень им было расписать константу нормально, что ли...

P.S.
CreateDisposition = FILE_OPEN_IF
CreateOptions = FILE_SYNCHRONOUS_IO_NONALERT
Re: ZwCreateFile: Почему GENERIC_ALL не дает аппендить?
От: Alexander G Украина  
Дата: 14.01.18 08:10
Оценка:
Здравствуйте, sergey77666, Вы писали:


S>Объявлен он так:

S>
S>#define GENERIC_ALL                      (0x10000000L)
S>

S>Что тоже очень плохо, кстати. Лень им было расписать константу нормально, что ли...

Generic-маски применимы ко всем типам объектов (не только к файлам), всегда старшие 4 бита в 32-битной маске, и мапятся на разные значения.
Для файлов есть FILE_GENERIC_* константы, ещё есть IoGetFileObjectGenericMapping ( + RtlMapGenericMask )
Русский военный корабль идёт ко дну!
Re: ZwCreateFile: Почему GENERIC_ALL не дает аппендить?
От: ononim  
Дата: 14.01.18 09:30
Оценка:
FILE_WRITE_TO_END_OF_FILE, и не нужно никакого FILE_APPEND_DATA
Как много веселых ребят, и все делают велосипед...
Re[2]: ZwCreateFile: Почему GENERIC_ALL не дает аппендить?
От: sergey77666 Марс  
Дата: 14.01.18 09:38
Оценка:
Здравствуйте, ononim, Вы писали:

O>FILE_WRITE_TO_END_OF_FILE, и не нужно никакого FILE_APPEND_DATA


Так это для ZwWriteFile? А я пишу обертку для create и для write, где минимум параметров и лишний вообще не кстати, append должен быть в create, а перебросить его нельзя, поскольку (пока) обертка использует обычные хендлы, а не свою структуру.
Конечно, не помешало бы сделать свою структуру, причем не struct, а класс, все на ООП сделать, но ради чего, ради 1 заказа в 3 года?
Отредактировано 14.01.2018 9:39 sergey77666 . Предыдущая версия . Еще …
Отредактировано 14.01.2018 9:39 sergey77666 . Предыдущая версия .
Отредактировано 14.01.2018 9:39 sergey77666 . Предыдущая версия .
Re[3]: ZwCreateFile: Почему GENERIC_ALL не дает аппендить?
От: ononim  
Дата: 14.01.18 10:45
Оценка:
S>Так это для ZwWriteFile? А я пишу обертку для create и для write, где минимум параметров и лишний вообще не кстати, append должен быть в create, а перебросить его нельзя, поскольку (пока) обертка использует обычные хендлы, а не свою структуру.
Значит кроме write обертка должна иметь метод append
Как много веселых ребят, и все делают велосипед...
Re[4]: ZwCreateFile: Почему GENERIC_ALL не дает аппендить?
От: sergey77666 Марс  
Дата: 14.01.18 18:47
Оценка:
Здравствуйте, ononim, Вы писали:

S>>Так это для ZwWriteFile? А я пишу обертку для create и для write, где минимум параметров и лишний вообще не кстати, append должен быть в create, а перебросить его нельзя, поскольку (пока) обертка использует обычные хендлы, а не свою структуру.

O>Значит кроме write обертка должна иметь метод append

Ты хоть раз видел такую обертку? В .NET, Qt и т.д. разве так? Нет, там append — параметр при открытии файла.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.