OUT struct _ETHREAD **Thread);
/* OUT PETHREAD *Thread); */
-NTSTATUS STDCALL PsLookupThreadByThreadId(IN PVOID ThreadId,
+NTSTATUS STDCALL PsLookupThreadByThreadId(IN HANDLE ThreadId,
OUT struct _ETHREAD **Thread);
/* OUT PETHREAD *Thread); */
ULONG
DbgProcessListCommand(ULONG Argc, PCH Argv[], PKTRAP_FRAME Tf)
{
- extern LIST_ENTRY PsProcessListHead;
+ extern LIST_ENTRY PsActiveProcessHead;
PLIST_ENTRY current_entry;
PEPROCESS current;
ULONG i = 1;
- if (PsProcessListHead.Flink == NULL)
+ if (PsActiveProcessHead.Flink == NULL)
{
DbgPrint("No processes.\n");
return(1);
}
DbgPrint("Process list: ");
- current_entry = PsProcessListHead.Flink;
- while (current_entry != &PsProcessListHead)
+ current_entry = PsActiveProcessHead.Flink;
+ while (current_entry != &PsActiveProcessHead)
{
current = CONTAINING_RECORD(current_entry, EPROCESS, ProcessListEntry);
DbgPrint("%d %.8s", current->UniqueProcessId,
ExCallbackObjectType = ExAllocatePoolWithTag(NonPagedPool, sizeof(OBJECT_TYPE), CALLBACK_TAG);
/* Initialize name */
- RtlRosInitUnicodeStringFromLiteral(&ExCallbackObjectType->TypeName,L"Callback");
+ RtlInitUnicodeString(&ExCallbackObjectType->TypeName, L"Callback");
/* Create the Object Type */
ExCallbackObjectType->Tag = CALLBACK_TAG;
ExWindowStationObjectType->OkayToClose = NULL;
ExWindowStationObjectType->Create = ExpWinStaObjectCreate;
ExWindowStationObjectType->DuplicationNotify = NULL;
- RtlRosInitUnicodeStringFromLiteral(&ExWindowStationObjectType->TypeName, L"WindowStation");
+ RtlInitUnicodeString(&ExWindowStationObjectType->TypeName, L"WindowStation");
ObpCreateTypeObject(ExWindowStationObjectType);
ExDesktopObjectType->OkayToClose = NULL;
ExDesktopObjectType->Create = ExpDesktopObjectCreate;
ExDesktopObjectType->DuplicationNotify = NULL;
- RtlRosInitUnicodeStringFromLiteral(&ExDesktopObjectType->TypeName, L"Desktop");
+ RtlInitUnicodeString(&ExDesktopObjectType->TypeName, L"Desktop");
ObpCreateTypeObject(ExDesktopObjectType);
}
IoDriverObjectType->OkayToClose = NULL;
IoDriverObjectType->Create = IopCreateDriver;
IoDriverObjectType->DuplicationNotify = NULL;
- RtlRosInitUnicodeStringFromLiteral(&IoDriverObjectType->TypeName, L"Driver");
+ RtlInitUnicodeString(&IoDriverObjectType->TypeName, L"Driver");
ObpCreateTypeObject(IoDriverObjectType);
IoDeviceObjectType->Create = IopCreateDevice;
IoDeviceObjectType->DuplicationNotify = NULL;
- RtlRosInitUnicodeStringFromLiteral(&IoDeviceObjectType->TypeName, L"Device");
+ RtlInitUnicodeString(&IoDeviceObjectType->TypeName, L"Device");
ObpCreateTypeObject(IoDeviceObjectType);
IoFileObjectType->Create = IopCreateFile;
IoFileObjectType->DuplicationNotify = NULL;
- RtlRosInitUnicodeStringFromLiteral(&IoFileObjectType->TypeName, L"File");
+ RtlInitUnicodeString(&IoFileObjectType->TypeName, L"File");
ObpCreateTypeObject(IoFileObjectType);
IoAdapterObjectType->PeakObjects = 0;
IoAdapterObjectType->PeakHandles = 0;
IoDeviceObjectType->Mapping = &IopFileMapping;
- RtlRosInitUnicodeStringFromLiteral(&IoAdapterObjectType->TypeName, L"Adapter");
+ RtlInitUnicodeString(&IoAdapterObjectType->TypeName, L"Adapter");
ObpCreateTypeObject(IoAdapterObjectType);
/*
static PETHREAD GspDbgThread;
static PETHREAD GspEnumThread;
-extern LIST_ENTRY PsProcessListHead;
+extern LIST_ENTRY PsActiveProcessHead;
/* Number of Registers. */
#define NUMREGS 16
}
else
{
- ULONG ThreadId;
+ ULONG uThreadId;
+ HANDLE ThreadId;
PCHAR ptr = &Data[0];
- GspHex2Long (&ptr, (PLONG) &ThreadId);
+ GspHex2Long (&ptr, (PULONG) &uThreadId);
+ ThreadId = (HANDLE)uThreadId;
- if (!NT_SUCCESS (PsLookupThreadByThreadId ((PVOID) ThreadId, &ThreadInfo)))
+ if (!NT_SUCCESS (PsLookupThreadByThreadId (ThreadId, &ThreadInfo)))
{
*Thread = NULL;
return FALSE;
/* Get first thread id */
GspEnumThread = NULL;
- AProcess = PsProcessListHead.Flink;
- while(AProcess != &PsProcessListHead)
+ AProcess = PsActiveProcessHead.Flink;
+ while(AProcess != &PsActiveProcessHead)
{
Process = CONTAINING_RECORD(AProcess, EPROCESS, ProcessListEntry);
AThread = Process->ThreadListHead.Flink;
{
PETHREAD Thread = NULL;
AProcess = Process->ProcessListEntry.Flink;
- while(AProcess != &PsProcessListHead)
+ while(AProcess != &PsActiveProcessHead)
{
Process = CONTAINING_RECORD(AProcess, EPROCESS, ProcessListEntry);
AThread = Process->ThreadListHead.Flink;
NTSTATUS INIT_FUNCTION
LpcpInitSystem (VOID)
{
- /* Allocate Memory for the LPC Object */
- LpcPortObjectType = ExAllocatePool(NonPagedPool, sizeof(OBJECT_TYPE));
- RtlZeroMemory (LpcPortObjectType, sizeof (OBJECT_TYPE));
+ /* Allocate Memory for the LPC Object */
+ LpcPortObjectType = ExAllocatePool(NonPagedPool, sizeof(OBJECT_TYPE));
+ RtlZeroMemory (LpcPortObjectType, sizeof (OBJECT_TYPE));
- RtlRosInitUnicodeStringFromLiteral(&LpcPortObjectType->TypeName,L"Port");
+ RtlInitUnicodeString(&LpcPortObjectType->TypeName,L"Port");
LpcPortObjectType->Tag = TAG('L', 'P', 'R', 'T');
LpcPortObjectType->PeakObjects = 0;
{
MmSectionObjectType = ExAllocatePool(NonPagedPool,sizeof(OBJECT_TYPE));
- RtlRosInitUnicodeStringFromLiteral(&MmSectionObjectType->TypeName, L"Section");
+ RtlInitUnicodeString(&MmSectionObjectType->TypeName, L"Section");
MmSectionObjectType->Tag = TAG('S', 'E', 'C', 'T');
MmSectionObjectType->TotalObjects = 0;
ObDirectoryType->Create = ObpCreateDirectory;
ObDirectoryType->DuplicationNotify = NULL;
- RtlRosInitUnicodeStringFromLiteral(&ObDirectoryType->TypeName,
+ RtlInitUnicodeString(&ObDirectoryType->TypeName,
L"Directory");
/* create 'type' object type*/
ObTypeObjectType->Create = NULL;
ObTypeObjectType->DuplicationNotify = NULL;
- RtlRosInitUnicodeStringFromLiteral(&ObTypeObjectType->TypeName,
+ RtlInitUnicodeString(&ObTypeObjectType->TypeName,
L"ObjectType");
/* Create security descriptor */
ObSymbolicLinkType->Create = ObpCreateSymbolicLink;
ObSymbolicLinkType->DuplicationNotify = NULL;
- RtlRosInitUnicodeStringFromLiteral(&ObSymbolicLinkType->TypeName,
- L"SymbolicLink");
+ RtlInitUnicodeString(&ObSymbolicLinkType->TypeName,
+ L"SymbolicLink");
ObpCreateTypeObject(ObSymbolicLinkType);
}
-/* $Id:$
+/* $Id$
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/ps/job.c
* PURPOSE: Job Native Functions
*
- * PROGRAMMERS: Alex Ionescu (alex@relsoft.net)
+ * PROGRAMMERS: Alex Ionescu (alex@relsoft.net) (stubs)
+ * Thomas Weidenmueller <w3seek@reactos.com>
*/
/* Note: Jobs are only supported on Win2K+ */
PsJobType->Create = NULL;
PsJobType->DuplicationNotify = NULL;
- RtlRosInitUnicodeStringFromLiteral(&PsJobType->TypeName, L"Job");
+ RtlInitUnicodeString(&PsJobType->TypeName, L"Job");
ObpCreateTypeObject(PsJobType);
POBJECT_TYPE EXPORTED PsProcessType = NULL;
-LIST_ENTRY PsProcessListHead;
-static KSPIN_LOCK PsProcessListLock;
+LIST_ENTRY PsActiveProcessHead;
+FAST_MUTEX PspActiveProcessMutex;
static LARGE_INTEGER ShortPsLockDelay, PsLockTimeout;
static GENERIC_MAPPING PiProcessMapping = {STANDARD_RIGHTS_READ | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
PEPROCESS
PsGetNextProcess(PEPROCESS OldProcess)
{
- KIRQL oldIrql;
PEPROCESS NextProcess;
NTSTATUS Status;
return PsInitialSystemProcess;
}
- KeAcquireSpinLock(&PsProcessListLock, &oldIrql);
+ ExAcquireFastMutex(&PspActiveProcessMutex);
NextProcess = OldProcess;
while (1)
{
- if (NextProcess->ProcessListEntry.Blink == &PsProcessListHead)
+ if (NextProcess->ProcessListEntry.Blink == &PsActiveProcessHead)
{
- NextProcess = CONTAINING_RECORD(PsProcessListHead.Blink,
+ NextProcess = CONTAINING_RECORD(PsActiveProcessHead.Blink,
EPROCESS,
ProcessListEntry);
}
}
}
- KeReleaseSpinLock(&PsProcessListLock, oldIrql);
+ ExReleaseFastMutex(&PspActiveProcessMutex);
ObDereferenceObject(OldProcess);
return(NextProcess);
VOID
PiKillMostProcesses(VOID)
{
- KIRQL oldIrql;
PLIST_ENTRY current_entry;
PEPROCESS current;
- KeAcquireSpinLock(&PsProcessListLock, &oldIrql);
+ ExAcquireFastMutex(&PspActiveProcessMutex);
- current_entry = PsProcessListHead.Flink;
- while (current_entry != &PsProcessListHead)
+ current_entry = PsActiveProcessHead.Flink;
+ while (current_entry != &PsActiveProcessHead)
{
current = CONTAINING_RECORD(current_entry, EPROCESS,
ProcessListEntry);
}
}
- KeReleaseSpinLock(&PsProcessListLock, oldIrql);
+ ExReleaseFastMutex(&PspActiveProcessMutex);
}
PsInitProcessManagment(VOID)
{
PKPROCESS KProcess;
- KIRQL oldIrql;
NTSTATUS Status;
ShortPsLockDelay.QuadPart = -100LL;
PsProcessType->Create = NULL;
PsProcessType->DuplicationNotify = NULL;
- RtlRosInitUnicodeStringFromLiteral(&PsProcessType->TypeName, L"Process");
+ RtlInitUnicodeString(&PsProcessType->TypeName, L"Process");
ObpCreateTypeObject(PsProcessType);
- InitializeListHead(&PsProcessListHead);
- KeInitializeSpinLock(&PsProcessListLock);
+ InitializeListHead(&PsActiveProcessHead);
+ ExInitializeFastMutex(&PspActiveProcessMutex);
RtlZeroMemory(PiProcessNotifyRoutine, sizeof(PiProcessNotifyRoutine));
RtlZeroMemory(PiLoadImageNotifyRoutine, sizeof(PiLoadImageNotifyRoutine));
PsInitialSystemProcess->Win32WindowStation = (HANDLE)0;
- KeAcquireSpinLock(&PsProcessListLock, &oldIrql);
- InsertHeadList(&PsProcessListHead,
+ InsertHeadList(&PsActiveProcessHead,
&PsInitialSystemProcess->ProcessListEntry);
InitializeListHead(&PsInitialSystemProcess->ThreadListHead);
- KeReleaseSpinLock(&PsProcessListLock, oldIrql);
SepCreateSystemProcessToken(PsInitialSystemProcess);
}
VOID STDCALL
PiDeleteProcessWorker(PVOID pContext)
{
- KIRQL oldIrql;
PDEL_CONTEXT Context;
PEPROCESS CurrentProcess;
PEPROCESS Process;
KeAttachProcess(&Process->Pcb);
}
- KeAcquireSpinLock(&PsProcessListLock, &oldIrql);
+ ExAcquireFastMutex(&PspActiveProcessMutex);
RemoveEntryList(&Process->ProcessListEntry);
- KeReleaseSpinLock(&PsProcessListLock, oldIrql);
+ ExReleaseFastMutex(&PspActiveProcessMutex);
/* KDB hook */
KDB_DELETEPROCESS_HOOK(Process);
PEPROCESS Process;
PEPROCESS pParentProcess;
PKPROCESS KProcess;
- KIRQL oldIrql;
PVOID LdrStartupAddr;
PVOID BaseAddress;
PMEMORY_AREA MemoryArea;
Process->Win32WindowStation = (HANDLE)0;
- KeAcquireSpinLock(&PsProcessListLock, &oldIrql);
- InsertHeadList(&PsProcessListHead, &Process->ProcessListEntry);
+ ExAcquireFastMutex(&PspActiveProcessMutex);
+ InsertHeadList(&PsActiveProcessHead, &Process->ProcessListEntry);
InitializeListHead(&Process->ThreadListHead);
- KeReleaseSpinLock(&PsProcessListLock, oldIrql);
+ ExReleaseFastMutex(&PspActiveProcessMutex);
ExInitializeFastMutex(&Process->TebLock);
Process->Pcb.State = PROCESS_STATE_ACTIVE;
}
else
{
- KIRQL oldIrql;
PLIST_ENTRY current_entry;
PEPROCESS current;
NTSTATUS Status;
- KeAcquireSpinLock(&PsProcessListLock, &oldIrql);
- current_entry = PsProcessListHead.Flink;
- while (current_entry != &PsProcessListHead)
+ ExAcquireFastMutex(&PspActiveProcessMutex);
+ current_entry = PsActiveProcessHead.Flink;
+ while (current_entry != &PsActiveProcessHead)
{
current = CONTAINING_RECORD(current_entry, EPROCESS,
ProcessListEntry);
PsProcessType,
UserMode);
}
- KeReleaseSpinLock(&PsProcessListLock, oldIrql);
+ ExReleaseFastMutex(&PspActiveProcessMutex);
if (NT_SUCCESS(Status))
{
Status = ObCreateHandle(PsGetCurrentProcess(),
}
current_entry = current_entry->Flink;
}
- KeReleaseSpinLock(&PsProcessListLock, oldIrql);
+ ExReleaseFastMutex(&PspActiveProcessMutex);
DPRINT("NtOpenProcess() = STATUS_UNSUCCESSFUL\n");
return(STATUS_UNSUCCESSFUL);
}
}
break;
}
+
+ case ProcessPriorityClass:
+ {
+ PROCESS_PRIORITY_CLASS ppc;
+
+ _SEH_TRY
+ {
+ ppc = *(PPROCESS_PRIORITY_CLASS)ProcessInformation;
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END;
+
+ if(NT_SUCCESS(Status))
+ {
+ }
+
+ break;
+ }
case ProcessLdtInformation:
case ProcessLdtSize:
case ProcessWorkingSetWatch:
case ProcessUserModeIOPL:
case ProcessEnableAlignmentFaultFixup:
- case ProcessPriorityClass:
case ProcessAffinityMask:
Status = STATUS_NOT_IMPLEMENTED;
break;
return STATUS_NOT_IMPLEMENTED;
#if 0
- KIRQL OldIrql;
PLIST_ENTRY CurrentEntryP;
PEPROCESS CurrentP;
PLIST_ENTRY CurrentEntryT;
/* Lock the process list. */
- KeAcquireSpinLock(&PsProcessListLock,
- &OldIrql);
+ ExAcquireFastMutex(&PspActiveProcessMutex);
/*
* Scan the process list. Since the
* list is circular, the guard is false
* after the last process.
*/
- for ( CurrentEntryP = PsProcessListHead.Flink;
- (CurrentEntryP != & PsProcessListHead);
+ for ( CurrentEntryP = PsActiveProcessHead.Flink;
+ (CurrentEntryP != & PsActiveProcessHead);
CurrentEntryP = CurrentEntryP->Flink
)
{
/*
* Unlock the process list.
*/
- KeReleaseSpinLock (
- & PsProcessListLock,
- OldIrql
+ ExReleaseFastMutex (
+ & PspActiveProcessMutex
);
/*
* Return the proper error status code,
PsLookupProcessByProcessId(IN HANDLE ProcessId,
OUT PEPROCESS *Process)
{
- KIRQL oldIrql;
PLIST_ENTRY current_entry;
PEPROCESS current;
- KeAcquireSpinLock(&PsProcessListLock, &oldIrql);
+ ExAcquireFastMutex(&PspActiveProcessMutex);
- current_entry = PsProcessListHead.Flink;
- while (current_entry != &PsProcessListHead)
+ current_entry = PsActiveProcessHead.Flink;
+ while (current_entry != &PsActiveProcessHead)
{
current = CONTAINING_RECORD(current_entry,
EPROCESS,
{
*Process = current;
ObReferenceObject(current);
- KeReleaseSpinLock(&PsProcessListLock, oldIrql);
+ ExReleaseFastMutex(&PspActiveProcessMutex);
return(STATUS_SUCCESS);
}
current_entry = current_entry->Flink;
}
- KeReleaseSpinLock(&PsProcessListLock, oldIrql);
+ ExReleaseFastMutex(&PspActiveProcessMutex);
return(STATUS_INVALID_PARAMETER);
}
/* GLOBALS ******************************************************************/
-extern LIST_ENTRY PsProcessListHead;
+extern LIST_ENTRY PsActiveProcessHead;
POBJECT_TYPE EXPORTED PsThreadType = NULL;
PETHREAD Thread;
ULONG nThreads = 0;
- AProcess = PsProcessListHead.Flink;
- while(AProcess != &PsProcessListHead)
+ AProcess = PsActiveProcessHead.Flink;
+ while(AProcess != &PsActiveProcessHead)
{
Process = CONTAINING_RECORD(AProcess, EPROCESS, ProcessListEntry);
/* FIXME - skip suspended, ... processes? */
PsThreadType->Create = NULL;
PsThreadType->DuplicationNotify = NULL;
- RtlRosInitUnicodeStringFromLiteral(&PsThreadType->TypeName, L"Thread");
+ RtlInitUnicodeString(&PsThreadType->TypeName, L"Thread");
ObpCreateTypeObject(PsThreadType);
* @implemented
*/
NTSTATUS STDCALL
-PsLookupThreadByThreadId(IN PVOID ThreadId,
+PsLookupThreadByThreadId(IN HANDLE ThreadId,
OUT PETHREAD *Thread)
{
PCID_OBJECT CidObject;
- CidObject = PsLockCidHandle((HANDLE)ThreadId, PsThreadType);
+ CidObject = PsLockCidHandle(ThreadId, PsThreadType);
if(CidObject != NULL)
{
*Thread = CidObject->Obj.Thread;
return 0;
}
- Status = PsLookupThreadByThreadId((PVOID)dwThreadId, &Thread);
+ Status = PsLookupThreadByThreadId((HANDLE)dwThreadId, &Thread);
if(!NT_SUCCESS(Status))
{
SetLastWin32Error(ERROR_INVALID_PARAMETER);
}
Mod = NULL;
Global = FALSE;
- if (! NT_SUCCESS(PsLookupThreadByThreadId((PVOID) ThreadId, &Thread)))
+ if (! NT_SUCCESS(PsLookupThreadByThreadId((HANDLE) ThreadId, &Thread)))
{
DPRINT1("Invalid thread id 0x%x\n", ThreadId);
SetLastWin32Error(ERROR_INVALID_PARAMETER);
NTSTATUS Status;
PMSGMEMORY MsgMemoryEntry;
- Status = PsLookupThreadByThreadId((void *)idThread,&peThread);
+ Status = PsLookupThreadByThreadId((HANDLE)idThread,&peThread);
if( Status == STATUS_SUCCESS ) {
pThread = peThread->Tcb.Win32Thread;
if(idThread)
{
- Status = PsLookupThreadByThreadId((PVOID)idThread, &Thread);
+ Status = PsLookupThreadByThreadId((HANDLE)idThread, &Thread);
if(!NT_SUCCESS(Status))
{
SetLastWin32Error(ERROR_ACCESS_DENIED);
PLIST_ENTRY Current;
PWINDOW_OBJECT Window;
- Status = PsLookupThreadByThreadId((PVOID)dwThreadId, &Thread);
+ Status = PsLookupThreadByThreadId((HANDLE)dwThreadId, &Thread);
if(!NT_SUCCESS(Status))
{
SetLastWin32Error(ERROR_INVALID_PARAMETER);
NTSTATUS
NTAPI
PsLookupThreadByThreadId (
- IN PVOID UniqueThreadId,
+ IN HANDLE UniqueThreadId,
OUT PETHREAD *Thread
);