Добрый день. Я скопировал пример драйвера, открывающего порты с сайта(WASM.ru). У меня ставиться задача записать последовательность бит в регистры последовательного порта. Делать открытие порта пытаюсь через ZwCreateFile. Но в статус возвращается ошибка С000003a. Если я правильно разобрался то это - STATUS_OBJECT_PATH_NOT_FOUND. Для тестирования пытаюсь открыть файл test.txt. Путь к нему у меня указан как и в примере CCOUNTED_UNICODE_STRING "\\??\\C:FileWorks\\test.txt", filename, 4. Что я делаю не так?
Поменял путь на файл "\\DosDevices\\C:\\FileWorks\\test.txt" файл создался. Но не понимаю совсем что означает запись в регистры порта. Можно ли для это использовать ZwWriteFile?
На знаю где ты пример выискал. Вот тема http://wasm.ru/forum/viewtopic.php?id=8965 Там имя \device\serial0 А то что ты написал - это файл на диске и к портам никакого отношения не имеет. Для тебя проще найти найти готовый драйвер типа giveio или porttalk и работать командами записи в порт. А так получается микроскопом гвозди забивать
ясно спасибо. А команды записи в порт какие имеются введу(in out) на одном сайте нашел как писать в регистры ком порта только вот линкер ругается не собирается сис файл. там пример что то типа mov al, DBh \ out 3F8h , al. При сборке пишет undefined symbol DBh
В примере написано так как у меня. А если умный то скажи как записать биты в послледовательный порт. Мой профиль высокоуровневые языки в Ассемблере не давно. Так что его изучением и занимаюсь. Если я правильно понимаю подобные сайты для того и создавались
Abrakasis Подобные вопросы нужно задавать WASM.BEGINNERS. Если вы хотите писать в COM порт - зачем вам кернел мод ? Научитесь вначале работать с ним там где вы, как говорите спец. Открываете порт и работает с ним, например типа того Код (Text): hCom = CreateFileA("COM0", GENERIC_READ | GENERIC_WRITE, 0, // exclusive access NULL, // no security OPEN_EXISTING, 0, // no overlapped I/O NULL); // null template if (hCom==INVALID_HANDLE_VALUE) { hCom = NULL; //выводим ошибку. return; } Потом юзаете функции SetupComm GetCommState SetCommState GetCommTimeouts SetCommTimeouts. Команда шлется WriteFile функцией. Если же вы хотите юзать прямой доступ к оборудованию (к портам операциями in \ out) то какие порты можно узнать тут.
Спасибо. На C++ я уже его написал. Теперь надо в ассемблер перевести. Структуру DBC заполнил не знаю как в asm записать значение в елемент структуры. Нубас я. Что то типа mov dbc.ByteSize, 1000000h
А на бегинерс тоже зайду. Просто задача ставиться написать драйвер для ком порта. Поэтому и решил податься в Kernel
Да задача именно на ассемблере. Не могу понят каким боком поставить значения в структуры. Применить я так понял можно с помощью SetCommState . а как мувнуть мое значение в DBC не пойму хоть убейте
да может и стоит только вот сроки жмут. Я понимаю что ламер. но вместо того чтоб подкалывать чем то б помогли
Abrakasis Возьмите то, что вы написали на ЯВУ, дизассемблируйте (желательно с отладочными символами), и зрите как он будет выглядеть на ассемблере.