Открытие портов через драйвер

Тема в разделе "WASM.NT.KERNEL", создана пользователем Abrakasis, 16 май 2011.

  1. Abrakasis

    Abrakasis New Member

    Публикаций:
    0
    Регистрация:
    13 май 2011
    Сообщения:
    20
    Добрый день. Я скопировал пример драйвера, открывающего порты с сайта(WASM.ru). У меня ставиться задача записать последовательность бит в регистры последовательного порта. Делать открытие порта пытаюсь через ZwCreateFile. Но в статус возвращается ошибка С000003a. Если я правильно разобрался то это - STATUS_OBJECT_PATH_NOT_FOUND. Для тестирования пытаюсь открыть файл test.txt. Путь к нему у меня указан как и в примере CCOUNTED_UNICODE_STRING
    "\\??\\C:FileWorks\\test.txt", filename, 4. Что я делаю не так?
     
  2. Abrakasis

    Abrakasis New Member

    Публикаций:
    0
    Регистрация:
    13 май 2011
    Сообщения:
    20
    Поменял путь на файл "\\DosDevices\\C:\\FileWorks\\test.txt" файл создался. Но не понимаю совсем что означает запись в регистры порта. Можно ли для это использовать ZwWriteFile?
     
  3. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    На знаю где ты пример выискал. Вот тема http://wasm.ru/forum/viewtopic.php?id=8965
    Там имя \device\serial0 А то что ты написал - это файл на диске и к портам никакого отношения не имеет. Для тебя проще найти найти готовый драйвер типа giveio или porttalk и работать командами записи в порт. А так получается микроскопом гвозди забивать :)
     
  4. Abrakasis

    Abrakasis New Member

    Публикаций:
    0
    Регистрация:
    13 май 2011
    Сообщения:
    20
    ясно спасибо. А команды записи в порт какие имеются введу(in out) на одном сайте нашел как писать в регистры ком порта только вот линкер ругается не собирается сис файл. там пример что то типа mov al, DBh \ out 3F8h , al. При сборке пишет undefined symbol DBh
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Abrakasis
    там может вначале надо выучить ассемблер?
    0D8h
     
  6. Abrakasis

    Abrakasis New Member

    Публикаций:
    0
    Регистрация:
    13 май 2011
    Сообщения:
    20
    В примере написано так как у меня. А если умный то скажи как записать биты в послледовательный порт. Мой профиль высокоуровневые языки в Ассемблере не давно. Так что его изучением и занимаюсь. Если я правильно понимаю подобные сайты для того и создавались
     
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Abrakasis
    Подобные вопросы нужно задавать WASM.BEGINNERS.
    Если вы хотите писать в COM порт - зачем вам кернел мод ? Научитесь вначале работать с ним там где вы, как говорите спец. Открываете порт и работает с ним, например типа того
    Код (Text):
    1. hCom = CreateFileA("COM0",
    2.         GENERIC_READ | GENERIC_WRITE,
    3.         0, // exclusive access
    4.         NULL, // no security
    5.         OPEN_EXISTING,
    6.         0, // no overlapped I/O
    7.         NULL); // null template
    8.     if (hCom==INVALID_HANDLE_VALUE)
    9.     {
    10.         hCom = NULL;
    11.         //выводим ошибку.
    12.         return;
    13.     }
    Потом юзаете функции SetupComm GetCommState SetCommState GetCommTimeouts SetCommTimeouts. Команда шлется WriteFile функцией.

    Если же вы хотите юзать прямой доступ к оборудованию (к портам операциями in \ out) то какие порты можно узнать тут.
     
  8. Abrakasis

    Abrakasis New Member

    Публикаций:
    0
    Регистрация:
    13 май 2011
    Сообщения:
    20
    Спасибо. На C++ я уже его написал. Теперь надо в ассемблер перевести. Структуру DBC заполнил не знаю как в asm записать значение в елемент структуры. Нубас я. Что то типа mov dbc.ByteSize, 1000000h
     
  9. Abrakasis

    Abrakasis New Member

    Публикаций:
    0
    Регистрация:
    13 май 2011
    Сообщения:
    20
    А на бегинерс тоже зайду. Просто задача ставиться написать драйвер для ком порта. Поэтому и решил податься в Kernel
     
  10. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    Abrakasis
    Так и на Сях можно дров писать ...
     
  11. Abrakasis

    Abrakasis New Member

    Публикаций:
    0
    Регистрация:
    13 май 2011
    Сообщения:
    20
    Да задача именно на ассемблере. Не могу понят каким боком поставить значения в структуры. Применить я так понял можно с помощью SetCommState . а как мувнуть мое значение в DBC не пойму хоть убейте
     
  12. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    Abrakasis
    Может лучше с Hello World начать?
     
  13. Abrakasis

    Abrakasis New Member

    Публикаций:
    0
    Регистрация:
    13 май 2011
    Сообщения:
    20
    да может и стоит только вот сроки жмут. Я понимаю что ламер. но вместо того чтоб подкалывать чем то б помогли
     
  14. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    Abrakasis
    Возьмите то, что вы написали на ЯВУ, дизассемблируйте (желательно с отладочными символами), и зрите как он будет выглядеть на ассемблере.
     
  15. Abrakasis

    Abrakasis New Member

    Публикаций:
    0
    Регистрация:
    13 май 2011
    Сообщения:
    20
    Спасибо. Всем большое
     
  16. Abrakasis

    Abrakasis New Member

    Публикаций:
    0
    Регистрация:
    13 май 2011
    Сообщения:
    20
    Тема закрыта.