- Hack around the system start up Dll Initialization Bug for GdiHandleTable.

svn path=/trunk/; revision=41191
This commit is contained in:
James Tabor 2009-05-29 07:13:43 +00:00
parent add725ffb4
commit 9fdb3933ab

View file

@ -124,8 +124,11 @@ BOOL GdiIsHandleValid(HGDIOBJ hGdiObj)
BOOL GdiGetHandleUserData(HGDIOBJ hGdiObj, DWORD ObjectType, PVOID *UserData)
{
if ( GdiHandleTable )
if ( !GdiHandleTable )
{
// FIXME HAX!! Due to the "Dll Initialization Bug" set the local handle table pointer.
GdiHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable;
}
PGDI_TABLE_ENTRY Entry = GdiHandleTable + GDI_HANDLE_GET_INDEX(hGdiObj);
if((Entry->Type & GDI_ENTRY_BASETYPE_MASK) == ObjectType &&
( (Entry->Type << GDI_ENTRY_UPPER_SHIFT) & GDI_HANDLE_TYPE_MASK ) ==
@ -159,21 +162,17 @@ BOOL GdiGetHandleUserData(HGDIOBJ hGdiObj, DWORD ObjectType, PVOID *UserData)
}
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
else
{
DPRINT1("!GGHUD: Warning System Initialization Error!!!! GdiHandleTable == 0x%x !!!\n",GdiHandleTable);
*UserData = NULL;
}
return FALSE;
}
PLDC
FASTCALL
GdiGetLDC(HDC hDC)
{
if ( GdiHandleTable )
if ( !GdiHandleTable )
{
// FIXME HAX!! Due to the "Dll Initialization Bug" set the local handle table pointer.
GdiHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable;
}
PDC_ATTR Dc_Attr;
PGDI_TABLE_ENTRY Entry = GdiHandleTable + GDI_HANDLE_GET_INDEX((HGDIOBJ) hDC);
HANDLE pid = (HANDLE)((ULONG_PTR)Entry->ProcessId & ~0x1);
@ -205,12 +204,6 @@ GdiGetLDC(HDC hDC)
}
}
return NULL;
}
else
{
DPRINT1("!LDC: Warning System Initialization Error!!!! GdiHandleTable == 0x%x !!!\n",GdiHandleTable);
}
return NULL;
}
VOID GdiSAPCallback(PLDC pldc)