KeGetPreviousMode (useless)

svn path=/trunk/; revision=562
This commit is contained in:
Emanuele Aliberti 1999-06-24 22:40:06 +00:00
parent 62cdaf7f99
commit 9ccf887c5a
6 changed files with 91 additions and 62 deletions

View file

@ -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)

View file

@ -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,

View file

@ -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);

View file

@ -70,6 +70,7 @@ KeBugCheck
KeBugCheckEx KeBugCheckEx
KeFlushIoBuffers KeFlushIoBuffers
KeGetCurrentIrql KeGetCurrentIrql
KeGetPreviousMode = KeGetPreviousMode@0
KeInitializeDpc KeInitializeDpc
KeInitializeEvent KeInitializeEvent
KeInitializeSpinLock KeInitializeSpinLock

View file

@ -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;

View file

@ -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 */