Moved csrss
[reactos.git] / reactos / subsys / csrss / api / handle.c
diff --git a/reactos/subsys/csrss/api/handle.c b/reactos/subsys/csrss/api/handle.c
deleted file mode 100644 (file)
index ae57db5..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-/* $Id$
- *
- * reactos/subsys/csrss/api/handle.c
- *
- * CSRSS handle functions
- *
- * ReactOS Operating System
- */
-
-/* INCLUDES ******************************************************************/
-
-#include <csrss.h>
-
-#define NDEBUG
-#include <debug.h>
-
-/* FUNCTIONS *****************************************************************/
-
-static unsigned ObjectDefinitionsCount = 0;
-static PCSRSS_OBJECT_DEFINITION ObjectDefinitions = NULL;
-
-BOOL 
-CsrIsConsoleHandle(HANDLE Handle)
-{
-  return ((((ULONG)Handle) & 0x10000003) == 0x3) ? TRUE : FALSE;
-}
-
-
-NTSTATUS FASTCALL
-CsrRegisterObjectDefinitions(PCSRSS_OBJECT_DEFINITION NewDefinitions)
-{
-  unsigned NewCount;
-  PCSRSS_OBJECT_DEFINITION Scan;
-  PCSRSS_OBJECT_DEFINITION New;
-
-  NewCount = 0;
-  for (Scan = NewDefinitions; 0 != Scan->Type; Scan++)
-    {
-      NewCount++;
-    }
-
-  New = RtlAllocateHeap(CsrssApiHeap, 0,
-                        (ObjectDefinitionsCount + NewCount)
-                        * sizeof(CSRSS_OBJECT_DEFINITION));
-  if (NULL == New)
-    {
-      DPRINT1("Unable to allocate memory\n");
-      return STATUS_NO_MEMORY;
-    }
-  if (0 != ObjectDefinitionsCount)
-    {
-      RtlCopyMemory(New, ObjectDefinitions,
-                    ObjectDefinitionsCount * sizeof(CSRSS_OBJECT_DEFINITION));
-      RtlFreeHeap(CsrssApiHeap, 0, ObjectDefinitions);
-    }
-  RtlCopyMemory(New + ObjectDefinitionsCount, NewDefinitions,
-                NewCount * sizeof(CSRSS_OBJECT_DEFINITION));
-  ObjectDefinitions = New;
-  ObjectDefinitionsCount += NewCount;
-
-  return STATUS_SUCCESS;
-}
-
-NTSTATUS STDCALL CsrGetObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Handle, Object_t **Object )
-{
-  ULONG h = (((ULONG)Handle) >> 2) - 1;
-  DPRINT("CsrGetObject, Object: %x, %x, %x\n", Object, Handle, ProcessData ? ProcessData->HandleTableSize : 0);
-
-  if (ProcessData == NULL)
-    {
-      return STATUS_INVALID_PARAMETER;
-    }
-  if (!CsrIsConsoleHandle(Handle) || ProcessData->HandleTableSize <= h)
-    {
-      DPRINT1("CsrGetObject returning invalid handle (%x)\n", Handle);
-      return STATUS_INVALID_HANDLE;
-    }
-  *Object = ProcessData->HandleTable[h];
-  //   DbgPrint( "CsrGetObject returning\n" );
-  return *Object ? STATUS_SUCCESS : STATUS_INVALID_HANDLE;
-}
-
-
-NTSTATUS STDCALL
-CsrReleaseObjectByPointer(Object_t *Object)
-{
-  BOOL Found;
-  unsigned DefIndex;
-
-  /* dec ref count */
-  if (InterlockedDecrement(&Object->ReferenceCount) == 0)
-    {
-      Found = FALSE;
-      for (DefIndex = 0; ! Found && DefIndex < ObjectDefinitionsCount; DefIndex++)
-        {
-          if (Object->Type == ObjectDefinitions[DefIndex].Type)
-            {
-              (ObjectDefinitions[DefIndex].CsrCleanupObjectProc)(Object);
-              Found = TRUE;
-            }
-        }
-
-      if (! Found)
-        {
-         DPRINT1("CSR: Error: releaseing unknown object type 0x%x", Object->Type);
-        }
-    }
-
-  return STATUS_SUCCESS;
-}
-
-
-NTSTATUS STDCALL
-CsrReleaseObject(PCSRSS_PROCESS_DATA ProcessData,
-                 HANDLE Handle)
-{
-  ULONG h = (((ULONG)Handle) >> 2) - 1;
-  NTSTATUS Status;
-
-  if (ProcessData == NULL)
-    {
-      return STATUS_INVALID_PARAMETER;
-    }
-  if (!CsrIsConsoleHandle(Handle) || h >= ProcessData->HandleTableSize || ProcessData->HandleTable[h] == NULL)
-    {
-      return STATUS_INVALID_HANDLE;
-    }
-
-  Status = CsrReleaseObjectByPointer(ProcessData->HandleTable[h]);
-
-  RtlEnterCriticalSection(&ProcessData->HandleTableLock);
-  ProcessData->HandleTable[h] = 0;
-  RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
-  return Status;
-}
-
-NTSTATUS STDCALL CsrInsertObject( PCSRSS_PROCESS_DATA ProcessData, PHANDLE Handle, Object_t *Object )
-{
-   ULONG i;
-   PVOID* Block;
-
-   if (ProcessData == NULL)
-   {
-      return STATUS_INVALID_PARAMETER;
-   }
-
-   RtlEnterCriticalSection(&ProcessData->HandleTableLock);
-
-   for (i = 0; i < ProcessData->HandleTableSize; i++)
-     {
-       if (ProcessData->HandleTable[i] == NULL)
-         {
-            break;
-         }
-     }
-   if (i >= ProcessData->HandleTableSize)
-     {
-       Block = RtlAllocateHeap(CsrssApiHeap,
-                              HEAP_ZERO_MEMORY,
-                              (ProcessData->HandleTableSize + 64) * sizeof(HANDLE));
-       if (Block == NULL)
-         {
-           RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
-          return(STATUS_UNSUCCESSFUL);
-         }
-       RtlCopyMemory(Block,
-                    ProcessData->HandleTable,
-                    ProcessData->HandleTableSize * sizeof(HANDLE));
-       Block = InterlockedExchangePointer(&ProcessData->HandleTable, Block);
-       RtlFreeHeap( CsrssApiHeap, 0, Block );
-       ProcessData->HandleTableSize += 64;
-     }
-   ProcessData->HandleTable[i] = Object;
-   *Handle = (HANDLE)(((i + 1) << 2) | 0x3);
-   InterlockedIncrement( &Object->ReferenceCount );
-   RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
-   return(STATUS_SUCCESS);
-}
-
-NTSTATUS STDCALL CsrDuplicateHandleTable(PCSRSS_PROCESS_DATA SourceProcessData,
-                                         PCSRSS_PROCESS_DATA TargetProcessData)
-{
-    ULONG i;
-
-    if (SourceProcessData == NULL || 
-        TargetProcessData == NULL ||
-        TargetProcessData->HandleTableSize)
-    {
-        return STATUS_INVALID_PARAMETER;
-    }
-
-    RtlEnterCriticalSection(&SourceProcessData->HandleTableLock);
-
-    /* we are called from CreateProcessData, it isn't necessary to lock the target process data */
-
-    TargetProcessData->HandleTable = RtlAllocateHeap(CsrssApiHeap,
-                                                    HEAP_ZERO_MEMORY,
-                                                    SourceProcessData->HandleTableSize * sizeof(HANDLE));
-    if (TargetProcessData->HandleTable == NULL)
-    {
-        RtlLeaveCriticalSection(&SourceProcessData->HandleTableLock);
-       return(STATUS_UNSUCCESSFUL);
-    }
-    TargetProcessData->HandleTableSize = SourceProcessData->HandleTableSize;
-    for (i = 0; i < SourceProcessData->HandleTableSize; i++)
-    {
-        if (SourceProcessData->HandleTable[i])
-        {
-            TargetProcessData->HandleTable[i] = SourceProcessData->HandleTable[i];
-            InterlockedIncrement( &SourceProcessData->HandleTable[i]->ReferenceCount );
-        }
-    }
-   RtlLeaveCriticalSection(&SourceProcessData->HandleTableLock);
-   return(STATUS_SUCCESS);
-}
-
-NTSTATUS STDCALL CsrVerifyObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Handle )
-{
-  ULONG h = (((ULONG)Handle) >> 2) - 1;
-
-  if (ProcessData == NULL)
-    {
-      return STATUS_INVALID_PARAMETER;
-    }
-  if (!CsrIsConsoleHandle(Handle) || h >= ProcessData->HandleTableSize)
-    {
-      return STATUS_INVALID_HANDLE;
-    }
-
-  return ProcessData->HandleTable[h] ? STATUS_SUCCESS : STATUS_INVALID_HANDLE;
-}
-
-/* EOF */