mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 15:02:59 +00:00
ntoskrnl/ke/main.c
* Move SeInit2() to before we initialize process management so we can create an initial system token to go with the initial system process. ntoskrnl/ps/process.c * Implement NtOpenProcessToken() by calling _NtOpenProcessToken() -- why do we have both of these? * Fix bug in _NtOpenProcessToken() that caused us to crash creating the token handle. * Return STATUS_INVALID_INFO_CLASS from NtQueryInformationProcess() and NtSetInformationProcess() for information classes documented as unqueryable or unsettable by Gary Nebbet in his book "Native API Reference". * Fix bug in NtSetInformationProcess() where it assigns the primary token -- it derefeneced the old token if SeExchangePrimaryToken() failed; it should have derferenced it if it succeeded. svn path=/trunk/; revision=3112
This commit is contained in:
parent
eebe5809fd
commit
0f1c17eda0
2 changed files with 45 additions and 48 deletions
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
/* $Id: main.c,v 1.125 2002/06/16 11:44:53 ekohl Exp $
|
/* $Id: main.c,v 1.126 2002/06/17 22:16:33 joeg Exp $
|
||||||
*
|
*
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
* FILE: ntoskrnl/ke/main.c
|
* FILE: ntoskrnl/ke/main.c
|
||||||
|
@ -528,6 +528,10 @@ ExpInitializeExecutive(VOID)
|
||||||
KeBugCheck(SECURITY_INITIALIZATION_FAILED);
|
KeBugCheck(SECURITY_INITIALIZATION_FAILED);
|
||||||
|
|
||||||
ObInit();
|
ObInit();
|
||||||
|
|
||||||
|
if (!SeInit2())
|
||||||
|
KeBugCheck(SECURITY1_INITIALIZATION_FAILED);
|
||||||
|
|
||||||
PiInitProcessManager();
|
PiInitProcessManager();
|
||||||
|
|
||||||
KdInit1();
|
KdInit1();
|
||||||
|
@ -751,9 +755,6 @@ ExpInitializeExecutive(VOID)
|
||||||
*/
|
*/
|
||||||
InitSystemSharedUserPage ((PUCHAR)KeLoaderBlock.CommandLine);
|
InitSystemSharedUserPage ((PUCHAR)KeLoaderBlock.CommandLine);
|
||||||
|
|
||||||
if (!SeInit2())
|
|
||||||
KeBugCheck(SECURITY1_INITIALIZATION_FAILED);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Launch initial process
|
* Launch initial process
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: process.c,v 1.81 2002/06/11 22:09:03 dwelch Exp $
|
/* $Id: process.c,v 1.82 2002/06/17 22:16:34 joeg Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -95,13 +95,6 @@ PsGetNextProcess(PEPROCESS OldProcess)
|
||||||
return(NextProcess);
|
return(NextProcess);
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS STDCALL
|
|
||||||
NtOpenProcessToken(IN HANDLE ProcessHandle,
|
|
||||||
IN ACCESS_MASK DesiredAccess,
|
|
||||||
OUT PHANDLE TokenHandle)
|
|
||||||
{
|
|
||||||
return(STATUS_UNSUCCESSFUL);
|
|
||||||
}
|
|
||||||
|
|
||||||
NTSTATUS STDCALL
|
NTSTATUS STDCALL
|
||||||
_NtOpenProcessToken(IN HANDLE ProcessHandle,
|
_NtOpenProcessToken(IN HANDLE ProcessHandle,
|
||||||
|
@ -121,12 +114,21 @@ _NtOpenProcessToken(IN HANDLE ProcessHandle,
|
||||||
Token,
|
Token,
|
||||||
DesiredAccess,
|
DesiredAccess,
|
||||||
FALSE,
|
FALSE,
|
||||||
ProcessHandle);
|
TokenHandle);
|
||||||
ObDereferenceObject(Token);
|
ObDereferenceObject(Token);
|
||||||
return(Status);
|
return(Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
NtOpenProcessToken(IN HANDLE ProcessHandle,
|
||||||
|
IN ACCESS_MASK DesiredAccess,
|
||||||
|
OUT PHANDLE TokenHandle)
|
||||||
|
{
|
||||||
|
return _NtOpenProcessToken(ProcessHandle, DesiredAccess, TokenHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PACCESS_TOKEN STDCALL
|
PACCESS_TOKEN STDCALL
|
||||||
PsReferencePrimaryToken(PEPROCESS Process)
|
PsReferencePrimaryToken(PEPROCESS Process)
|
||||||
{
|
{
|
||||||
|
@ -831,13 +833,8 @@ NtQueryInformationProcess(IN HANDLE ProcessHandle,
|
||||||
case ProcessIoCounters:
|
case ProcessIoCounters:
|
||||||
case ProcessVmCounters:
|
case ProcessVmCounters:
|
||||||
case ProcessTimes:
|
case ProcessTimes:
|
||||||
case ProcessBasePriority:
|
|
||||||
case ProcessRaisePriority:
|
|
||||||
case ProcessDebugPort:
|
case ProcessDebugPort:
|
||||||
case ProcessExceptionPort:
|
|
||||||
case ProcessAccessToken:
|
|
||||||
case ProcessLdtInformation:
|
case ProcessLdtInformation:
|
||||||
case ProcessLdtSize:
|
|
||||||
Status = STATUS_NOT_IMPLEMENTED;
|
Status = STATUS_NOT_IMPLEMENTED;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -845,24 +842,12 @@ NtQueryInformationProcess(IN HANDLE ProcessHandle,
|
||||||
*((PULONG)ProcessInformation) = Process->DefaultHardErrorProcessing;
|
*((PULONG)ProcessInformation) = Process->DefaultHardErrorProcessing;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ProcessIoPortHandlers:
|
|
||||||
case ProcessWorkingSetWatch:
|
case ProcessWorkingSetWatch:
|
||||||
case ProcessUserModeIOPL:
|
|
||||||
case ProcessEnableAlignmentFaultFixup:
|
|
||||||
Status = STATUS_NOT_IMPLEMENTED;
|
Status = STATUS_NOT_IMPLEMENTED;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ProcessForegroundInformation:
|
|
||||||
((PPROCESS_PRIORITY_CLASS)ProcessInformation)->Foreground =
|
|
||||||
FALSE; /*FIXME: how to compute it? */
|
|
||||||
case ProcessPriorityClass:
|
|
||||||
((PPROCESS_PRIORITY_CLASS)ProcessInformation)->PriorityClass =
|
|
||||||
Process->PriorityClass;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ProcessWx86Information:
|
case ProcessWx86Information:
|
||||||
case ProcessHandleCount:
|
case ProcessHandleCount:
|
||||||
case ProcessAffinityMask:
|
|
||||||
case ProcessPriorityBoost:
|
case ProcessPriorityBoost:
|
||||||
case ProcessDeviceMap:
|
case ProcessDeviceMap:
|
||||||
case ProcessSessionInformation:
|
case ProcessSessionInformation:
|
||||||
|
@ -870,6 +855,17 @@ NtQueryInformationProcess(IN HANDLE ProcessHandle,
|
||||||
Status = STATUS_NOT_IMPLEMENTED;
|
Status = STATUS_NOT_IMPLEMENTED;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ProcessBasePriority:
|
||||||
|
case ProcessRaisePriority:
|
||||||
|
case ProcessExceptionPort:
|
||||||
|
case ProcessAccessToken:
|
||||||
|
case ProcessLdtSize:
|
||||||
|
case ProcessIoPortHandlers:
|
||||||
|
case ProcessUserModeIOPL:
|
||||||
|
case ProcessEnableAlignmentFaultFixup:
|
||||||
|
case ProcessPriorityClass:
|
||||||
|
case ProcessAffinityMask:
|
||||||
|
case ProcessForegroundInformation:
|
||||||
default:
|
default:
|
||||||
Status = STATUS_INVALID_INFO_CLASS;
|
Status = STATUS_INVALID_INFO_CLASS;
|
||||||
}
|
}
|
||||||
|
@ -896,7 +892,7 @@ PspAssignPrimaryToken(PEPROCESS Process,
|
||||||
return(Status);
|
return(Status);
|
||||||
}
|
}
|
||||||
Status = SeExchangePrimaryToken(Process, Token, &OldToken);
|
Status = SeExchangePrimaryToken(Process, Token, &OldToken);
|
||||||
if (!NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
ObDereferenceObject(OldToken);
|
ObDereferenceObject(OldToken);
|
||||||
}
|
}
|
||||||
|
@ -912,7 +908,6 @@ NtSetInformationProcess(IN HANDLE ProcessHandle,
|
||||||
{
|
{
|
||||||
PEPROCESS Process;
|
PEPROCESS Process;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PPROCESS_BASIC_INFORMATION ProcessBasicInformationP;
|
|
||||||
PHANDLE ProcessAccessTokenP;
|
PHANDLE ProcessAccessTokenP;
|
||||||
|
|
||||||
Status = ObReferenceObjectByHandle(ProcessHandle,
|
Status = ObReferenceObjectByHandle(ProcessHandle,
|
||||||
|
@ -928,22 +923,14 @@ NtSetInformationProcess(IN HANDLE ProcessHandle,
|
||||||
|
|
||||||
switch (ProcessInformationClass)
|
switch (ProcessInformationClass)
|
||||||
{
|
{
|
||||||
case ProcessBasicInformation:
|
|
||||||
ProcessBasicInformationP = (PPROCESS_BASIC_INFORMATION)
|
|
||||||
ProcessInformation;
|
|
||||||
memset(ProcessBasicInformationP, 0, sizeof(PROCESS_BASIC_INFORMATION));
|
|
||||||
Process->Pcb.Affinity = ProcessBasicInformationP->AffinityMask;
|
|
||||||
Status = STATUS_SUCCESS;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ProcessQuotaLimits:
|
case ProcessQuotaLimits:
|
||||||
case ProcessIoCounters:
|
|
||||||
case ProcessVmCounters:
|
|
||||||
case ProcessTimes:
|
|
||||||
case ProcessBasePriority:
|
case ProcessBasePriority:
|
||||||
case ProcessRaisePriority:
|
case ProcessRaisePriority:
|
||||||
case ProcessDebugPort:
|
case ProcessDebugPort:
|
||||||
case ProcessExceptionPort:
|
case ProcessExceptionPort:
|
||||||
|
Status = STATUS_NOT_IMPLEMENTED;
|
||||||
|
break;
|
||||||
|
|
||||||
case ProcessAccessToken:
|
case ProcessAccessToken:
|
||||||
ProcessAccessTokenP = (PHANDLE)ProcessInformation;
|
ProcessAccessTokenP = (PHANDLE)ProcessInformation;
|
||||||
Status = PspAssignPrimaryToken(Process, *ProcessAccessTokenP);
|
Status = PspAssignPrimaryToken(Process, *ProcessAccessTokenP);
|
||||||
|
@ -951,7 +938,7 @@ NtSetInformationProcess(IN HANDLE ProcessHandle,
|
||||||
|
|
||||||
case ProcessImageFileName:
|
case ProcessImageFileName:
|
||||||
memcpy(Process->ImageFileName, ProcessInformation, 8);
|
memcpy(Process->ImageFileName, ProcessInformation, 8);
|
||||||
// DPRINT1("Process->ImageFileName %.8s\n", Process->ImageFileName);
|
// DPRINT1("Process->ImageFileName %.8s\n", Process->ImageFileName);
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -963,11 +950,20 @@ NtSetInformationProcess(IN HANDLE ProcessHandle,
|
||||||
case ProcessUserModeIOPL:
|
case ProcessUserModeIOPL:
|
||||||
case ProcessEnableAlignmentFaultFixup:
|
case ProcessEnableAlignmentFaultFixup:
|
||||||
case ProcessPriorityClass:
|
case ProcessPriorityClass:
|
||||||
|
case ProcessAffinityMask:
|
||||||
|
Status = STATUS_NOT_IMPLEMENTED;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ProcessBasicInformation:
|
||||||
|
case ProcessIoCounters:
|
||||||
|
case ProcessVmCounters:
|
||||||
|
case ProcessTimes:
|
||||||
|
case ProcessPooledUsageAndLimits:
|
||||||
case ProcessWx86Information:
|
case ProcessWx86Information:
|
||||||
case ProcessHandleCount:
|
case ProcessHandleCount:
|
||||||
case ProcessAffinityMask:
|
case ProcessWow64Information:
|
||||||
default:
|
default:
|
||||||
Status = STATUS_NOT_IMPLEMENTED;
|
Status = STATUS_INVALID_INFO_CLASS;
|
||||||
}
|
}
|
||||||
ObDereferenceObject(Process);
|
ObDereferenceObject(Process);
|
||||||
return(Status);
|
return(Status);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue