Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Курсовые проекты » Розробка драйвера, що розпізнає USB-пристрій як віртуальний COM-порт в системі Windows NT

Реферат Розробка драйвера, що розпізнає USB-пристрій як віртуальний COM-порт в системі Windows NT





_STACK_LOCATION IrpSp=IoGetCurrentIrpStackLocation (Irp); Urb=IrpSp- gt; Parameters.Others.Argument1;

...

Наведемо часткове оголошення структури з довідкової документації Microsoft. Відзначимо тільки поля, використання яких необхідно в рамках даної курсової роботи:

typedef struct _URB {{_URB_HEADER UrbHeader; _URB_SELECT_INTERFACE UrbSelectInterface; _URB_SELECT_CONFIGURATION UrbSelectConfiguration; _URB_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer;

}

} URB, * PURB;

Поле UrbHeader зберігає інформацію про код URB-пакета, за яким можна визначити, яка операція запитується.

Поля UrbSelectInterface і UrbSelectConfiguration служать для запиту за вибором інтерфейсу і конфігурації пристрою, які будуть використовуватися при роботі з пристроєм. Пакети цієї структури відправляються хостом до пристрою на початку його роботи, при конфігуруванні.

Поле UrbBulkOrInterruptTransfer несе найбільш важливу в рамках даної курсової роботи інформацію - покажчики на блоки введення/виводу USB-пристрої. Наведемо опис структури _URB_BULK_OR_INTERRUPT_TRANSFER: _URB_BULK_OR_INTERRUPT_TRANSFER {_URB_HEADER Hdr; _PIPE_HANDLE PipeHandle; TransferFlags; TransferBufferLength; TransferBuffer; TransferBufferMDL;};

Поля цієї структури описані в наступній таблиці:


Таблиця 3. Поля структури _URB_BULK_OR_INTERRUPT_TRANSFER.

ПолеОпісаніеstruct _URB_HEADER HdrСтандартний заголовок URB-пакета, що містить код запросаUSBD_PIPE_HANDLE PipeHandleДескріптор каналу, на який передаються данниеULONG TransferFlagsФлагі, що визначають напрям передачі даних і спосіб обробки ошібокULONG TransferBufferLengthДліна переданого блоку даних в байтахPVOID TransferBufferУказатель на переданий буфер. Буфер знаходиться в нестранічной памятіPMDL TransferBufferMDLУказатель на MDL-список, що несе передану інформацію. Буфер знаходиться в сторінкової пам'яті

Слід зазначити, що один з покажчиків TransferBuffer або TransferBufferMDL дорівнює NULL, тобто в межах одного пакета передається тільки одна порція даних.

Завдання протоколювання обміну інформацією зводиться до перехоплення і збереженню буферів TransferBuffer і TransferBufferMDL.


. 3.4 Рівні запиту переривань

У кожен момент часу центральний процесор знаходиться на одному з рівнів IRQL (Interrupt Request Level - рівень запитів переривань). Рівні IRQL розташовуються в порядку убування від HIGHEST_LEVEL до PASSIVE_LEVEL. Кожному з переривань (переривання від зовнішніх пристроїв, системні годинник, і т. Д.) Відповідає свій рівень IRQL. Спеціальним діям операційної системи також призначені IRQL. Вони відзначені в нижній частині наведеної таблиці:

Таблиця 4. Рівні запитів переривань

УровеньНазначеніеHIGHEST_LEVELНаівисшій рівень. Всі переривання заблокірованиPOWER_LEVELПрериванія по відмові пітаніяIPI_LEVELМежпроцессорное взаімодействіеCLOCK2_LEVELПрериваніе по системному таймеру 2СLOCK1_LEVELПрериваніе по системному таймеру 1PROFILE_LEVELПрериваніе по таймеру заміру проізводітельностіуровні DRQLОбичние переривання устройствDISPATCH_LEVELДіспетчерізація потоків і виконання відкладених процедурAPC_LEVELВиполненіе асинхронного виклику процедуриPASSIVE_LEVELОбичное виконання коду потоку

Загальне правило обробки рівнів запитів переривань свідчить, що переривання з IRQL, меншим, ніж у виконуваного в даний момент коду, маскуються. Під час виконання коду потоку (користувальницького або системного) встановлюється найменший IRQL=0 (PASSIVE_LEVEL). Робота драйвера найчастіше виконується на рівні IRQL=2 (DISPATCH_LEVEL). Рівні, що лежать над ним, називаються DIRQL (Device IRQL) і виставляються для обробників переривань від зовнішніх пристроїв (ISR - interrupt service routine). Навіть під час виконання ISR драйвера може відбутися переривання з великим IRQL, наприклад, належить іншому драйверу.

Чим вище поточний рівень IRQL виконуваного коду, тим менше функцій йому доступно. Так, наприклад, диспетчер потоків працює на рівні
DISPATCH_LEVEL, і, отже, не буде викликатися, поки на процесорі з рівнем більшим чи рівним DISPATCH_LEVEL виповнюється інший код. Таким чином, на рівнях DISPATCH_LEVEL і вище відключається перемикання потоків. Функції очікування диспетчерських об'єктів (події, м'ютекси, семафори) з відмінним від нуля часом, звернення до файлів, підкачка відсутніх у фізичній пам'яті сторінок - все це також стає недоступним. Для коректного збереження запитів у файлі фільтр в таких випадках повинен застосовувати спеціальну методику.

. 3.5 Повідомлення про завершення запиту нижчест...


Назад | сторінка 7 з 9 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: Організація наукового дослідження на рівні виконання випускної кваліфікацій ...
  • Реферат на тему: Організація зберігання даних і виконання запитів у динамічній інформаційної ...
  • Реферат на тему: Організація і виконання бюджету на муніципальному рівні
  • Реферат на тему: Розробка схеми пріоритетів переривань
  • Реферат на тему: Розробка структури гіпотетичного мікропроцесора і центральній частині МЕОМ ...