亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usercall.c

?? ReactOS是一些高手根據(jù)Windows XP的內(nèi)核編寫出的類XP。內(nèi)核實現(xiàn)機理和API函數(shù)調(diào)用幾乎相同。甚至可以兼容XP的程序。喜歡研究系統(tǒng)內(nèi)核的人可以看一看。
?? C
字號:
/*
 * PROJECT:         ReactOS Kernel
 * LICENSE:         GPL - See COPYING in the top level directory
 * FILE:            ntoskrnl/ke/i386/usercall.c
 * PURPOSE:         User-mode Callout Mechanisms (APC and Win32K Callbacks)
 * PROGRAMMERS:     Alex Ionescu (alex.ionescu@reactos.org)
 */

/* INCLUDES ******************************************************************/

#include <ntoskrnl.h>
#define NDEBUG
#include <internal/debug.h>

/* PRIVATE FUNCTIONS *********************************************************/

_SEH_DEFINE_LOCALS(KiCopyInfo)
{
    volatile EXCEPTION_RECORD SehExceptRecord;
};

_SEH_FILTER(KiCopyInformation2)
{
    _SEH_ACCESS_LOCALS(KiCopyInfo);

    /* Copy the exception records and return to the handler */
    RtlCopyMemory((PVOID)&_SEH_VAR(SehExceptRecord),
                  _SEH_GetExceptionPointers()->ExceptionRecord,
                  sizeof(EXCEPTION_RECORD));
    return EXCEPTION_EXECUTE_HANDLER;
}

/*++
 * @name KiInitializeUserApc
 *
 *     Prepares the Context for a User-Mode APC called through NTDLL.DLL
 *
 * @param Reserved
 *        Pointer to the Exception Frame on non-i386 builds.
 *
 * @param TrapFrame
 *        Pointer to the Trap Frame.
 *
 * @param NormalRoutine
 *        Pointer to the NormalRoutine to call.
 *
 * @param NormalContext
 *        Pointer to the context to send to the Normal Routine.
 *
 * @param SystemArgument[1-2]
 *        Pointer to a set of two parameters that contain untyped data.
 *
 * @return None.
 *
 * @remarks None.
 *
 *--*/
VOID
NTAPI
KiInitializeUserApc(IN PKEXCEPTION_FRAME ExceptionFrame,
                    IN PKTRAP_FRAME TrapFrame,
                    IN PKNORMAL_ROUTINE NormalRoutine,
                    IN PVOID NormalContext,
                    IN PVOID SystemArgument1,
                    IN PVOID SystemArgument2)
{
    CONTEXT Context;
    ULONG_PTR Stack, AlignedEsp;
    ULONG ContextLength;
    EXCEPTION_RECORD SehExceptRecord;
    _SEH_DECLARE_LOCALS(KiCopyInfo);

    /* Don't deliver APCs in V86 mode */
    if (TrapFrame->EFlags & EFLAGS_V86_MASK) return;

    /* Save the full context */
    Context.ContextFlags = CONTEXT_FULL | CONTEXT_DEBUG_REGISTERS;
    KeTrapFrameToContext(TrapFrame, ExceptionFrame, &Context);

    /* Protect with SEH */
    _SEH_TRY
    {
        /* Sanity check */
        ASSERT((TrapFrame->SegCs & MODE_MASK) != KernelMode);

        /* Get the aligned size */
        AlignedEsp = Context.Esp & ~3;
        ContextLength = CONTEXT_ALIGNED_SIZE + (4 * sizeof(ULONG_PTR));
        Stack = ((AlignedEsp - 8) & ~3) - ContextLength;

        /* Probe the stack */
        ProbeForWrite((PVOID)Stack, AlignedEsp - Stack, 1);
        ASSERT(!(Stack & 3));

        /* Copy data into it */
        RtlCopyMemory((PVOID)(Stack + (4 * sizeof(ULONG_PTR))),
                      &Context,
                      sizeof(CONTEXT));

        /* Run at APC dispatcher */
        TrapFrame->Eip = (ULONG)KeUserApcDispatcher;
        TrapFrame->HardwareEsp = Stack;

        /* Setup Ring 3 state */
        TrapFrame->SegCs = Ke386SanitizeSeg(KGDT_R3_CODE, UserMode);
        TrapFrame->HardwareSegSs = Ke386SanitizeSeg(KGDT_R3_DATA, UserMode);
        TrapFrame->SegDs = Ke386SanitizeSeg(KGDT_R3_DATA, UserMode);
        TrapFrame->SegEs = Ke386SanitizeSeg(KGDT_R3_DATA, UserMode);
        TrapFrame->SegFs = Ke386SanitizeSeg(KGDT_R3_TEB, UserMode);
        TrapFrame->SegGs = 0;
        TrapFrame->ErrCode = 0;

        /* Sanitize EFLAGS */
        TrapFrame->EFlags = Ke386SanitizeFlags(Context.EFlags, UserMode);

        /* Check if thread has IOPL and force it enabled if so */
        if (KeGetCurrentThread()->Iopl) TrapFrame->EFlags |= 0x3000;

        /* Setup the stack */
        *(PULONG_PTR)(Stack + 0 * sizeof(ULONG_PTR)) = (ULONG_PTR)NormalRoutine;
        *(PULONG_PTR)(Stack + 1 * sizeof(ULONG_PTR)) = (ULONG_PTR)NormalContext;
        *(PULONG_PTR)(Stack + 2 * sizeof(ULONG_PTR)) = (ULONG_PTR)SystemArgument1;
        *(PULONG_PTR)(Stack + 3 * sizeof(ULONG_PTR)) = (ULONG_PTR)SystemArgument2;
    }
    _SEH_EXCEPT(KiCopyInformation2)
    {
        /* Dispatch the exception */
        _SEH_VAR(SehExceptRecord).ExceptionAddress = (PVOID)TrapFrame->Eip;
        KiDispatchException(&SehExceptRecord,
                            ExceptionFrame,
                            TrapFrame,
                            UserMode,
                            TRUE);
    }
    _SEH_END;
}

/* PUBLIC FUNCTIONS **********************************************************/

/*
 * @implemented
 */
NTSTATUS
NTAPI
KeUserModeCallback(IN ULONG RoutineIndex,
                   IN PVOID Argument,
                   IN ULONG ArgumentLength,
                   OUT PVOID *Result,
                   OUT PULONG ResultLength)
{
    ULONG_PTR NewStack, OldStack;
    PULONG UserEsp;
    NTSTATUS CallbackStatus = STATUS_SUCCESS;
    PEXCEPTION_REGISTRATION_RECORD ExceptionList;
    PTEB Teb;
    ULONG GdiBatchCount = 0;
    ASSERT(KeGetCurrentThread()->ApcState.KernelApcInProgress == FALSE);
    ASSERT(KeGetPreviousMode() == UserMode);

    /* Get the current user-mode stack */
    UserEsp = KiGetUserModeStackAddress();
    OldStack = *UserEsp;

    /* Enter a SEH Block */
    _SEH_TRY
    {
        /* Calculate and align the stack size */
        NewStack = (OldStack - ArgumentLength) & ~3;

        /* Make sure it's writable */
        ProbeForWrite((PVOID)(NewStack - 6 * sizeof(ULONG_PTR)),
                      ArgumentLength + 6 * sizeof(ULONG_PTR),
                      sizeof(CHAR));

        /* Copy the buffer into the stack */
        RtlCopyMemory((PVOID)NewStack, Argument, ArgumentLength);

        /* Write the arguments */
        NewStack -= 24;
        *(PULONG)NewStack = 0;
        *(PULONG)(NewStack + 4) = RoutineIndex;
        *(PULONG)(NewStack + 8) = (NewStack + 24);
        *(PULONG)(NewStack + 12) = ArgumentLength;

        /* Save the exception list */
        Teb = KeGetCurrentThread()->Teb;
        ExceptionList = Teb->Tib.ExceptionList;

        /* Jump to user mode */
        *UserEsp = NewStack;
        CallbackStatus = KiCallUserMode(Result, ResultLength);
        if (CallbackStatus != STATUS_CALLBACK_POP_STACK)
        {
            /* Only restore the exception list if we didn't crash in ring 3 */
            Teb->Tib.ExceptionList = ExceptionList;
            CallbackStatus = STATUS_SUCCESS;
        }
        else
        {
            /* Otherwise, pop the stack */
            OldStack = *UserEsp;
        }

        /* Read the GDI Batch count */
        GdiBatchCount = Teb->GdiBatchCount;
    }
    _SEH_HANDLE
    {
        /* Get the SEH exception */
        CallbackStatus = _SEH_GetExceptionCode();
    }
    _SEH_END;
    if (!NT_SUCCESS(CallbackStatus)) return CallbackStatus;

    /* Check if we have GDI Batch operations */
    if (GdiBatchCount)
    {
        /* Shouldn't happen in ROS yet */
        ASSERT(FALSE);
    }

    /* Restore stack and return */
    *UserEsp = OldStack;
    return CallbackStatus;
}

/* EOF */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91成人免费在线| 首页国产丝袜综合| 成人激情免费网站| 中文字幕亚洲电影| 成人精品免费看| 樱桃视频在线观看一区| 91视频在线观看免费| 亚洲男人的天堂一区二区| 欧美性大战久久久久久久蜜臀| 一级日本不卡的影视| 欧美亚洲动漫精品| 久久成人麻豆午夜电影| 国产亚洲短视频| 91小宝寻花一区二区三区| 亚洲一区日韩精品中文字幕| 欧美日韩国产一级片| 激情综合色综合久久| 国产视频一区二区在线| 成a人片亚洲日本久久| 一区二区三区在线视频免费| 日韩三级.com| 国产成人在线视频网站| 椎名由奈av一区二区三区| 欧美日韩国产天堂| 国产成人精品一区二区三区网站观看| 18欧美亚洲精品| 欧美一二三区在线| 99久久精品免费观看| 香港成人在线视频| 国产精品久久二区二区| 欧美日韩在线播放一区| 国产成人精品免费网站| 亚洲永久精品大片| 国产清纯白嫩初高生在线观看91 | 中文字幕中文字幕中文字幕亚洲无线| 日本韩国精品一区二区在线观看| 免费观看久久久4p| 亚洲精品国产视频| 久久精品一区蜜桃臀影院| 欧美日本乱大交xxxxx| 丁香婷婷深情五月亚洲| 日本aⅴ精品一区二区三区| 国产精品福利一区二区三区| 日韩一区二区三区四区五区六区| www.亚洲色图.com| 经典三级一区二区| 午夜精品福利久久久| 国产欧美一区二区精品秋霞影院 | 国产精品视频yy9299一区| 欧美亚洲日本一区| 国产成人精品免费网站| 老司机精品视频一区二区三区| 亚洲综合在线观看视频| 国产欧美在线观看一区| 欧美一区二区三区在线看| 欧美伊人久久久久久久久影院| 成人免费视频一区| 黑人巨大精品欧美一区| 日产国产高清一区二区三区 | 久久亚洲捆绑美女| 欧美日韩一区二区三区高清 | 99久久国产综合色|国产精品| 人人超碰91尤物精品国产| ●精品国产综合乱码久久久久 | 欧美视频中文字幕| av不卡在线播放| 成人黄色a**站在线观看| 国产精品小仙女| 国产一区二区三区av电影| 亚洲综合色区另类av| 亚洲欧美一区二区在线观看| 久久久精品人体av艺术| 久久免费看少妇高潮| 久久蜜桃一区二区| 国产日韩欧美a| 久久久久久久综合色一本| 2022国产精品视频| 久久这里只有精品视频网| 久久综合国产精品| 欧美电影精品一区二区| 欧美va日韩va| 久久综合五月天婷婷伊人| 国产欧美一区二区精品性色| 欧美国产日韩在线观看| 国产精品久久久久影院| 亚洲私人影院在线观看| 亚洲精品视频免费观看| 亚洲国产综合91精品麻豆| 午夜欧美视频在线观看| 美日韩黄色大片| 国产乱码精品一品二品| 成人精品视频一区二区三区 | 国内精品视频666| 国产成人免费视频一区| 97国产一区二区| 欧美午夜一区二区| 在线播放中文一区| 久久亚洲精品国产精品紫薇| 国产精品久久一卡二卡| 亚洲狠狠爱一区二区三区| 久久国产日韩欧美精品| 成人激情文学综合网| 欧美亚男人的天堂| 日韩视频在线观看一区二区| 久久亚洲精精品中文字幕早川悠里 | 久久精品国产一区二区| 国产一区二区三区在线观看精品| 成人性生交大片免费看中文网站| 96av麻豆蜜桃一区二区| 欧美狂野另类xxxxoooo| 久久久不卡网国产精品二区 | 国产亚洲美州欧州综合国| 亚洲精品videosex极品| 男女男精品网站| 99久精品国产| 91精品欧美福利在线观看| www国产成人| 中文字幕中文乱码欧美一区二区| 亚洲电影欧美电影有声小说| 国内外成人在线| 在线欧美日韩国产| 久久精品欧美一区二区三区不卡| 一区二区三区在线影院| 国产一区二区三区免费看| 欧美中文字幕一区| 欧美国产日韩a欧美在线观看| 亚洲一区二区三区四区中文字幕| 国产乱码精品一区二区三区忘忧草 | 国产毛片一区二区| 欧美午夜电影网| 国产香蕉久久精品综合网| 亚洲国产一二三| 国产一区二区三区在线观看免费视频| 97se亚洲国产综合在线| 26uuu久久综合| 日韩精品成人一区二区三区| 97se亚洲国产综合自在线| 欧美精品一区二区三| 亚洲影视在线观看| 成人小视频在线| 欧美一级高清大全免费观看| 亚洲一区二区三区小说| 99久久精品费精品国产一区二区| 欧美mv和日韩mv的网站| 亚洲成a人片在线不卡一二三区| av在线不卡网| 国产日韩精品一区二区三区在线| 蜜臀91精品一区二区三区| 色婷婷综合久久久中文字幕| 欧美国产激情一区二区三区蜜月| 久久www免费人成看片高清| 9191精品国产综合久久久久久| 亚洲一区二区三区自拍| 99精品欧美一区二区三区综合在线| 国产日韩欧美在线一区| 激情综合色综合久久| 精品电影一区二区三区| 麻豆久久一区二区| 精品少妇一区二区三区视频免付费| 天天综合色天天| 91精品一区二区三区久久久久久| 亚洲va国产va欧美va观看| 在线区一区二视频| 亚洲成人av一区二区| 欧美日韩午夜精品| 日韩精品免费视频人成| 欧美日韩一区 二区 三区 久久精品 | 精品一区二区三区免费观看| 日韩美女视频一区二区在线观看| 天天色天天爱天天射综合| 欧美午夜精品一区二区三区| 亚洲午夜在线观看视频在线| 欧美中文字幕久久| 丝袜美腿一区二区三区| 7777精品伊人久久久大香线蕉经典版下载| 亚洲.国产.中文慕字在线| 91麻豆精品国产91久久久资源速度| 日韩电影在线看| 亚洲精品一区二区三区在线观看| 国产一区二区三区四区五区美女| 久久精品一级爱片| av激情成人网| 亚洲伦在线观看| 欧美日韩国产综合视频在线观看| 日本不卡不码高清免费观看| 精品日韩av一区二区| 成人中文字幕在线| 亚洲三级在线播放| 欧美性猛片xxxx免费看久爱| 亚洲国产一区视频| 欧美不卡激情三级在线观看| 国产一区二区视频在线| 1区2区3区国产精品| 欧美久久久久久久久久| 精东粉嫩av免费一区二区三区| 中文成人av在线| 欧美老女人在线| 国产一区二区伦理| 亚洲色图欧洲色图婷婷| 欧美日韩黄色一区二区|