Программирование драйверов Windows


Исполняемый код драйвера - часть 3


ULONG kVector = HalGetInterruptVector(Isa, 0, pDevExt-&#62Irq, pDevExt-&#62Irq, &kIrql, &kAffinity); // Замечание. Для Isa шины второй параметр (номер шины) обычно // равен 0, а третий и четвертый параметры равны.

#if DBG==1 DbgPrint( "LPTPORT: Interrupt %d converted to kIrql = %d, " "kAffinity = %d, kVector = %X(hex)\n", pDevExt-&#62Irq, kIrql, kAffinity, kVector); #endif

status = IoConnectInterrupt ( &pDevExt-&#62pIntObj, // Здесь будет создан Interrupt Object Isr, // Наша функция ISR pDevExt, // Этот указатель ISR функция будет // получать при вызове (контекстный указатель) NULL, // Не будем использовать spin-блокировку для // безопасного доступа к совместно используемым // данным kVector, // транслированное значение прерывания kIrql, // DIRQL kIrql, // DIRQL Latched, // Прерывание по перепаду TRUE, // Совместно используемое (Shared) прерывание kAffinity, // Поцессоров в мультипроцессорной системе FALSE ); // Не сохранять значения регистров сопроцессора if (!NT_SUCCESS(status)) { // В случае неудачи удаляем объект устройства IoDeleteDevice( pDevObj ); return status; } #if DBG==1 DbgPrint("LPTPORT: Interrupt successfully connected.\n"); #endif //================================================ // Создаем символьную ссылку: UNICODE_STRING symLinkName; // Сформировать символьное имя: //#define SYM_LINK_NAME L"\\??\\LPTPORT0" // ^^ проходит только в NT // Для того, чтобы работало в Windows 98 & XP : #define SYM_LINK_NAME L"\\DosDevices\\LPTPORT0"

RtlInitUnicodeString( &symLinkName, SYM_LINK_NAME );

// Создать символьную ссылку: status = IoCreateSymbolicLink( &symLinkName, &devName ); if (!NT_SUCCESS(status)) { // При неудаче - отключаемся от прерывания и // удаляем объект устройства: IoDisconnectInterrupt( pDevExt-&#62pIntObj ); IoDeleteDevice( pDevObj ); return status; }

pDevExt-&#62ustrSymLinkName = symLinkName; #if DBG==1 DbgPrint("LPTPORT: Symbolic Link is created: %ws. \n", pDevExt-&#62ustrSymLinkName.Buffer); #endif return STATUS_SUCCESS; }




Начало  Назад  Вперед