Implement GdiReleaseLocalDC, GdiFlush, GdiPlayDCScript, GdiPlayJournal, GdiPlayScript, GdiConvertBitmap, GdiConvertBrush, GdiConvertDC, GdiConvertFont, GdiSetAttrs

Redirect GdiConsoleTextOut, FontIsLinked, GdiDescribePixelFormat, GdiSetPixelFormat, GdiSwapBuffers, GdiFullscreenControl, GdiQueryFonts, GdiInitSpool to win32k.sys
do not redirect add smaller code in gdi32 and use share memory : GdiGradientFill, FrameRgn, GdiTransparentBlt
stub : GdiPrinterThunk, GdiConvertBitmapV5
update good api list. 

svn path=/trunk/; revision=28676
This commit is contained in:
Magnus Olsen 2007-08-30 18:06:35 +00:00
parent 280e3b52d4
commit 15499d174f
6 changed files with 267 additions and 234 deletions

View file

@ -184,8 +184,98 @@ FillRgn@12
FixBrushOrgEx@16
FlattenPath@4
FloodFill@16
FontIsLinked@4
FrameRgn@20=NtGdiFontIsLinked@4
FontIsLinked@4=NtGdiFontIsLinked@4
FrameRgn@20
GdiAddFontResourceW@12
GdiAddGlsBounds@8
GdiAddGlsRecord@16
GdiAlphaBlend@44
GdiArtificialDecrementDriver@8
GdiCleanCacheDC@4
GdiComment@12
GdiConsoleTextOut@16=NtGdiConsoleTextOut@16
GdiConvertAndCheckDC@4
GdiConvertBitmap@4
GdiConvertBitmapV5@16
GdiConvertBrush@4
GdiConvertDC@4
GdiConvertEnhMetaFile@4
GdiConvertFont@4
GdiConvertMetaFilePict@4
GdiConvertPalette@4
GdiConvertRegion@4
GdiConvertToDevmodeW@4
GdiCreateLocalEnhMetaFile@4
GdiCreateLocalMetaFilePict@4
GdiDeleteLocalDC@4
GdiDeleteSpoolFileHandle@4
GdiDescribePixelFormat@16=NtGdiDescribePixelFormat@16
GdiDllInitialize@12
GdiEndDocEMF@4
GdiEndPageEMF@8
GdiEntry10@8
GdiEntry11@8
GdiEntry12@8
GdiEntry13@0
GdiEntry14@12
GdiEntry15@12
GdiEntry16@12
GdiEntry1@8
GdiEntry2@44
GdiEntry3@4
GdiEntry4@8
GdiEntry5@4
GdiEntry6@8
GdiEntry7@8
GdiEntry8@4
GdiEntry9@24
GdiFixUpHandle@4
GdiFlush@0
GdiFullscreenControl@20=NtGdiFullscreenControl@20
GdiGetBatchLimit@0
GdiGetCharDimensions@12
GdiGetCodePage@4
GdiGetDC@4
GdiGetDevmodeForPage@16
GdiGetLocalBrush@4
GdiGetLocalDC@4
GdiGetLocalFont@4
GdiGetPageCount@4
GdiGetPageHandle@12
GdiGetSpoolFileHandle@12
GdiGetSpoolMessage@16=NtGdiGetSpoolMessage@16
GdiGradientFill@24
GdiInitSpool@0=NtGdiInitSpool@0
GdiInitializeLanguagePack@4
GdiIsMetaFileDC@4
GdiIsMetaPrintDC@4
GdiIsPlayMetafileDC@4
GdiPlayDCScript@24
GdiPlayEMF@20
GdiPlayJournal@20
GdiPlayPageEMF@20
GdiPlayPrivatePageEMF@12
GdiPlayScript@28
GdiPrinterThunk@12
GdiProcessSetup@0
GdiQueryFonts@12=NtGdiQueryFonts@12
GdiQueryTable@0
GdiRealizationInfo@8
GdiReleaseDC@4
GdiReleaseLocalDC@4
GdiResetDCEMF@8
GdiSetAttrs@4
GdiSetBatchLimit@4
GdiSetLastError@4
GdiSetPixelFormat@8=NtGdiSetPixelFormat@8
GdiSetServerAttr@8
GdiStartDocEMF@8
GdiStartPageEMF@4
GdiSwapBuffers@4=NtGdiSwapBuffers@4
GdiTransparentBlt@44
GdiValidateHandle@4
GetArcDirection@4
GetAspectRatioFilterEx@8
ClearBitmapAttributes@8
ClearBrushAttributes@8
@ -245,98 +335,7 @@ DdEntry53@8=NtGdiDdUnlock@8
DdEntry54@8=NtGdiDdUnlockD3D@8
DdEntry55@12=NtGdiDdUpdateOverlay@12
DdEntry56@8=NtGdiDdWaitForVerticalBlank@8
GdiAddFontResourceW@12
GdiAddGlsBounds@8
GdiAddGlsRecord@16
GdiAlphaBlend@44
GdiArtificialDecrementDriver@8
GdiCleanCacheDC@4
GdiComment@12
GdiConsoleTextOut@16
GdiConvertAndCheckDC@4
GdiConvertBitmap@4
;GdiConvertBitmapV5
GdiConvertBrush@4
GdiConvertDC@4
GdiConvertEnhMetaFile@4
GdiConvertFont@4
GdiConvertMetaFilePict@4
GdiConvertPalette@4
GdiConvertRegion@4
GdiConvertToDevmodeW@4
GdiCreateLocalEnhMetaFile@4
GdiCreateLocalMetaFilePict@4
GdiDeleteLocalDC@4
GdiDeleteSpoolFileHandle@4
GdiDescribePixelFormat@16
GdiDllInitialize@12
GdiDrawStream@12
GdiEndDocEMF@4
GdiEndPageEMF@8
GdiEntry1@8
GdiEntry2@44
GdiEntry3@4
GdiEntry4@8
GdiEntry5@4
GdiEntry6@8
GdiEntry7@8
GdiEntry8@4
GdiEntry9@24
GdiEntry10@8
GdiEntry11@8
GdiEntry12@8
GdiEntry13@0
GdiEntry14@12
GdiEntry15@12
GdiEntry16@12
GdiFixUpHandle@4
GdiFlush@0
GdiFullscreenControl@20
GdiGetBatchLimit@0
GdiGetCharDimensions@12
GdiGetCodePage@4
GdiGetDC@4
GdiGetDevmodeForPage@16
GdiGetLocalBrush@4
GdiGetLocalDC@4
GdiGetLocalFont@4
GdiGetPageCount@4
GdiGetPageHandle@12
GdiGetSpoolFileHandle@12
;GdiGetSpoolMessage
GdiGradientFill@24=NtGdiGradientFill@24
GdiInitSpool@0
GdiInitializeLanguagePack@4
GdiIsMetaFileDC@4
GdiIsMetaPrintDC@4
GdiIsPlayMetafileDC@4
GdiPlayDCScript@24
GdiPlayEMF@20
GdiPlayJournal@20
GdiPlayPageEMF@20
GdiPlayPrivatePageEMF@12
GdiPlayScript@28
;GdiPrinterThunk
GdiProcessSetup@0
GdiQueryFonts@12
GdiQueryTable@0
GdiRealizationInfo@8
GdiReleaseDC@4
GdiReleaseLocalDC@4
GdiResetDCEMF@8
GdiSetAttrs@4
GdiSetBatchLimit@4
GdiSetLastError@4
GdiSetPixelFormat@8
GdiSetServerAttr@8
GdiStartDocEMF@8
GdiStartPageEMF@4
GdiSwapBuffers@4
GdiTransparentBlt@44=NtGdiTransparentBlt@44
GdiValidateHandle@4
GetArcDirection@4
GetAspectRatioFilterEx@8
GetBitmapAttributes@4
GetBitmapBits@12=NtGdiGetBitmapBits@12
GetBitmapDimensionEx@8=NtGdiGetBitmapDimension@8

View file

@ -7,7 +7,8 @@
; if bugs exists their or verify
;
AddFontResourceA@4
AAddFontResourceA@4
AddFontResourceExA@12
AddFontResourceExW@12
AddFontResourceW@4
AnyLinkedFonts@0
@ -47,11 +48,14 @@ EngCreateClip@0
EngCreateDeviceBitmap@16
EngCreateDeviceSurface@16
EngCreatePalette@24
EngCreateSemaphore@0
EngDeleteClip@4
EngDeletePath@4
EngDeleteSemaphore@4
EngDeleteSurface@4
EngEraseSurface@12
EngFillPath@28
EngFindResource@16
EngFreeModule@4
EngGetCurrentCodePage@8
EngGetPrinterDataFileName@4
@ -73,4 +77,39 @@ EngStrokePath@32
EngTextOut@40
EngTransparentBlt@32
EngUnicodeToMultiByteN@20
EngUnlockSurface@4
EqualRgn@8
FixBrushOrgEx@16
FloodFill@16
FontIsLinked@4
FONTOBJ_cGetAllGlyphHandles@8
FONTOBJ_cGetGlyphs@20
FONTOBJ_pfdg@4
FONTOBJ_pifi@4
FONTOBJ_pQueryGlyphAttrs@8
FONTOBJ_pvTrueTypeFontFile@8
FONTOBJ_pxoGetXform@4
FONTOBJ_vGetInfo@12
GdiConsoleTextOut@16
GdiConvertBitmap@4
GdiConvertBrush@4
GdiConvertDC@4
GdiDescribePixelFormat@16
GdiEntry16@12=DdSwapTextureHandles@12
GdiFlush@0
GdiFullscreenControl@20
GdiGetSpoolMessage@16
GdiInitSpool@0
GdiPlayDCScript@24
GdiPlayJournal@20
GdiPlayScript@28
GdiQueryFonts@12
GdiReleaseLocalDC@4
GdiSetAttrs@4
GdiSetLastError@4
GdiSetPixelFormat@8
GdiSetServerAttr@8
GdiSwapBuffers@4
GetAspectRatioFilterEx@8

View file

@ -160,13 +160,13 @@ GdiGetBatchLimit()
/*
* @unimplemented
* @implemented
*/
BOOL
STDCALL
GdiReleaseLocalDC(HDC hdc)
{
return 0;
return TRUE;
}

View file

@ -757,18 +757,14 @@ UnrealizeObject(
/*
* @unimplemented
* @implemented
*/
BOOL
STDCALL
GdiFlush()
{
/*
* Although GdiFlush is unimplemented, it's safe to return
* TRUE, because we don't have GDI engine surface caching
* implemented yet.
*/
return TRUE;
NtGdiFlush();
return TRUE;
}
@ -1118,9 +1114,9 @@ wglSwapLayerBuffers(
/*
* @unimplemented
* @implemented
*/
DWORD
BOOL
STDCALL
GdiPlayDCScript(
DWORD a0,
@ -1131,16 +1127,15 @@ GdiPlayDCScript(
DWORD a5
)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
/* FIXME fix the prototype right */
return FALSE;
}
/*
* @unimplemented
* @implemented
*/
DWORD
BOOL
STDCALL
GdiPlayJournal(
DWORD a0,
@ -1150,16 +1145,15 @@ GdiPlayJournal(
DWORD a4
)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
/* FIXME fix the prototype right */
return FALSE;
}
/*
* @unimplemented
* @implemented
*/
DWORD
BOOL
STDCALL
GdiPlayScript(
DWORD a0,
@ -1168,12 +1162,10 @@ GdiPlayScript(
DWORD a3,
DWORD a4,
DWORD a5,
DWORD a6
)
DWORD a6)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
/* FIXME prototype */
return FALSE;
}
@ -1348,17 +1340,7 @@ EndFormPage(HDC hdc)
return 0;
}
/*
* @unimplemented
*/
BOOL
STDCALL
FontIsLinked(HDC hdc)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
}
/*
* @unimplemented
@ -1409,51 +1391,43 @@ GdiConvertAndCheckDC(HDC hdc)
}
/*
* @unimplemented
* @implemented
*/
HBITMAP
STDCALL
GdiConvertBitmap(HBITMAP hbm)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
return hbm;
}
/*
* @unimplemented
* @implemented
*/
HBRUSH
STDCALL
GdiConvertBrush(HBRUSH hbr)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
return hbr;
}
/*
* @unimplemented
* @implemented
*/
HDC
STDCALL
GdiConvertDC(HDC hdc)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
return hdc;
}
/*
* @unimplemented
* @implemented
*/
HFONT
STDCALL
GdiConvertFont(HFONT hfont)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
return hfont;
}
/*
@ -1504,18 +1478,6 @@ GdiDeleteLocalDC(HDC hdc)
return 0;
}
/*
* @unimplemented
*/
int
STDCALL
GdiDescribePixelFormat(HDC hdc,int ipfd,UINT cjpfd,PPIXELFORMATDESCRIPTOR ppfd)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
}
/*
* @unimplemented
*/
@ -1613,15 +1575,13 @@ GdiIsPlayMetafileDC(HDC hdc)
}
/*
* @unimplemented
* @implemented
*/
BOOL
STDCALL
GdiSetAttrs(HDC hdc)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
return TRUE;
}
/*
@ -1635,17 +1595,7 @@ GdiSetLastError(DWORD dwErrCode)
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
}
/*
* @unimplemented
*/
BOOL
STDCALL
GdiSetPixelFormat(HDC hdc,int ipfd)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
}
/*
* @unimplemented
@ -1659,27 +1609,16 @@ GdiValidateHandle(HGDIOBJ hobj)
return 0;
}
/*
* @unimplemented
*/
BOOL
STDCALL
GdiSwapBuffers(HDC hdc)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
}
/*
* @unimplemented
* @implemented
*/
VOID
STDCALL
GdiSetServerAttr(HDC hdc,DWORD attr)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
/* it does do nothing */
}
/*
@ -2052,31 +1991,9 @@ GetTextExtentPointI(
return 0;
}
/*
* @unimplemented
*/
NTSTATUS
STDCALL
GdiFullscreenControl(FULLSCREENCONTROL FullscreenCommand,PVOID FullscreenInput,
DWORD FullscreenInputLength,PVOID FullscreenOutput,
PULONG FullscreenOutputLength)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
}
/*
* @unimplemented
*/
INT
STDCALL
GdiQueryFonts(PUNIVERSAL_FONT_ID pufiFontList,ULONG nBufferSize,PLARGE_INTEGER pTimeStamp )
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
}
/*
* @unimplemented
@ -2719,17 +2636,7 @@ GdiPlayEMF
return 0;
}
/*
* @unimplemented
*/
BOOL
STDCALL
GdiInitSpool(VOID)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
}
/*
* @unimplemented
@ -2791,5 +2698,101 @@ FillRgn( IN HDC hdc, IN HRGN hrgn, IN HBRUSH hbrush)
return NtGdiFillRgn( hdc, hrgn, hbrush);
}
/*
* @implemented
*/
BOOL
STDCALL
GdiGradientFill(
IN HDC hdc,
IN PTRIVERTEX pVertex,
IN ULONG nVertex,
IN PVOID pMesh,
IN ULONG nMesh,
IN ULONG ulMode)
{
/* FIXME some part need be done in user mode */
return NtGdiGradientFill(hdc, pVertex, nVertex, pMesh, nMesh, ulMode);
}
/*
* @implemented
*/
BOOL
STDCALL
FrameRgn(
IN HDC hdc,
IN HRGN hrgn,
IN HBRUSH hbrush,
IN INT xWidth,
IN INT yHeight)
{
/* FIXME some part need be done in user mode */
return NtGdiFrameRgn(hdc, hrgn, hbrush, xWidth, yHeight);
}
/*
* @implemented
*/
BOOL
STDCALL
GdiTransparentBlt(
IN HDC hdcDst,
IN INT xDst,
IN INT yDst,
IN INT cxDst,
IN INT cyDst,
IN HDC hdcSrc,
IN INT xSrc,
IN INT ySrc,
IN INT cxSrc,
IN INT cySrc,
IN COLORREF TransColor
)
{
/* FIXME some part need be done in user mode */
return NtGdiTransparentBlt(hdcDst, xDst, yDst, cxDst, cyDst, hdcSrc, xSrc, ySrc, cxSrc, cySrc, TransColor);
}
/*
* @unimplemented
*/
BOOL
STDCALL
GdiPrinterThunk(
IN HUMPD humpd,
DWORD *status,
DWORD unuse)
{
/* FIXME figout the protypes, the HUMPD are a STRUCT or COM object */
/* status contain some form of return value that being save, what it is I do not known */
/* unsue seam have zero effect, what it is for I do not known */
// ? return NtGdiSetPUMPDOBJ(humpd->0x10,TRUE, humpd, ?) <- blackbox, OpenRCE info, and api hooks for anylaysing;
return FALSE;
}
/*
* @unimplemented
*
*/
HBITMAP
STDCALL
GdiConvertBitmapV5(
HBITMAP in_format_BitMap,
HBITMAP src_BitMap,
INT bpp,
INT unuse)
{
/* FIXME guessing the prototypes */
/*
* it have create a new bitmap with desired in format,
* then convert it src_bitmap to new format
* and return it as HBITMAP
*/
return FALSE;
}

View file

@ -260,17 +260,6 @@ GdiAddFontResourceW(LPCWSTR lpszFilename,FLONG fl,DESIGNVECTOR *pdv)
return NtGdiAddFontResource ( &Filename, fl );
}
/*
* @unimplemented
*/
BOOL
STDCALL
GdiConsoleTextOut(HDC hdc, POLYTEXTW *lpto,UINT nStrings, RECTL *prclBounds)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
}
/*
* @unimplemented

View file

@ -396,6 +396,9 @@ GetDCDWord( HDC hDC, INT u, DWORD Result )
}
/*
* @implemented
*/
BOOL
STDCALL
GetAspectRatioFilterEx(