+PsReferencePrimaryToken()
[reactos.git] / ntoskrnl / ps / process.c
index c0b094c..aa18361 100644 (file)
@@ -50,12 +50,15 @@ static GENERIC_MAPPING PiProcessMapping = {PROCESS_READ,
 
 #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)
@@ -130,6 +133,7 @@ NtOpenProcessToken(IN       HANDLE          ProcessHandle,
   return _NtOpenProcessToken(ProcessHandle, DesiredAccess, TokenHandle);
 }
 
+#endif /* LIBCAPTIVE */
 
 PACCESS_TOKEN STDCALL
 PsReferencePrimaryToken(PEPROCESS Process)
@@ -141,6 +145,7 @@ PsReferencePrimaryToken(PEPROCESS Process)
    return(Process->Token);
 }
 
+#ifndef LIBCAPTIVE
 
 NTSTATUS
 PsOpenTokenOfProcess(HANDLE ProcessHandle,
@@ -191,6 +196,7 @@ PiKillMostProcesses(VOID)
    KeReleaseSpinLock(&PsProcessListLock, oldIrql);
 }
 
+#endif /* LIBCAPTIVE */
 
 VOID
 PsInitProcessManagment(VOID)
@@ -211,12 +217,24 @@ 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;
@@ -224,7 +242,7 @@ PsInitProcessManagment(VOID)
    PsProcessType->Create = NULL;
    PsProcessType->DuplicationNotify = NULL;
    
-   RtlInitUnicodeStringFromLiteral(&PsProcessType->TypeName, L"Process");
+   RtlInitUnicodeStringFromLiteral(&PsProcessType->TypeName, REACTOS_UCS2(L"Process"));
    
    InitializeListHead(&PsProcessListHead);
    KeInitializeSpinLock(&PsProcessListLock);
@@ -242,20 +260,34 @@ PsInitProcessManagment(VOID)
        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;
@@ -278,6 +310,8 @@ PsInitProcessManagment(VOID)
                  &SystemProcessHandle);
 }
 
+#ifndef LIBCAPTIVE
+
 VOID STDCALL
 PiDeleteProcess(PVOID ObjectBody)
 {
@@ -299,12 +333,12 @@ 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);
 }
 
 
@@ -364,21 +398,27 @@ PsGetCurrentProcessId(VOID)
    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
@@ -387,6 +427,8 @@ IoGetCurrentProcess(VOID)
   return(PsGetCurrentProcess());
 }
 
+#ifndef LIBCAPTIVE
+
 NTSTATUS STDCALL
 PsCreateSystemProcess(PHANDLE ProcessHandle,
                      ACCESS_MASK DesiredAccess,
@@ -694,7 +736,7 @@ NtCreateProcess(OUT PHANDLE ProcessHandle,
        
        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;
@@ -1245,4 +1287,6 @@ PsSetCreateProcessNotifyRoutine(IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
   return(STATUS_SUCCESS);
 }
 
+#endif /* LIBCAPTIVE */
+
 /* EOF */