コード例 #1
0
ファイル: handle.c プロジェクト: hoangduit/reactos
/*
 * @implemented
 */
BOOLEAN
NTAPI
RtlIsValidIndexHandle(
    IN PRTL_HANDLE_TABLE HandleTable,
    IN ULONG Index,
    OUT PRTL_HANDLE_TABLE_ENTRY *Handle)
{
    PRTL_HANDLE_TABLE_ENTRY InternalHandle;

    DPRINT("RtlIsValidIndexHandle(HandleTable %p Index 0x%lx Handle %p)\n", HandleTable, Index, Handle);

    if (HandleTable == NULL)
        return FALSE;

    DPRINT("Handles %p HandleSize 0x%lx\n",
           HandleTable->CommittedHandles, HandleTable->SizeOfHandleTableEntry);

    InternalHandle = (PRTL_HANDLE_TABLE_ENTRY)((ULONG_PTR)HandleTable->CommittedHandles +
                     (HandleTable->SizeOfHandleTableEntry * Index));
    if (!RtlIsValidHandle(HandleTable, InternalHandle))
        return FALSE;

    DPRINT("InternalHandle %p\n", InternalHandle);

    if (Handle != NULL)
        *Handle = InternalHandle;

    return TRUE;
}
コード例 #2
0
ファイル: handle.c プロジェクト: hoangduit/reactos
/*
 * @implemented
 */
BOOLEAN
NTAPI
RtlFreeHandle(
    PRTL_HANDLE_TABLE HandleTable,
    PRTL_HANDLE_TABLE_ENTRY Handle)
{
#if DBG
    /* check if handle is valid */
    if (!RtlIsValidHandle(HandleTable, Handle))
    {
        DPRINT1("Invalid Handle! HandleTable=0x%p, Handle=0x%p, Handle->Flags=0x%x\n",
                HandleTable, Handle, Handle ? Handle->Flags : 0);
        return FALSE;
    }
#endif

    /* clear handle */
    memset(Handle, 0, HandleTable->SizeOfHandleTableEntry);

    /* add handle to free list */
    Handle->NextFree = HandleTable->FreeHandles;
    HandleTable->FreeHandles = Handle;

    return TRUE;
}
コード例 #3
0
ファイル: handletable.c プロジェクト: AlexSteel/wine
/**************************************************************************
 *	RtlIsValidIndexHandle   (NTDLL.@)
 *
 * Determines whether a handle index is valid or not.
 *
 * PARAMS
 *  HandleTable    [I] The handle table.
 *  Index          [I] The index of the handle to be tested.
 *  ValidHandle    [O] The handle Index refers to.
 *
 * RETURNS
 *  Valid: TRUE.
 *  Invalid: FALSE.
 */
BOOLEAN WINAPI RtlIsValidIndexHandle(const RTL_HANDLE_TABLE * HandleTable, ULONG Index, RTL_HANDLE ** ValidHandle)
{
    RTL_HANDLE * Handle;

    TRACE("(%p, %u, %p)\n", HandleTable, Index, ValidHandle);
    Handle = (RTL_HANDLE *)
        ((char *)HandleTable->FirstHandle + Index * HandleTable->HandleSize);

    if (RtlIsValidHandle(HandleTable, Handle))
    {
        *ValidHandle = Handle;
        return TRUE;
    }
    return FALSE;
}
コード例 #4
0
ファイル: handle.c プロジェクト: conioh/os-design
BOOLEAN
RtlIsValidIndexHandle(
    IN PRTL_HANDLE_TABLE HandleTable,
    IN ULONG HandleIndex,
    OUT PRTL_HANDLE_TABLE_ENTRY *Handle
    )
{
    PRTL_HANDLE_TABLE_ENTRY p;

    p = (PRTL_HANDLE_TABLE_ENTRY)
        ((PCHAR)HandleTable->CommittedHandles + (HandleIndex * HandleTable->SizeOfHandleTableEntry));

    if (RtlIsValidHandle( HandleTable, p )) {
        *Handle = p;
        return TRUE;
        }
    else {
        return FALSE;
        }
}
コード例 #5
0
ファイル: handle.c プロジェクト: conioh/os-design
BOOLEAN
RtlFreeHandle(
    IN PRTL_HANDLE_TABLE HandleTable,
    IN PRTL_HANDLE_TABLE_ENTRY Handle
    )
{
#if DBG
    if (!RtlIsValidHandle( HandleTable, Handle )) {
        DbgPrint( "RTL: RtlFreeHandle( %lx ) - invalid handle\n", Handle );
        if (NtCurrentPeb()->BeingDebugged) {
            DbgBreakPoint();
            }
        return FALSE;
        }
#endif

    RtlZeroMemory( Handle, HandleTable->SizeOfHandleTableEntry );
    Handle->NextFree = HandleTable->FreeHandles;
    HandleTable->FreeHandles = Handle;
    return TRUE;
}