Reserved1(4) As Long
...
Reserved2(4) As Long
ULONG Reserved1[4];
...
ULONG Reserved[4];
Привычка такая. Для больших объемов (больше 4кб) я ее обычно использую. Тем более, что для HeapAlloc необходимо еще и кучу найти, а это лишние телодвижения.Интересно узнать у автора статьи, почему он использует VirtualAlloc а не HeapAlloc? Ведь первая выделяет память по несколько килобайт срау.
Но выделится-то все равно страница размером 4096 байт. Впрочем Темыч уже ответил...1 страница(4 Кб) это 4096 байт, а не 4000...
Да, меня сейчас в сети практически не бывает. Много работы - времени посидеть и почитать форумы катастрофически не хватает. Ну а если находится время посидеть за компом "для себя", то посвещяю его написанию вируса, который уже почти готов... Так что извеняюсь за то, что вопросы ко мне оставались долгое время без ответа. Итак...tyomitch писал(а):(Уже и не надеясь завладеть вниманием автора)
Угу. Очепятка. Конечно 16.tyomitch писал(а):SYSTEM_HANDLE_INFORMATION = 2
Это, конечно, было мне известно. Но я брал в расчет тот факт, что между двумя вызовами функции информация о хэндлах может поменяться (и не редко делает это!), а перебор гарантирует, что мы получим самую "свежую" инфу.tyomitch писал(а):при нехватке места туда положат требуемый размер -- и не нужен перебор
Да. А разве в исходниках я не включал эту привилегию?tyomitch писал(а):мне для этого потребовалось включить SeDebugPrivilege, иначе не давало
Ну, вообще если бы не комментарий в скобках, то я б и не понял что ты имеешь ввиду. Хотя то, что без скобок и то, что в скобках - абсолютно разные вещи. Хэндл, как известно, просто индекс ячейки в трехуровневой таблице (два первых бита - уровень таблицы). Ячейка же указывает на сам объект ядра. Так вот, к чему я это - понятие "родительский объект" есть не у всех объектов. Вот у объекта "процесс" есть запись об ID родительского процесса (EPROCESS->InheritedFromUniqueProcessId), поэтому нет проблем узнать процесс-родитель. А у объекта "файл", как не сложно догадаться, нет "ссылки" на том. Зато есть ссылка на имя файла. Имя, если я не ошибаюсь, в Native'ном формате - "\Device\HardiskVolume3\WINNT". Отмечу, что из имени в нативном формате нельзя однозначно получить имя в Win32-формате (из "\Device\HardiskVolume3\WINNT" получить "K:\WINNT"), а вот наоборот можно. Как писалось в одной статье: "преобразование явно может не быть однозначным даже в случае компьютера без службы сервера, ибо существует программа subst." Т.е. единственный способ - это отсечь от имени начало - "\Device\HardiskVolume3", перебрать каталог объектов "\Global??" и найти симлинк, указывающий на то, что обозначено в "отсеченной части". Имя симлинка и будет буквой тома ("C:", "D:").tyomitch писал(а):как по хэндлу дочернего объекта узнать родительский? (В моём случае, по хэндлу файла -- том.)
Twister писал(а):Да. А разве в исходниках я не включал эту привилегию?tyomitch писал(а):мне для этого потребовалось включить SeDebugPrivilege, иначе не давало
Twister писал(а):Надеюсь, что столь запоздалый ответ все же будет полезен...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3