能力值:
( 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;
}
|
能力值:
( LV7,RANK:100 )
|
-
-
3 楼
reactos
|
|
|