mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 08:15:41 +00:00
KeGetPreviousMode (useless)
svn path=/trunk/; revision=562
This commit is contained in:
parent
62cdaf7f99
commit
9ccf887c5a
6 changed files with 91 additions and 62 deletions
|
@ -207,6 +207,8 @@ enum
|
||||||
IRP_MN_POWER_SEQUENCE,
|
IRP_MN_POWER_SEQUENCE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Values returned by KeGetPreviousMode() */
|
||||||
#define KernelMode (0)
|
#define KernelMode (0)
|
||||||
#define UserMode (1)
|
#define UserMode (1)
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,7 @@ KIRQL KeGetCurrentIrql(VOID);
|
||||||
ULONG KeGetCurrentProcessorNumber(VOID);
|
ULONG KeGetCurrentProcessorNumber(VOID);
|
||||||
ULONG KeGetDcacheFillSize(VOID);
|
ULONG KeGetDcacheFillSize(VOID);
|
||||||
PKTHREAD KeGetCurrentThread(VOID);
|
PKTHREAD KeGetCurrentThread(VOID);
|
||||||
|
ULONG KeGetPreviousMode(VOID);
|
||||||
VOID KeInitializeCallbackRecord(PKBUGCHECK_CALLBACK_RECORD CallbackRecord);
|
VOID KeInitializeCallbackRecord(PKBUGCHECK_CALLBACK_RECORD CallbackRecord);
|
||||||
VOID KeInitializeDeviceQueue(PKDEVICE_QUEUE DeviceQueue);
|
VOID KeInitializeDeviceQueue(PKDEVICE_QUEUE DeviceQueue);
|
||||||
VOID KeInitializeDpc(PKDPC Dpc, PKDEFERRED_ROUTINE DeferredRoutine,
|
VOID KeInitializeDpc(PKDPC Dpc, PKDEFERRED_ROUTINE DeferredRoutine,
|
||||||
|
|
|
@ -6,8 +6,10 @@
|
||||||
extern PEPROCESS SystemProcess;
|
extern PEPROCESS SystemProcess;
|
||||||
extern HANDLE SystemProcessHandle;
|
extern HANDLE SystemProcessHandle;
|
||||||
|
|
||||||
extern POBJECT_TYPE PsThreadType;
|
/* ntoskrnl/ps/thread.c */
|
||||||
extern POBJECT_TYPE PsProcessType;
|
extern POBJECT_TYPE PsThreadType;
|
||||||
|
extern POBJECT_TYPE PsProcessType;
|
||||||
|
extern PETHREAD CurrentThread;
|
||||||
|
|
||||||
void PsInitThreadManagment(void);
|
void PsInitThreadManagment(void);
|
||||||
VOID PsInitProcessManagment(VOID);
|
VOID PsInitProcessManagment(VOID);
|
||||||
|
|
|
@ -70,6 +70,7 @@ KeBugCheck
|
||||||
KeBugCheckEx
|
KeBugCheckEx
|
||||||
KeFlushIoBuffers
|
KeFlushIoBuffers
|
||||||
KeGetCurrentIrql
|
KeGetCurrentIrql
|
||||||
|
KeGetPreviousMode = KeGetPreviousMode@0
|
||||||
KeInitializeDpc
|
KeInitializeDpc
|
||||||
KeInitializeEvent
|
KeInitializeEvent
|
||||||
KeInitializeSpinLock
|
KeInitializeSpinLock
|
||||||
|
|
|
@ -50,7 +50,7 @@ static BOOLEAN DoneInitYet = FALSE;
|
||||||
ULONG PiNrThreads = 0;
|
ULONG PiNrThreads = 0;
|
||||||
ULONG PiNrRunnableThreads = 0;
|
ULONG PiNrRunnableThreads = 0;
|
||||||
|
|
||||||
static PETHREAD CurrentThread = NULL;
|
PETHREAD CurrentThread = NULL;
|
||||||
|
|
||||||
static ULONG PiNextThreadUniqueId = 0;
|
static ULONG PiNextThreadUniqueId = 0;
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
NtSetInformationThread (
|
NtSetInformationThread (
|
||||||
HANDLE ThreadHandle,
|
HANDLE ThreadHandle,
|
||||||
THREADINFOCLASS ThreadInformationClass,
|
THREADINFOCLASS ThreadInformationClass,
|
||||||
|
@ -25,85 +26,95 @@ NtSetInformationThread (
|
||||||
ULONG ThreadInformationLength
|
ULONG ThreadInformationLength
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
PETHREAD Thread;
|
PETHREAD Thread;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PTHREAD_BASIC_INFORMATION ThreadBasicInformationP;
|
PTHREAD_BASIC_INFORMATION ThreadBasicInformationP;
|
||||||
|
|
||||||
Status = ObReferenceObjectByHandle(ThreadHandle,
|
Status = ObReferenceObjectByHandle(
|
||||||
THREAD_SET_INFORMATION,
|
ThreadHandle,
|
||||||
PsThreadType,
|
THREAD_SET_INFORMATION,
|
||||||
UserMode,
|
PsThreadType,
|
||||||
(PVOID*)&Thread,
|
UserMode,
|
||||||
NULL);
|
(PVOID*) & Thread,
|
||||||
if (Status != STATUS_SUCCESS)
|
NULL
|
||||||
{
|
);
|
||||||
return(Status);
|
if (Status != STATUS_SUCCESS)
|
||||||
}
|
{
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
switch (ThreadInformationClass)
|
switch (ThreadInformationClass)
|
||||||
{
|
{
|
||||||
case ThreadBasicInformation:
|
case ThreadBasicInformation:
|
||||||
ThreadBasicInformationP = (PTHREAD_BASIC_INFORMATION)ThreadInformation;
|
ThreadBasicInformationP =
|
||||||
ThreadBasicInformationP->ExitStatus = Thread->ExitStatus;
|
(PTHREAD_BASIC_INFORMATION) ThreadInformation;
|
||||||
ThreadBasicInformationP->TebBaseAddress = Thread->Tcb.Teb;
|
ThreadBasicInformationP->ExitStatus =
|
||||||
ThreadBasicInformationP->AffinityMask = Thread->Tcb.Affinity;
|
Thread->ExitStatus;
|
||||||
ThreadBasicInformationP->BasePriority = Thread->Tcb.BasePriority;
|
ThreadBasicInformationP->TebBaseAddress =
|
||||||
ThreadBasicInformationP->UniqueThreadId = (ULONG)
|
Thread->Tcb.Teb;
|
||||||
Thread->Cid.UniqueThread;
|
ThreadBasicInformationP->AffinityMask =
|
||||||
Status = STATUS_SUCCESS;
|
Thread->Tcb.Affinity;
|
||||||
break;
|
ThreadBasicInformationP->BasePriority =
|
||||||
|
Thread->Tcb.BasePriority;
|
||||||
|
ThreadBasicInformationP->UniqueThreadId =
|
||||||
|
(ULONG) Thread->Cid.UniqueThread;
|
||||||
|
Status = STATUS_SUCCESS;
|
||||||
|
break;
|
||||||
|
|
||||||
case ThreadTimes:
|
case ThreadTimes:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ThreadPriority:
|
case ThreadPriority:
|
||||||
KeSetPriorityThread(&Thread->Tcb,*(KPRIORITY *)ThreadInformation);
|
KeSetPriorityThread(
|
||||||
Status = STATUS_SUCCESS;
|
& Thread->Tcb,
|
||||||
break;
|
* (KPRIORITY *) ThreadInformation
|
||||||
|
);
|
||||||
|
Status = STATUS_SUCCESS;
|
||||||
|
break;
|
||||||
|
|
||||||
case ThreadBasePriority:
|
case ThreadBasePriority:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ThreadAffinityMask:
|
case ThreadAffinityMask:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ThreadImpersonationToken:
|
case ThreadImpersonationToken:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ThreadDescriptorTableEntry:
|
case ThreadDescriptorTableEntry:
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ThreadEventPair:
|
case ThreadEventPair:
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ThreadQuerySetWin32StartAddress:
|
case ThreadQuerySetWin32StartAddress:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ThreadZeroTlsCell:
|
case ThreadZeroTlsCell:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ThreadPerformanceCount:
|
case ThreadPerformanceCount:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ThreadAmILastThread:
|
case ThreadAmILastThread:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ThreadPriorityBoost:
|
case ThreadPriorityBoost:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Status = STATUS_UNSUCCESSFUL;
|
Status = STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
ObDereferenceObject(Thread);
|
ObDereferenceObject(Thread);
|
||||||
return(Status);
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
STDCALL
|
STDCALL
|
||||||
NtQueryInformationThread(
|
NtQueryInformationThread (
|
||||||
IN HANDLE ThreadHandle,
|
IN HANDLE ThreadHandle,
|
||||||
IN THREADINFOCLASS ThreadInformationClass,
|
IN THREADINFOCLASS ThreadInformationClass,
|
||||||
OUT PVOID ThreadInformation,
|
OUT PVOID ThreadInformation,
|
||||||
|
@ -112,3 +123,15 @@ NtQueryInformationThread(
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED
|
UNIMPLEMENTED
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ULONG
|
||||||
|
STDCALL
|
||||||
|
KeGetPreviousMode (VOID)
|
||||||
|
{
|
||||||
|
/* CurrentThread is in ntoskrnl/ps/thread.c */
|
||||||
|
return (ULONG) CurrentThread->Tcb.PreviousMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* EOF */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue