Никогда не программировал контроллер пдп, реально использовать его для копирования памяти ядра(есть режим память-память) ? Нужно ли запрещать прерывания на время передачи данных ?
Clerk Современные реализации не поддерживают режим память-память. Все контроллеры dma имеют ограничения до 16мбайт Прерывания запрещать не нужно. Если конечно ты не копируешь сами прерывания.
Pavia Окей. Жаль что не поддерживают. Обьясню подробнее. Я решил поигратсо с системными привилегиями(http://www.virustech.org/f/viewtopic.php?id=9). Первое что приходит на ум - установка поля IOPL в флажках потока, ядро это поле не сбрасывает при планировании и вызове сервисов. Последнее исполняетсо вызовом NtSetInformationProcess(ProcessUserModeIOPL), этот инфокласс какраз и требует системных привилегий(TCB). Этим открываетсо доступ юзермодному потоку к вводу-выводу и он может использовать инструкции in/out. Далее необходимо какимто способом создать лазейку в ядре(чтобы привилегии повысить, тоесть попасть в кернелмод незаметно для пз), для этого нужно чтото записать, не имеет значения что, главное чтоб можно было задать адрес, ну первая мысль - копирование. Ладно, если это не поддерживаетсо, то можно исполнить запись по произвольному адресу в ядре (данные не стольт важны пока) ?
Clerk Могу предложить поиграться с APIC отоброжаешь физическое на виртуальный адресс. А дальше делаешь с ним что хочешь.
А понял. Тут вижу два выхода использовать жесткий диск но он сразу пишет блоками 512. Второй способ использовать какое либо устроство через MSI = система прерываний построенная на сообщениях - позволяет записать 4байта нужной информации по нужному адрессу. =) Можно использовать котролер жесткого. Искуственно сгенерировать прерывания и он запишет нужные данные. Вся настройка идет через порты PCI. А адресс нужно знать какой. Только устройства пишут по физическим адрессам.