Собственно такая штука: создаю callgate-дескриптор, успешно вызываю из юзермода фарколом, а после хочу вернуться назад, но никакие штуки типа ret, iret, sysexit не работают, ну т.е. они не вызывают бсода, но и управления не возвращают, может кто-нибудь поделится ссылкой или в двух словах расскажет что происходит при фарколе: сохраняется cs:eip и все? т.е. чтобы вернуться надо "настроить" юзермодный стек под iret, как в KiCallUserMode--KiServiceExit?
blast iretd нужна чтобы выйти из обработчика прерывания (в стеке должны находиться [ss:esp], eflags, cs:eip. ss:esp нужны в том случае, если при переходе на обработчик прерывания произошла смена уровня привелегий). Velheart Команда возврата из шлюза вызова -- far ret, или retf. При вызове через callgate в стеке обязательно сохраняются cs:eip и опционально копируются параметры вызова (количество указывается в шлюзе вызова). Почитать можно в томе 3А Intel Manual.