PHANDLE_TABLE PspCidTable = NULL;
-#define TAG_CIDOBJECT TAG('C', 'I', 'D', 'O')
-
#define CID_FLAG_PROCESS 0x1
#define CID_FLAG_THREAD 0x2
#define CID_FLAGS_MASK (CID_FLAG_PROCESS | CID_FLAG_THREAD)
{
HANDLE_TABLE_ENTRY NewEntry;
LONG ExHandle;
-
+
PAGED_CODE();
-
+
NewEntry.u1.Object = Object;
if(ObjectType == PsThreadType)
NewEntry.u2.GrantedAccess = CID_FLAG_THREAD;
NewEntry.u2.GrantedAccess = CID_FLAG_PROCESS;
else
{
- DPRINT1("Can't create CID handles for %wZ objects\n", &ObjectType->TypeName);
+ DPRINT1("Can't create CID handles for %wZ objects\n", &ObjectType->Name);
KEBUGCHECK(0);
}
-
+
ExHandle = ExCreateHandle(PspCidTable,
&NewEntry);
if(ExHandle != EX_INVALID_HANDLE)
*Handle = EX_HANDLE_TO_HANDLE(ExHandle);
return STATUS_SUCCESS;
}
-
+
return STATUS_UNSUCCESSFUL;
}
{
PHANDLE_TABLE_ENTRY Entry;
LONG ExHandle = HANDLE_TO_EX_HANDLE(CidHandle);
-
+
PAGED_CODE();
+ KeEnterCriticalRegion();
+
Entry = ExMapHandleToPointer(PspCidTable,
ExHandle);
if(Entry != NULL)
ExDestroyHandleByEntry(PspCidTable,
Entry,
ExHandle);
+ KeLeaveCriticalRegion();
return STATUS_SUCCESS;
}
else
{
ExUnlockHandleTableEntry(PspCidTable,
Entry);
+ KeLeaveCriticalRegion();
return STATUS_OBJECT_TYPE_MISMATCH;
}
}
-
+ KeLeaveCriticalRegion();
return STATUS_INVALID_HANDLE;
}
PsLookupCidHandle(HANDLE CidHandle, POBJECT_TYPE ObjectType, PVOID *Object)
{
PHANDLE_TABLE_ENTRY Entry;
-
+
PAGED_CODE();
KeEnterCriticalRegion();
-
+
Entry = ExMapHandleToPointer(PspCidTable,
HANDLE_TO_EX_HANDLE(CidHandle));
if(Entry != NULL)
else
{
DPRINT1("CID Obj type mismatch handle 0x%x %wZ vs 0x%x\n", CidHandle,
- &ObjectType->TypeName, Entry->u2.GrantedAccess);
+ &ObjectType->Name, Entry->u2.GrantedAccess);
ExUnlockHandleTableEntry(PspCidTable,
Entry);
}
}
-
+
KeLeaveCriticalRegion();
-
+
return NULL;
}
{
PHANDLE_TABLE_ENTRY CidEntry;
PETHREAD FoundThread;
+ NTSTATUS Status = STATUS_INVALID_CID;
PAGED_CODE();
*Process = FoundThread->ThreadsProcess;
}
*Thread = FoundThread;
- return STATUS_SUCCESS;
+ Status = STATUS_SUCCESS;
}
- return STATUS_INVALID_PARAMETER;
+ return Status;
}
{
PHANDLE_TABLE_ENTRY CidEntry;
PETHREAD FoundThread;
+ NTSTATUS Status = STATUS_INVALID_CID;
PAGED_CODE();
PsUnlockCidHandle(CidEntry);
*Thread = FoundThread;
- return STATUS_SUCCESS;
+ Status = STATUS_SUCCESS;
}
- return STATUS_INVALID_PARAMETER;
+ return Status;
}
VOID