#define MAX_PROCESS_NOTIFY_ROUTINE_COUNT 8
+#ifndef LIBCAPTIVE
static ULONG PiProcessNotifyRoutineCount = 0;
static PCREATE_PROCESS_NOTIFY_ROUTINE
PiProcessNotifyRoutine[MAX_PROCESS_NOTIFY_ROUTINE_COUNT];
+#endif /* LIBCAPTIVE */
/* FUNCTIONS *****************************************************************/
+#ifndef LIBCAPTIVE
PEPROCESS
PsGetNextProcess(PEPROCESS OldProcess)
return _NtOpenProcessToken(ProcessHandle, DesiredAccess, TokenHandle);
}
+#endif /* LIBCAPTIVE */
PACCESS_TOKEN STDCALL
PsReferencePrimaryToken(PEPROCESS Process)
return(Process->Token);
}
+#ifndef LIBCAPTIVE
NTSTATUS
PsOpenTokenOfProcess(HANDLE ProcessHandle,
KeReleaseSpinLock(&PsProcessListLock, oldIrql);
}
+#endif /* LIBCAPTIVE */
VOID
PsInitProcessManagment(VOID)
PsProcessType->MaxObjects = ULONG_MAX;
PsProcessType->MaxHandles = ULONG_MAX;
PsProcessType->PagedPoolCharge = 0;
- PsProcessType->NonpagedPoolCharge = sizeof(EPROCESS);
+ PsProcessType->NonpagedPoolCharge = sizeof(EPROCESS)
+#ifdef LIBCAPTIVE
+ /* Need to present 0-terminated string "System"
+ * from KPROCESS up to PAGE_SIZE offset
+ * for ext2fsd.sys V0.10A debug.c/Ext2GetProcessNameOffset()
+ */
+ +strlen("System")+1/* 0-terminator */;
+#endif /* LIBCAPTIVE */
+ ;
PsProcessType->Mapping = &PiProcessMapping;
PsProcessType->Dump = NULL;
PsProcessType->Open = NULL;
PsProcessType->Close = NULL;
+#ifndef LIBCAPTIVE
PsProcessType->Delete = PiDeleteProcess;
+#else
+ PsProcessType->Delete = NULL; /* never Delete PsInitialSystemProcess */
+#endif /* LIBCAPTIVE */
PsProcessType->Parse = NULL;
PsProcessType->Security = NULL;
PsProcessType->QueryName = NULL;
PsProcessType->Create = NULL;
PsProcessType->DuplicationNotify = NULL;
- RtlInitUnicodeStringFromLiteral(&PsProcessType->TypeName, L"Process");
+ RtlInitUnicodeStringFromLiteral(&PsProcessType->TypeName, REACTOS_UCS2(L"Process"));
InitializeListHead(&PsProcessListHead);
KeInitializeSpinLock(&PsProcessListLock);
return;
}
+#ifdef LIBCAPTIVE
+ /* Need to present 0-terminated string "System"
+ * from KPROCESS up to PAGE_SIZE offset
+ * for ext2fsd.sys V0.10A debug.c/Ext2GetProcessNameOffset()
+ */
+ strcpy(((char *)PsInitialSystemProcess) +strlen("System")+1/* 0-terminator */,"System");
+#endif /* LIBCAPTIVE */
+
/* System threads may run on any processor. */
PsInitialSystemProcess->Pcb.Affinity = 0xFFFFFFFF;
PsInitialSystemProcess->Pcb.BasePriority = PROCESS_PRIO_NORMAL;
+#ifndef LIBCAPTIVE
KeInitializeDispatcherHeader(&PsInitialSystemProcess->Pcb.DispatcherHeader,
InternalProcessType,
sizeof(EPROCESS),
FALSE);
+#endif /* LIBCAPTIVE */
KProcess = &PsInitialSystemProcess->Pcb;
+#ifndef LIBCAPTIVE
MmInitializeAddressSpace(PsInitialSystemProcess,
&PsInitialSystemProcess->AddressSpace);
+#endif /* LIBCAPTIVE */
ObCreateHandleTable(NULL,FALSE,PsInitialSystemProcess);
+#ifndef LIBCAPTIVE
KProcess->DirectoryTableBase =
(LARGE_INTEGER)(LONGLONG)(ULONG)MmGetPageDirectory();
+#endif /* LIBCAPTIVE */
PsInitialSystemProcess->UniqueProcessId =
InterlockedIncrement(&PiNextProcessUniqueId);
PsInitialSystemProcess->Win32WindowStation = (HANDLE)0;
&SystemProcessHandle);
}
+#ifndef LIBCAPTIVE
+
VOID STDCALL
PiDeleteProcess(PVOID ObjectBody)
{
KeReleaseSpinLock(&PsProcessListLock, oldIrql);
/* KDB hook */
- KDB_DELETEPROCESS_HOOK(Process->Peb);
+ KDB_DELETEPROCESS_HOOK(Process);
ObDereferenceObject(Process->Token);
+ ObDeleteHandleTable(Process);
(VOID)MmReleaseMmInfo(Process);
- ObDeleteHandleTable(Process);
}
return((HANDLE)PsGetCurrentProcess()->UniqueProcessId);
}
+#endif /* LIBCAPTIVE */
+
/*
* FUNCTION: Returns a pointer to the current process
*/
PEPROCESS STDCALL
PsGetCurrentProcess(VOID)
{
+#ifndef LIBCAPTIVE
if (PsGetCurrentThread() == NULL ||
PsGetCurrentThread()->ThreadsProcess == NULL)
{
+#endif /* LIBCAPTIVE */
return(PsInitialSystemProcess);
+#ifndef LIBCAPTIVE
}
else
{
return(PsGetCurrentThread()->ThreadsProcess);
}
+#endif /* LIBCAPTIVE */
}
PEPROCESS STDCALL
return(PsGetCurrentProcess());
}
+#ifndef LIBCAPTIVE
+
NTSTATUS STDCALL
PsCreateSystemProcess(PHANDLE ProcessHandle,
ACCESS_MASK DesiredAccess,
Message.Header.MessageSize = sizeof(LPC_DBG_MESSAGE);
Message.Header.DataSize = sizeof(LPC_DBG_MESSAGE) -
- sizeof(LPC_MESSAGE_HEADER);
+ sizeof(LPC_MESSAGE);
Message.Type = DBG_EVENT_CREATE_PROCESS;
Message.Data.CreateProcess.FileHandle = FileHandle;
Message.Data.CreateProcess.Base = ImageBase;
return(STATUS_SUCCESS);
}
+#endif /* LIBCAPTIVE */
+
/* EOF */