|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Май 12, 2004 00:56:03 Вот собственно и вопрос: а аналог в ядре Где??? Цель – записал в файл, закрыл. Готово. Хоть перезагрузись, инфа в файле. Когда такие требования к реестру, то просто – ZwFlushKey. В MSDN сказано использовать флаг FILE_NO_INTERMEDIATE_BUFFERING, да вот фига. Всё равно не пишет (сразу. Если поерзать по диску, инфа flush-ится) Точнее: использую флаги: (FILE_SYNCHRONOUS_IO_NONALERT OR FILE_NON_DIRECTORY_FILE OR FILE_NO_INTERMEDIATE_BUFFERING OR FILE_WRITE_THROUGH) З.Ы. Пытался проследить за FlushFileBuffers – попал черти-знает куда. Надеюсь на Вашу помощь. Заранее благодарен. --==ППС==-- |
|
|
Дата: Май 12, 2004 05:07:27 Посмотри KeFlushIoBuffers, FlushAdapterBuffers. |
|
|
Дата: Май 12, 2004 07:58:24 Вот те и нет в МСДН :) Спасибо. Попробую! |
|
|
Дата: Май 12, 2004 15:18:00 · Поправил: PavPS Рано обрадовался. Понял из DDK, что мне подходит KeFlushIoBuffers, но ни как не врублюсь, откуда взять MDL-Memory descriptor. Надо еще и Memory manager-а юзать?? Как ваще ф-ю эту юзать??? Еще нашел FlushWriteBuffers - вот думаю ваще то, что надо. А она пустая. Там один Ret :( И еще попутно вопрос: А можно ли с этой целью послать IRP_MJ_FLUSH_BUFFERS. И если можно, то на кого слать CallDriver? И всё же, возвращаясь к флагам при IoCreateFile@?? почему не действуют. Может конфликт какой, может кто игнорируется, как при флагах FILE_NO_INTERMEDIATE_BUFFERING и APPEND_DATA? P.S. посмотрел в какие дебри ведет FlushIoBuffers. Там есть записи в порты. Может ч/з них как-то можно. З.З.Ы. Sory за множество "а может...". Ну темно по этой теме. Может в лит-ру какую тыкните. Или сходники какие :)) ?? Заранее благодарен за любые ответы, мнения и т.д. |
|
|
Дата: Май 12, 2004 16:36:18 · Поправил: PavPS И еще 1 вопросик, чтобы не создавать новой темы. Может плохо читал или смотрел, но сам не знаю, и решил спросить: Как узнать, по какому адресу спроецированы ntoskrnl.exe & hal.exe (програмно) . Или они всегда проецируются по одним и тем же адресам??? |
|
|
Дата: Май 13, 2004 03:04:32 По поводу ядра это тебе к Four-F надо обращаться. |
|
|
Дата: Май 13, 2004 07:49:16 Да знаю. Вот сидим и ждем уважаемого гуру... |
|
|
Дата: Май 13, 2004 14:07:24 [ PavPS: Вот сидим и ждем уважаемого гуру... ] Да ладно там... Тебе нужна NtFlushBuffersFile. На KeFlushIoBuffers, FlushAdapterBuffers и т.п. забей - это совсем не то. NTSTATUS NtFlushBuffersFile( IN HANDLE FileHandle, OUT PIO_STATUS_BLOCK IoStatusBlock ); Либо используй FILE_FLAG_WRITE_THROUGH без FILE_FLAG_NO_BUFFERING. Тогда все операции с файлом пройдут через кэш, но данные будут сброшены на диск до возвращения функции. Если же добавить ещё и FILE_FLAG_NO_BUFFERING, тогда все операции будут выполняться прямо с файлом. Но FILE_FLAG_NO_BUFFERING накладывает довольно жесткие ограничения на выравнивание буферов и на размер данных (посмотри внимательно его описание в MSDN). [ PavPS: А можно ли с этой целью послать IRP_MJ_FLUSH_BUFFERS. И если можно, то на кого слать CallDriver? ] Можно. NtFlushBuffersFile именно это и делает. Если руками, то через ObReferenceObjectByHandle надо получить указатель на FILE_OBJECT. Затем получить указатель на девайс, который рулит эти файлом через IoGetRelatedDeviceObject. Затем сформировать IRP через IoBuildSynchronousFsdRequest и слать его драйверу через IoCallDriver. Но я бы с этим не связывался ;) [ PavPS: Как узнать, по какому адресу спроецированы ntoskrnl.exe & hal.exe (програмно) . Или они всегда проецируются по одним и тем же адресам??? ] ZwQuerySystemInformation(SystemModuleInformation,...). см "Часть 6 : Базовая техника: Работа с памятью. Использование системных куч". Там именно это и делается. У меня на одной (но только на одной) машине при каждой переустановке системы базовый адрес ntoskrnl менялся. При перезагрузках вроде постоянен. К hal я не присматривался. В любом случае, хардкодить базу системных модулей не стоит. |
|
|
Дата: Май 13, 2004 14:17:10 Базу ntoskrnl можно ещё получить старым дореволюционным способом. См. KmdKit\examples\simple\GetKernelBase |
|
|
Дата: Май 13, 2004 14:55:24 Ого! Спасобочки. Гора(ы) с плеч. NtFlushBuffersFile - конечно, проше. её и буду юзать. Hal.exe править несобираюсь, а вот ntoskrnl - это дело другое. Вот блин, грузитца по разным адресам после переустановок. А я то думаю, чё у меня то всё пашет а у других ReBoot. Еще раз спасибо! |
|
|
Дата: Май 13, 2004 21:27:43 To Four-F Полоса невезенья какая-то. Так ведь NtFlushBuffersFile для тех у кого NtDll.dll есть в адресном пр-ве. Она не проецируется в System. Что скажите??? Поиграюсь шаз с флагами и кнопкой reset. Посмотрим, как они себя ведут. От кого есть польза. А так, похоже за IRP_MJ_??? браться. Так не хотелось... :((( ЗюЫю После опытов с Flush??? и кнопкой Reset у меня скоро весь фат упадет. Но добью... |
|
|
Дата: Май 14, 2004 11:09:01 Она есть и в ntoskrnl, но не экспортируется :( Так чем плох FILE_FLAG_WRITE_THROUGH? Должно работать. |
|
|
Дата: Май 14, 2004 15:10:12 База ntoskrnl.exe , вообще то это константы. Жёстко зашитые. Если верить Свену Шрайберу (а у меня нет оснований ему не верить), ядро использует под себя четырёхметровые станицы памяти. оно лежит, начиная с адреса $80000000.На самом деле система отображает туда первые 4метра физической памяти и тд(но смотри, этот первый кусок не будет цельным , он дырявый), соответственно ntoskrnl будет лежать на пятом метре физической памяти, и сам знаешь где в виртухальной. А вообще, если я не ошибаюсь, всё это можна вытащить из структуры SharedUserData, которая также имеет строго определённое место положение в памяти... Можна конечно проще,zwQuerySystemInformation |
|
|
Дата: Май 14, 2004 15:14:11 "У меня на одной (но только на одной) машине при каждой переустановке системы базовый адрес ntoskrnl менялся. При перезагрузках вроде постоянен. К hal я не присматривался. В любом случае, хардкодить базу системных модулей не стоит." Знаете сэр, я такое тоже заметил как то ранее однажды... как не парадоксально, у меня оказался битый контроллер памяти... до сих пор нихрена не могу сопоставить .... |
|
|
Дата: Май 14, 2004 18:22:50 Всем спасибо! 2 Four-F Знаю, что глупо говорить: вот флаги не действуют... Хотя ведь на то они и флаги, чтобы чем-то управлять. Но до сих пор безрезультатно. На данный момент всё перепроверяю. 2 CARDINAL Свена я тоже уважаю. Читал. Читаю. Ничего плохого сказать не хотел, но факты налицо. Грузится по разным адресам. З.Ы. Счаз только время нашел - буду все проверять. Результаты выложу. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.051 |