branch update for HEAD-2003050101
[reactos.git] / subsys / csrss / api / handle.c
index 9a9381f..0b6127c 100644 (file)
 #include "api.h"
 #include <ntdll/rtl.h>
 
+#define NDEBUG
+#include <debug.h>
+
 /* FUNCTIONS *****************************************************************/
 
 NTSTATUS STDCALL CsrGetObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Handle, Object_t **Object )
 {
    ULONG h = (((ULONG)Handle) >> 2) - 1;
-  //   DbgPrint( "CsrGetObject, Object: %x, %x, %x\n", Object, Handle, ProcessData->HandleTableSize );
+   DPRINT("CsrGetObject, Object: %x, %x, %x\n", Object, Handle, ProcessData ? ProcessData->HandleTableSize : 0);
+
+   if (ProcessData == NULL)
+   {
+      return STATUS_INVALID_PARAMETER;
+   }
    if( h >= ProcessData->HandleTableSize )
      {
-       DbgPrint( "CsrGetObject returning invalid handle\n" );
+       DPRINT("CsrGetObject returning invalid handle\n");
        return STATUS_INVALID_HANDLE;
      }
    *Object = ProcessData->HandleTable[h];
@@ -37,6 +45,10 @@ NTSTATUS STDCALL CsrReleaseObject(PCSRSS_PROCESS_DATA ProcessData,
 {
    Object_t *Object;
    ULONG h = (((ULONG)Handle) >> 2) - 1;
+   if (ProcessData == NULL)
+   {
+      return STATUS_INVALID_PARAMETER;
+   }
    if( h >= ProcessData->HandleTableSize || ProcessData->HandleTable[h] == 0 )
       return STATUS_INVALID_HANDLE;
    /* dec ref count */
@@ -59,6 +71,11 @@ NTSTATUS STDCALL CsrInsertObject( PCSRSS_PROCESS_DATA ProcessData, PHANDLE Handl
    ULONG i;
    PVOID* NewBlock;
 
+   if (ProcessData == NULL)
+   {
+      return STATUS_INVALID_PARAMETER;
+   }
+
    for (i = 0; i < ProcessData->HandleTableSize; i++)
      {
        if (ProcessData->HandleTable[i] == NULL)
@@ -89,5 +106,20 @@ NTSTATUS STDCALL CsrInsertObject( PCSRSS_PROCESS_DATA ProcessData, PHANDLE Handl
    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 (h >= ProcessData->HandleTableSize)
+    {
+      return STATUS_INVALID_HANDLE;
+    }
+
+  return ProcessData->HandleTable[h] ? STATUS_SUCCESS : STATUS_INVALID_HANDLE;
+}
 
 /* EOF */