首页
社区
课程
招聘
[求助]PsConvertToGuiThread 这个函数两个参数
发表于: 2010-12-22 22:18 6329

[求助]PsConvertToGuiThread 这个函数两个参数

2010-12-22 22:18
6329
这个函数的参数有谁用过,有谁知道吗?有原型吗?谢谢了

[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 601
活跃值: (256)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
2
源代码贴给你

NTSTATUS
NTAPI
PsConvertToGuiThread(VOID)
{
    ULONG_PTR NewStack;
    PVOID OldStack;
    PETHREAD Thread = PsGetCurrentThread();
    PEPROCESS Process = PsGetCurrentProcess();
    NTSTATUS Status;
    PAGED_CODE();

        if (KeGetPreviousMode() == KernelMode) return STATUS_INVALID_PARAMETER;

   
    if (!PspW32ProcessCallout) return STATUS_ACCESS_DENIED;

    if (Thread->Tcb.ServiceTable != KeServiceDescriptorTable)
    {
               return STATUS_ALREADY_WIN32;
    }

        if (!Thread->Tcb.LargeStack)
    {
               NewStack = (ULONG_PTR)MmCreateKernelStack(TRUE, 0);
        if (!NewStack)
        {
                       NtCurrentTeb()->LastErrorValue = ERROR_NOT_ENOUGH_MEMORY;
            return STATUS_NO_MEMORY;
        }

                KeEnterGuardedRegion();

                OldStack = KeSwitchKernelStack((PVOID)NewStack,
                                       (PVOID)(NewStack - KERNEL_STACK_SIZE));

                KeLeaveGuardedRegion();

              MmDeleteKernelStack(OldStack, FALSE);
    }

        if (!Process->Win32Process)
    {
                Status = PspW32ProcessCallout(Process, TRUE);
        if (!NT_SUCCESS(Status)) return Status;
    }

        Thread->Tcb.ServiceTable = KeServiceDescriptorTableShadow;
    ASSERT(Thread->Tcb.Win32Thread == 0);

        Status = PspW32ThreadCallout(Thread, PsW32ThreadCalloutInitialize);
    if (!NT_SUCCESS(Status))
    {
                Thread->Tcb.ServiceTable = KeServiceDescriptorTable;
    }

        return Status;
}
2010-12-22 22:41
0
雪    币: 300
活跃值: (244)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
reactos
2010-12-22 23:02
0
游客
登录 | 注册 方可回帖
返回