Привет всем! Написал простенький драйвер, чтобы выйти на нулевое кольцо. Пытаюсь заменить обработчик int1 на свой собственный,в перспективе, чтобы попытаться мешать работать айсу. Пока что мой обротчик всего лишь вызывает старый: Код (Text): __declspec( naked ) void myint1( void ) { __asm { jmp dword ptr cs:[oldInt1.Handler] }; } Устанавливаю прерывание так (использую processor.c/.h от Ms Rem`а): Код (Text): typedef struct _INTDESC { USHORT OffsetLo; USHORT Selector; UCHAR Unused; UCHAR Access; USHORT OffsetHi; } INTDESC, *PINTDESC; typedef struct _IDTR { USHORT Limit; ULONG Base; } IDTR, *PIDTR; static void SetInt(IN INTERRUPT *Interrupt) { IDTR Idt; PINTDESC IntGate; __asm cli; __asm sidt[Idt]; IntGate = &((PINTDESC)Idt.Base)[Interrupt->IntNum]; IntGate->OffsetHi = (USHORT)((ULONG)Interrupt-Handler >> 16); IntGate->OffsetLo = (USHORT)Interrupt->Handler; IntGate->Selector = Interrupt->Selector; IntGate->Access = Interrupt->Access; __asm sti; } Соответственно вызов функции такой: Код (Text): newInt1.IntNum = 1; newInt1.Handler = &myint1; newInt1.Access = 0x8E; // вентиль прерывания, 32b, DPL=0 newInt1.Selector = 0x8; SetInt(&newInt1); Ставлю bpm на тестовую переменную, которая меняется сразу после установки драйвера. Но такое ощущение, что до него программа не доходит, а виснет после SetInt. Может кто-нибудь знает в чем может быть проблема?