драйвер виртуального COM-порта

Тема в разделе "WASM.WIN32", создана пользователем Bill_Prisoner, 1 июн 2005.

  1. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    Здраствуйте!

    У меня маленький вопрос. Помогите, если Вы в силах. Это действительно SOS!

    У меня есть мой драйвер виртуального COM-порта. В HyperTerminal я устанавливаю соединение с этим COM-портом. Соединение нормально устанавливается. Когда я набираю какой-либо символ на клавиатуре, то вызывается функция DispatchWrite.

    В DKK(Serial Major I/O Requests) написано, что при вызове этой функции есть два входных параметра -



    Parameters.Write.Length - количество байт в буфере



    AssociatedIrp.SystemBuffer - указатель на буфер



    В Parameters.Write.Length при вызове функции лежит единица, то есть в порт записан 1 байт.

    Но в AssociatedIrp.SystemBuffer всегда ноль! А по-моему там должен быть адрес буфера.

    Вопрос - как получить доступ к этому буферу, т.е. узнать что было записано по порту.

    Есть предположение, что это связано с виртуальной памятью, физической памятью и файлом подкачки.

    Т.е. AssociatedIrp.SystemBuffer в каком-то другом адресном пространстве.

    Помогите пожалуйста.
     
  2. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Собственно не занимался COM портом, но по аналогии работы с драйверами :)
    Код (Text):
    1.  
    2. assume esi:ptr _IRP
    3. .......
    4. .elseif [edi].MajorFunction==IRP_MJ_WRITE
    5.         .if [esi].MdlAddress != NULL
    6.                 invoke MmGetSystemAddressForMdlSafe, [esi].MdlAddress, NormalPagePriority
    7.                 .if eax != NULL
    8.                         mov p, eax; Здесь и есть буффер
    9.                         mov edx, device_extension
    10.                         .if [edx].pEnCipher!=NULL
    11. ........
    12.  


    И ещё должен быть установлен флаг

    or (DEVICE_OBJECT PTR [eax]).Flags, DO_DIRECT_IO

    если это буфферезированный обмен, или другой...
     
  3. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    SteelRat, огромное, просто титаническое спасибо. Выручил просто по НАСТОЯЩЕМУ!!! С меня пиво! А если не любишь пиво...короче огромное спасибо!



    Я просто мало в kernel mode варюсь ещё, так что задаю такие вопросы. Спасибо еще раз!
     
  4. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    :) Пиво я люблю... Если посмотреть по форуму, то создатся впечатление, что пиво так и "бродит" ящиками между учасниками :) Сейчас я тебе помог, потом ты мне поможешь советом... Почитай знаменитого Four-F ! Если ещё не читал, то много потерял...
     
  5. twice_a_day

    twice_a_day New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2005
    Сообщения:
    6
    Адрес:
    нефтеюганск
    Bill_Prisoner, а можешь драйвером поделиться? )

    Или мб кто подскажет, как сделать глобальное символьное имя устройства, т.е. не писать в приложении "\\\\.\\COM9"?
     
  6. twice_a_day

    twice_a_day New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2005
    Сообщения:
    6
    Адрес:
    нефтеюганск
    Блин, сделал линк L"\\GLOBAL??\\COM9" - запахало. )