NTSTATUS
+NTAPI
ObpQueryHandleAttributes(HANDLE Handle,
POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo)
{
PHANDLE_TABLE HandleTable;
PHANDLE_TABLE_ENTRY HandleTableEntry;
- LONG ExHandle;
PAGED_CODE();
if(ObIsKernelHandle(Handle, ExGetPreviousMode()))
{
HandleTable = ObpKernelHandleTable;
- ExHandle = HANDLE_TO_EX_HANDLE(ObKernelHandleToHandle(Handle));
+ Handle = ObKernelHandleToHandle(Handle);
}
else
{
HandleTable = PsGetCurrentProcess()->ObjectTable;
- ExHandle = HANDLE_TO_EX_HANDLE(Handle);
}
KeEnterCriticalRegion();
HandleTableEntry = ExMapHandleToPointer(HandleTable,
- ExHandle);
+ Handle);
if (HandleTableEntry == NULL)
{
KeLeaveCriticalRegion();
NTSTATUS
+NTAPI
ObpSetHandleAttributes(HANDLE Handle,
POBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo)
{
PHANDLE_TABLE HandleTable;
PHANDLE_TABLE_ENTRY HandleTableEntry;
- LONG ExHandle;
PAGED_CODE();
if(ObIsKernelHandle(Handle, ExGetPreviousMode()))
{
HandleTable = ObpKernelHandleTable;
- ExHandle = HANDLE_TO_EX_HANDLE(ObKernelHandleToHandle(Handle));
+ Handle = ObKernelHandleToHandle(Handle);
}
else
{
HandleTable = PsGetCurrentProcess()->ObjectTable;
- ExHandle = HANDLE_TO_EX_HANDLE(Handle);
}
KeEnterCriticalRegion();
HandleTableEntry = ExMapHandleToPointer(HandleTable,
- ExHandle);
+ Handle);
if (HandleTableEntry == NULL)
{
KeLeaveCriticalRegion();
PHANDLE_TABLE_ENTRY HandleEntry;
PVOID Body;
POBJECT_HEADER ObjectHeader;
- LONG ExHandle = HANDLE_TO_EX_HANDLE(Handle);
PAGED_CODE();
KeEnterCriticalRegion();
HandleEntry = ExMapHandleToPointer(HandleTable,
- ExHandle);
+ Handle);
if(HandleEntry != NULL)
{
if(HandleEntry->u1.ObAttributes & EX_HANDLE_ENTRY_PROTECTFROMCLOSE)
/* destroy and unlock the handle entry */
ExDestroyHandleByEntry(HandleTable,
HandleEntry,
- ExHandle);
+ Handle);
KeLeaveCriticalRegion();
NTSTATUS
+NTAPI
ObDuplicateObject(PEPROCESS SourceProcess,
PEPROCESS TargetProcess,
HANDLE SourceHandle,
HANDLE_TABLE_ENTRY NewHandleEntry;
PVOID ObjectBody;
POBJECT_HEADER ObjectHeader;
- LONG ExTargetHandle;
- LONG ExSourceHandle;
ULONG NewHandleCount;
+ HANDLE NewTargetHandle;
PAGED_CODE();
SourceHandleTable = SourceProcess->ObjectTable;
}
- ExSourceHandle = HANDLE_TO_EX_HANDLE(SourceHandle);
-
KeEnterCriticalRegion();
SourceHandleEntry = ExMapHandleToPointer(SourceHandleTable,
- ExSourceHandle);
+ SourceHandle);
if (SourceHandleEntry == NULL)
{
KeLeaveCriticalRegion();
KeLeaveCriticalRegion();
/* attempt to create the new handle */
- ExTargetHandle = ExCreateHandle(TargetProcess->ObjectTable,
- &NewHandleEntry);
- if (ExTargetHandle != EX_INVALID_HANDLE)
+ NewTargetHandle = ExCreateHandle(TargetProcess->ObjectTable,
+ &NewHandleEntry);
+ if (NewTargetHandle != NULL)
{
if (Options & DUPLICATE_CLOSE_SOURCE)
{
ObDereferenceObject(ObjectBody);
- *TargetHandle = EX_HANDLE_TO_HANDLE(ExTargetHandle);
+ *TargetHandle = NewTargetHandle;
return STATUS_SUCCESS;
}
{
_SEH_TRY
{
- ProbeForWrite(TargetHandle,
- sizeof(HANDLE),
- sizeof(ULONG));
+ ProbeForWriteHandle(TargetHandle);
}
_SEH_HANDLE
{
return Ret;
}
-VOID ObCreateHandleTable(PEPROCESS Parent,
+VOID
+NTAPI
+ObCreateHandleTable(PEPROCESS Parent,
BOOLEAN Inherit,
PEPROCESS Process)
/*
NTSTATUS
+NTAPI
ObpCreateHandle(PEPROCESS Process,
PVOID ObjectBody,
ACCESS_MASK GrantedAccess,
{
HANDLE_TABLE_ENTRY NewEntry;
POBJECT_HEADER ObjectHeader;
- LONG ExHandle;
+ HANDLE Handle;
PAGED_CODE();
NewEntry.u1.ObAttributes &= ~EX_HANDLE_ENTRY_INHERITABLE;
NewEntry.u2.GrantedAccess = GrantedAccess;
- ExHandle = ExCreateHandle(Process->ObjectTable,
- &NewEntry);
- DPRINT("ObCreateHandle(0x%x)==0x%x [HT:0x%x]\n", ObjectHeader, *HandleReturn, Process->ObjectTable);
- if(ExHandle != EX_INVALID_HANDLE)
+ Handle = ExCreateHandle(Process->ObjectTable,
+ &NewEntry);
+ DPRINT("ObCreateHandle(0x%x)==0x%x [HT:0x%x]\n", ObjectHeader, Handle, Process->ObjectTable);
+ if(Handle != NULL)
{
if(InterlockedIncrement(&ObjectHeader->HandleCount) == 1)
{
UserMode);
}
- *HandleReturn = EX_HANDLE_TO_HANDLE(ExHandle);
+ *HandleReturn = Handle;
return STATUS_SUCCESS;
}
{
PHANDLE_TABLE_ENTRY HandleEntry;
PEPROCESS Process;
- LONG ExHandle = HANDLE_TO_EX_HANDLE(Handle);
PAGED_CODE();
KeEnterCriticalRegion();
HandleEntry = ExMapHandleToPointer(Process->ObjectTable,
- ExHandle);
+ Handle);
if(HandleEntry != NULL)
{
*GenerateOnClose = (HandleEntry->u1.ObAttributes & EX_HANDLE_ENTRY_AUDITONCLOSE) != 0;
PVOID ObjectBody;
ACCESS_MASK GrantedAccess;
ULONG Attributes;
- LONG ExHandle;
PAGED_CODE();
if(ObIsKernelHandle(Handle, AccessMode))
{
HandleTable = ObpKernelHandleTable;
- ExHandle = HANDLE_TO_EX_HANDLE(ObKernelHandleToHandle(Handle));
+ Handle = ObKernelHandleToHandle(Handle);
}
else
{
HandleTable = PsGetCurrentProcess()->ObjectTable;
- ExHandle = HANDLE_TO_EX_HANDLE(Handle);
}
KeEnterCriticalRegion();
HandleEntry = ExMapHandleToPointer(HandleTable,
- ExHandle);
+ Handle);
if (HandleEntry == NULL)
{
KeLeaveCriticalRegion();
ULONG
+NTAPI
ObpGetHandleCountByHandleTable(PHANDLE_TABLE HandleTable)
{
return HandleTable->HandleCount;