mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 10:52:59 +00:00
Sync with trunk r58033.
svn path=/branches/ros-csrss/; revision=58034
This commit is contained in:
commit
f44e914e80
804 changed files with 56186 additions and 25131 deletions
|
@ -71,6 +71,7 @@ list(APPEND SOURCE
|
|||
gdi/eng/lineto.c
|
||||
gdi/eng/ldevobj.c
|
||||
gdi/eng/mapping.c
|
||||
gdi/eng/math.c
|
||||
gdi/eng/mem.c
|
||||
gdi/eng/engmisc.c
|
||||
gdi/eng/mouse.c
|
||||
|
@ -88,11 +89,9 @@ list(APPEND SOURCE
|
|||
gdi/eng/xlateobj.c
|
||||
user/ntuser/main.c
|
||||
user/ntuser/misc/file.c
|
||||
user/ntuser/misc/math.c
|
||||
user/ntuser/misc/rtlstr.c
|
||||
user/ntuser/misc/copy.c
|
||||
user/ntuser/misc/registry.c
|
||||
user/ntuser/misc/usrheap.c
|
||||
reactx/ntddraw/ddraw.c
|
||||
reactx/ntddraw/dd.c
|
||||
reactx/ntddraw/ddsurf.c
|
||||
|
@ -135,6 +134,7 @@ list(APPEND SOURCE
|
|||
user/ntuser/sysparams.c
|
||||
user/ntuser/timer.c
|
||||
user/ntuser/useratom.c
|
||||
user/ntuser/usrheap.c
|
||||
user/ntuser/vis.c
|
||||
user/ntuser/windc.c
|
||||
user/ntuser/window.c
|
||||
|
|
|
@ -472,7 +472,7 @@ leave:
|
|||
PPDEVOBJ
|
||||
NTAPI
|
||||
EngpGetPDEV(
|
||||
PUNICODE_STRING pustrDeviceName)
|
||||
_In_opt_ PUNICODE_STRING pustrDeviceName)
|
||||
{
|
||||
UNICODE_STRING ustrCurrent;
|
||||
PPDEVOBJ ppdev;
|
||||
|
@ -481,37 +481,39 @@ EngpGetPDEV(
|
|||
/* Acquire PDEV lock */
|
||||
EngAcquireSemaphore(ghsemPDEV);
|
||||
|
||||
/* If no device name is given, ... */
|
||||
if (!pustrDeviceName && gppdevPrimary)
|
||||
/* Did the caller pass a device name? */
|
||||
if (pustrDeviceName)
|
||||
{
|
||||
/* ... use the primary PDEV */
|
||||
ppdev = gppdevPrimary;
|
||||
|
||||
/* Reference the pdev */
|
||||
InterlockedIncrement(&ppdev->cPdevRefs);
|
||||
goto leave;
|
||||
}
|
||||
|
||||
/* Loop all present PDEVs */
|
||||
for (ppdev = gppdevList; ppdev; ppdev = ppdev->ppdevNext)
|
||||
{
|
||||
/* Get a pointer to the GRAPHICS_DEVICE */
|
||||
pGraphicsDevice = ppdev->pGraphicsDevice;
|
||||
|
||||
/* Compare the name */
|
||||
RtlInitUnicodeString(&ustrCurrent, pGraphicsDevice->szWinDeviceName);
|
||||
if (RtlEqualUnicodeString(pustrDeviceName, &ustrCurrent, FALSE))
|
||||
/* Loop all present PDEVs */
|
||||
for (ppdev = gppdevList; ppdev; ppdev = ppdev->ppdevNext)
|
||||
{
|
||||
/* Found! Reference the PDEV */
|
||||
InterlockedIncrement(&ppdev->cPdevRefs);
|
||||
break;
|
||||
/* Get a pointer to the GRAPHICS_DEVICE */
|
||||
pGraphicsDevice = ppdev->pGraphicsDevice;
|
||||
|
||||
/* Compare the name */
|
||||
RtlInitUnicodeString(&ustrCurrent, pGraphicsDevice->szWinDeviceName);
|
||||
if (RtlEqualUnicodeString(pustrDeviceName, &ustrCurrent, FALSE))
|
||||
{
|
||||
/* Found! */
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Otherwise use the primary PDEV */
|
||||
ppdev = gppdevPrimary;
|
||||
}
|
||||
|
||||
/* Did we find one? */
|
||||
if (!ppdev)
|
||||
if (ppdev)
|
||||
{
|
||||
/* No, create a new PDEV */
|
||||
/* Yes, reference the PDEV */
|
||||
InterlockedIncrement(&ppdev->cPdevRefs);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* No, create a new PDEV for the given device */
|
||||
ppdev = EngpCreatePDEV(pustrDeviceName, NULL);
|
||||
if (ppdev)
|
||||
{
|
||||
|
@ -528,7 +530,6 @@ EngpGetPDEV(
|
|||
}
|
||||
}
|
||||
|
||||
leave:
|
||||
/* Release PDEV lock */
|
||||
EngReleaseSemaphore(ghsemPDEV);
|
||||
|
||||
|
@ -775,7 +776,7 @@ NtGdiGetDeviceCaps(
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
_Success_(return!=FALSE)
|
||||
BOOL
|
||||
APIENTRY
|
||||
NtGdiGetDeviceCapsAll(
|
||||
|
|
|
@ -160,22 +160,24 @@ extern PPDEVOBJ gppdevPrimary;
|
|||
|
||||
PPDEVOBJ
|
||||
NTAPI
|
||||
EngpGetPDEV(PUNICODE_STRING pustrDevice);
|
||||
EngpGetPDEV(
|
||||
_In_opt_ PUNICODE_STRING pustrDevice);
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
PDEVOBJ_vRelease(PPDEVOBJ ppdev);
|
||||
PDEVOBJ_vRelease(
|
||||
_Inout_ PPDEVOBJ ppdev);
|
||||
|
||||
PSURFACE
|
||||
NTAPI
|
||||
PDEVOBJ_pSurface(
|
||||
PPDEVOBJ ppdev);
|
||||
_In_ PPDEVOBJ ppdev);
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
PDEVOBJ_vGetDeviceCaps(
|
||||
PPDEVOBJ ppdev,
|
||||
PDEVCAPS pDevCaps);
|
||||
_In_ PPDEVOBJ ppdev,
|
||||
_Out_ PDEVCAPS pDevCaps);
|
||||
|
||||
INIT_FUNCTION
|
||||
NTSTATUS
|
||||
|
@ -184,6 +186,8 @@ InitPDEVImpl(VOID);
|
|||
|
||||
PSIZEL
|
||||
FASTCALL
|
||||
PDEVOBJ_sizl(PPDEVOBJ, PSIZEL);
|
||||
PDEVOBJ_sizl(
|
||||
_In_ PPDEVOBJ ppdev,
|
||||
_Out_ PSIZEL psizl);
|
||||
|
||||
#endif /* !__WIN32K_PDEVOBJ_H */
|
||||
|
|
|
@ -11,6 +11,13 @@
|
|||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
||||
_Always_(_Post_satisfies_(return==iColor))
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlateTrivial(
|
||||
_In_ PEXLATEOBJ pexlo,
|
||||
_In_ ULONG iColor);
|
||||
|
||||
/** Globals *******************************************************************/
|
||||
|
||||
|
@ -31,6 +38,8 @@ static const BYTE gajXlate6to8[64] =
|
|||
|
||||
/** iXlate functions **********************************************************/
|
||||
|
||||
_Always_(_Post_satisfies_(return==iColor))
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlateTrivial(PEXLATEOBJ pexlo, ULONG iColor)
|
||||
|
@ -38,6 +47,7 @@ EXLATEOBJ_iXlateTrivial(PEXLATEOBJ pexlo, ULONG iColor)
|
|||
return iColor;
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlateToMono(PEXLATEOBJ pexlo, ULONG iColor)
|
||||
|
@ -45,6 +55,7 @@ EXLATEOBJ_iXlateToMono(PEXLATEOBJ pexlo, ULONG iColor)
|
|||
return (iColor == pexlo->xlo.pulXlate[0]);
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlateTable(PEXLATEOBJ pexlo, ULONG iColor)
|
||||
|
@ -53,6 +64,7 @@ EXLATEOBJ_iXlateTable(PEXLATEOBJ pexlo, ULONG iColor)
|
|||
return pexlo->xlo.pulXlate[iColor];
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlateRGBtoBGR(PEXLATEOBJ pxlo, ULONG iColor)
|
||||
|
@ -72,6 +84,7 @@ EXLATEOBJ_iXlateRGBtoBGR(PEXLATEOBJ pxlo, ULONG iColor)
|
|||
return iNewColor;
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlateRGBto555(PEXLATEOBJ pxlo, ULONG iColor)
|
||||
|
@ -93,6 +106,7 @@ EXLATEOBJ_iXlateRGBto555(PEXLATEOBJ pxlo, ULONG iColor)
|
|||
return iNewColor;
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlateBGRto555(PEXLATEOBJ pxlo, ULONG iColor)
|
||||
|
@ -114,6 +128,7 @@ EXLATEOBJ_iXlateBGRto555(PEXLATEOBJ pxlo, ULONG iColor)
|
|||
return iNewColor;
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlateRGBto565(PEXLATEOBJ pxlo, ULONG iColor)
|
||||
|
@ -135,6 +150,7 @@ EXLATEOBJ_iXlateRGBto565(PEXLATEOBJ pxlo, ULONG iColor)
|
|||
return iNewColor;
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlateBGRto565(PEXLATEOBJ pxlo, ULONG iColor)
|
||||
|
@ -156,6 +172,7 @@ EXLATEOBJ_iXlateBGRto565(PEXLATEOBJ pxlo, ULONG iColor)
|
|||
return iNewColor;
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlateRGBtoPal(PEXLATEOBJ pexlo, ULONG iColor)
|
||||
|
@ -163,6 +180,7 @@ EXLATEOBJ_iXlateRGBtoPal(PEXLATEOBJ pexlo, ULONG iColor)
|
|||
return PALETTE_ulGetNearestPaletteIndex(pexlo->ppalDst, iColor);
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlate555toRGB(PEXLATEOBJ pxlo, ULONG iColor)
|
||||
|
@ -183,6 +201,7 @@ EXLATEOBJ_iXlate555toRGB(PEXLATEOBJ pxlo, ULONG iColor)
|
|||
return iNewColor;
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlate555toBGR(PEXLATEOBJ pxlo, ULONG iColor)
|
||||
|
@ -203,6 +222,7 @@ EXLATEOBJ_iXlate555toBGR(PEXLATEOBJ pxlo, ULONG iColor)
|
|||
return iNewColor;
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlate555to565(PEXLATEOBJ pxlo, ULONG iColor)
|
||||
|
@ -223,6 +243,7 @@ EXLATEOBJ_iXlate555to565(PEXLATEOBJ pxlo, ULONG iColor)
|
|||
return iNewColor;
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlate555toPal(PEXLATEOBJ pexlo, ULONG iColor)
|
||||
|
@ -232,6 +253,7 @@ EXLATEOBJ_iXlate555toPal(PEXLATEOBJ pexlo, ULONG iColor)
|
|||
return PALETTE_ulGetNearestPaletteIndex(pexlo->ppalDst, iColor);
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlate565to555(PEXLATEOBJ pxlo, ULONG iColor)
|
||||
|
@ -248,6 +270,7 @@ EXLATEOBJ_iXlate565to555(PEXLATEOBJ pxlo, ULONG iColor)
|
|||
return iNewColor;
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlate565toRGB(PEXLATEOBJ pexlo, ULONG iColor)
|
||||
|
@ -268,6 +291,7 @@ EXLATEOBJ_iXlate565toRGB(PEXLATEOBJ pexlo, ULONG iColor)
|
|||
return iNewColor;
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlate565toBGR(PEXLATEOBJ pexlo, ULONG iColor)
|
||||
|
@ -288,6 +312,7 @@ EXLATEOBJ_iXlate565toBGR(PEXLATEOBJ pexlo, ULONG iColor)
|
|||
return iNewColor;
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlate565toPal(EXLATEOBJ *pexlo, ULONG iColor)
|
||||
|
@ -297,6 +322,7 @@ EXLATEOBJ_iXlate565toPal(EXLATEOBJ *pexlo, ULONG iColor)
|
|||
return PALETTE_ulGetNearestPaletteIndex(pexlo->ppalDst, iColor);
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlateShiftAndMask(PEXLATEOBJ pexlo, ULONG iColor)
|
||||
|
@ -310,6 +336,7 @@ EXLATEOBJ_iXlateShiftAndMask(PEXLATEOBJ pexlo, ULONG iColor)
|
|||
return iNewColor;
|
||||
}
|
||||
|
||||
_Function_class_(FN_XLATE)
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlateBitfieldsToPal(PEXLATEOBJ pexlo, ULONG iColor)
|
||||
|
|
|
@ -9,7 +9,12 @@
|
|||
|
||||
struct _EXLATEOBJ;
|
||||
|
||||
typedef ULONG (FASTCALL *PFN_XLATE)(struct _EXLATEOBJ *pexlo, ULONG iColor);
|
||||
_Function_class_(FN_XLATE)
|
||||
typedef
|
||||
ULONG
|
||||
(FASTCALL *PFN_XLATE)(
|
||||
_In_ struct _EXLATEOBJ *pexlo,
|
||||
_In_ ULONG iColor);
|
||||
|
||||
typedef struct _EXLATEOBJ
|
||||
{
|
||||
|
@ -38,23 +43,44 @@ typedef struct _EXLATEOBJ
|
|||
};
|
||||
} EXLATEOBJ, *PEXLATEOBJ;
|
||||
|
||||
extern EXLATEOBJ gexloTrivial;
|
||||
|
||||
_Notnull_
|
||||
PFN_XLATE
|
||||
FORCEINLINE
|
||||
XLATEOBJ_pfnXlate(XLATEOBJ *pxlo)
|
||||
XLATEOBJ_pfnXlate(
|
||||
_In_ XLATEOBJ *pxlo)
|
||||
{
|
||||
return ((PEXLATEOBJ)pxlo)->pfnXlate;
|
||||
}
|
||||
|
||||
extern EXLATEOBJ gexloTrivial;
|
||||
VOID
|
||||
NTAPI
|
||||
EXLATEOBJ_vInitialize(
|
||||
_Out_ PEXLATEOBJ pexlo,
|
||||
_In_ PPALETTE ppalSrc,
|
||||
_In_ PPALETTE ppalDst,
|
||||
_In_ COLORREF crSrcBackColor,
|
||||
_In_ COLORREF crDstBackColor,
|
||||
_In_ COLORREF crDstForeColor);
|
||||
|
||||
ULONG
|
||||
FASTCALL
|
||||
EXLATEOBJ_iXlateTrivial(PEXLATEOBJ pexlo, ULONG iColor);
|
||||
VOID
|
||||
NTAPI
|
||||
EXLATEOBJ_vInitXlateFromDCs(
|
||||
_Out_ PEXLATEOBJ pexlo,
|
||||
_In_ PDC pdcSrc,
|
||||
_In_ PDC pdcDst);
|
||||
|
||||
void
|
||||
DbgCmpXlate(XLATEOBJ *pxlo1, XLATEOBJ *pxlo2);
|
||||
VOID
|
||||
NTAPI
|
||||
EXLATEOBJ_vInitSrcMonoXlate(
|
||||
_Out_ PEXLATEOBJ pexlo,
|
||||
_In_ PPALETTE ppalDst,
|
||||
_In_ COLORREF crBackgroundClr,
|
||||
_In_ COLORREF crForegroundClr);
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
EXLATEOBJ_vCleanup(
|
||||
_Inout_ PEXLATEOBJ pexlo);
|
||||
|
||||
VOID NTAPI EXLATEOBJ_vInitialize(PEXLATEOBJ pexlo, PPALETTE ppalSrc, PPALETTE ppalDst, ULONG, ULONG, ULONG);
|
||||
VOID NTAPI EXLATEOBJ_vInitXlateFromDCs(PEXLATEOBJ pexlo, PDC pdcSrc, PDC pdcDst);
|
||||
VOID NTAPI EXLATEOBJ_vInitSrcMonoXlate(PEXLATEOBJ pexlo, PPALETTE ppalDst, ULONG Color0, ULONG Color1);
|
||||
VOID NTAPI EXLATEOBJ_vCleanup(PEXLATEOBJ pexlo);
|
||||
|
|
|
@ -142,57 +142,56 @@ BRUSH_Cleanup(PVOID ObjectBody)
|
|||
|
||||
INT
|
||||
FASTCALL
|
||||
BRUSH_GetObject(PBRUSH pbrush, INT Count, LPLOGBRUSH Buffer)
|
||||
BRUSH_GetObject(PBRUSH pbrush, INT cjSize, LPLOGBRUSH plogbrush)
|
||||
{
|
||||
if (Buffer == NULL) return sizeof(LOGBRUSH);
|
||||
if (Count == 0) return 0;
|
||||
/* Check if only size is requested */
|
||||
if (plogbrush == NULL) return sizeof(LOGBRUSH);
|
||||
|
||||
/* Check if size is ok */
|
||||
if (cjSize == 0) return 0;
|
||||
|
||||
/* Set colour */
|
||||
Buffer->lbColor = pbrush->BrushAttr.lbColor;
|
||||
plogbrush->lbColor = pbrush->BrushAttr.lbColor;
|
||||
|
||||
/* Set Hatch */
|
||||
if ((pbrush->flAttrs & BR_IS_HATCH)!=0)
|
||||
/* Default to 0 */
|
||||
plogbrush->lbHatch = 0;
|
||||
|
||||
/* Get the type of style */
|
||||
if (pbrush->flAttrs & BR_IS_SOLID)
|
||||
{
|
||||
/* FIXME: This is not the right value */
|
||||
Buffer->lbHatch = (LONG)pbrush->hbmPattern;
|
||||
plogbrush->lbStyle = BS_SOLID;
|
||||
}
|
||||
else if (pbrush->flAttrs & BR_IS_NULL)
|
||||
{
|
||||
plogbrush->lbStyle = BS_NULL; // BS_HOLLOW
|
||||
}
|
||||
else if (pbrush->flAttrs & BR_IS_HATCH)
|
||||
{
|
||||
plogbrush->lbStyle = BS_HATCHED;
|
||||
plogbrush->lbHatch = pbrush->ulStyle;
|
||||
}
|
||||
else if (pbrush->flAttrs & BR_IS_DIB)
|
||||
{
|
||||
plogbrush->lbStyle = BS_DIBPATTERN;
|
||||
plogbrush->lbHatch = (ULONG_PTR)pbrush->hbmClient;
|
||||
}
|
||||
else if (pbrush->flAttrs & BR_IS_BITMAP)
|
||||
{
|
||||
plogbrush->lbStyle = BS_PATTERN;
|
||||
}
|
||||
else
|
||||
{
|
||||
Buffer->lbHatch = 0;
|
||||
}
|
||||
|
||||
Buffer->lbStyle = 0;
|
||||
|
||||
/* Get the type of style */
|
||||
if ((pbrush->flAttrs & BR_IS_SOLID)!=0)
|
||||
{
|
||||
Buffer->lbStyle = BS_SOLID;
|
||||
}
|
||||
else if ((pbrush->flAttrs & BR_IS_NULL)!=0)
|
||||
{
|
||||
Buffer->lbStyle = BS_NULL; // BS_HOLLOW
|
||||
}
|
||||
else if ((pbrush->flAttrs & BR_IS_HATCH)!=0)
|
||||
{
|
||||
Buffer->lbStyle = BS_HATCHED;
|
||||
}
|
||||
else if ((pbrush->flAttrs & BR_IS_BITMAP)!=0)
|
||||
{
|
||||
Buffer->lbStyle = BS_PATTERN;
|
||||
}
|
||||
else if ((pbrush->flAttrs & BR_IS_DIB)!=0)
|
||||
{
|
||||
Buffer->lbStyle = BS_DIBPATTERN;
|
||||
plogbrush->lbStyle = 0; // ???
|
||||
}
|
||||
|
||||
/* FIXME
|
||||
else if ((pbrush->flAttrs & )!=0)
|
||||
else if (pbrush->flAttrs & )
|
||||
{
|
||||
Buffer->lbStyle = BS_INDEXED;
|
||||
plogbrush->lbStyle = BS_INDEXED;
|
||||
}
|
||||
else if ((pbrush->flAttrs & )!=0)
|
||||
else if (pbrush->flAttrs & )
|
||||
{
|
||||
Buffer->lbStyle = BS_DIBPATTERNPT;
|
||||
plogbrush->lbStyle = BS_DIBPATTERNPT;
|
||||
}
|
||||
*/
|
||||
|
||||
|
@ -245,6 +244,7 @@ IntGdiCreateDIBBrush(
|
|||
|
||||
pbrush->flAttrs |= BR_IS_BITMAP | BR_IS_DIB;
|
||||
pbrush->hbmPattern = hPattern;
|
||||
pbrush->hbmClient = (HBITMAP)PackedDIB;
|
||||
/* FIXME: Fill in the rest of fields!!! */
|
||||
|
||||
GreSetObjectOwner(hPattern, GDI_OBJ_HMGR_PUBLIC);
|
||||
|
|
|
@ -555,6 +555,11 @@ NEW_CLIPPING_UpdateGCRegion(PDC pDC)
|
|||
pDC->prgnRao = IntSysCreateRectpRgn(0,0,0,0);
|
||||
}
|
||||
|
||||
if (!pDC->prgnRao)
|
||||
{
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
if (pDC->dclevel.prgnMeta && pDC->dclevel.prgnClip)
|
||||
{
|
||||
IntGdiCombineRgn( pDC->prgnAPI,
|
||||
|
@ -585,7 +590,6 @@ NEW_CLIPPING_UpdateGCRegion(PDC pDC)
|
|||
pDC->prgnAPI,
|
||||
RGN_AND);
|
||||
|
||||
// FIXME: pDC->prgnRao may be NULL
|
||||
RtlCopyMemory(&pDC->erclClip,
|
||||
&pDC->prgnRao->rdh.rcBound,
|
||||
sizeof(RECTL));
|
||||
|
@ -599,8 +603,8 @@ NEW_CLIPPING_UpdateGCRegion(PDC pDC)
|
|||
// With pDC->co.pClipRgn->Buffer,
|
||||
// pDC->co.pClipRgn = pDC->prgnRao ? pDC->prgnRao : pDC->prgnVis;
|
||||
|
||||
co = IntEngCreateClipRegion( ((PROSRGNDATA)pDC->prgnRao)->rdh.nCount,
|
||||
((PROSRGNDATA)pDC->prgnRao)->Buffer,
|
||||
co = IntEngCreateClipRegion(pDC->prgnRao->rdh.nCount,
|
||||
pDC->prgnRao->Buffer,
|
||||
&pDC->erclClip);
|
||||
if (co)
|
||||
{
|
||||
|
|
|
@ -430,6 +430,7 @@ NtGdiTransformPoints(
|
|||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
/* Do not set last error */
|
||||
ret = 0;
|
||||
}
|
||||
_SEH2_END;
|
||||
|
||||
|
@ -1232,7 +1233,6 @@ NtGdiGetDCPoint(
|
|||
POINTL SafePoint;
|
||||
SIZE Size;
|
||||
PSIZEL pszlViewportExt;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
||||
if (!Point)
|
||||
{
|
||||
|
@ -1293,15 +1293,9 @@ NtGdiGetDCPoint(
|
|||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
Status = _SEH2_GetExceptionCode();
|
||||
}
|
||||
_SEH2_END;
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
Ret = FALSE;
|
||||
}
|
||||
_SEH2_END;
|
||||
}
|
||||
|
||||
DC_UnlockDc(pdc);
|
||||
|
|
|
@ -113,7 +113,7 @@ GreSetStretchBltMode(HDC hDC, int iStretchMode)
|
|||
|
||||
// Wine returns an error here. We set the default.
|
||||
if ((iStretchMode <= 0) || (iStretchMode > MAXSTRETCHBLTMODE)) iStretchMode = WHITEONBLACK;
|
||||
|
||||
|
||||
pdcattr->jStretchBltMode = iStretchMode;
|
||||
}
|
||||
return oSMode;
|
||||
|
@ -355,7 +355,8 @@ NtGdiGetDCDword(
|
|||
return Ret;
|
||||
}
|
||||
|
||||
BOOL _Success_(return != FALSE)
|
||||
_Success_(return != FALSE)
|
||||
BOOL
|
||||
APIENTRY
|
||||
NtGdiGetAndSetDCDword(
|
||||
_In_ HDC hdc,
|
||||
|
|
|
@ -867,7 +867,7 @@ GreGetDIBitsInternal(
|
|||
}
|
||||
|
||||
psurfDest = SURFACE_ShareLockSurface(hBmpDest);
|
||||
|
||||
|
||||
RECTL_vSetRect(&rcDest, 0, 0, ScanLines, psurf->SurfObj.sizlBitmap.cx);
|
||||
|
||||
srcPoint.x = 0;
|
||||
|
@ -1014,7 +1014,7 @@ NtGdiGetDIBitsInternal(
|
|||
_SEH2_TRY
|
||||
{
|
||||
/* Copy the data back */
|
||||
ProbeForWrite(pbmiUser, cjMaxInfo, 1);
|
||||
ProbeForWrite(pbmiUser, cjMaxInfo, 1);
|
||||
RtlCopyMemory(pbmiUser, pbmi, cjMaxInfo);
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
|
@ -1646,7 +1646,7 @@ cleanup:
|
|||
GreDeleteObject(res);
|
||||
res = 0;
|
||||
}
|
||||
|
||||
|
||||
if(ppalDIB)
|
||||
{
|
||||
PALETTE_ShareUnlockPalette(ppalDIB);
|
||||
|
@ -1862,23 +1862,23 @@ DIB_FreeConvertedBitmapInfo(BITMAPINFO* converted, BITMAPINFO* orig, DWORD usage
|
|||
BITMAPCOREINFO* pbmci;
|
||||
if(converted == orig)
|
||||
return;
|
||||
|
||||
|
||||
if(usage == -1)
|
||||
{
|
||||
/* Caller don't want any conversion */
|
||||
ExFreePoolWithTag(converted, TAG_DIB);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/* Perform inverse conversion */
|
||||
pbmci = (BITMAPCOREINFO*)orig;
|
||||
|
||||
|
||||
ASSERT(pbmci->bmciHeader.bcSize == sizeof(BITMAPCOREHEADER));
|
||||
pbmci->bmciHeader.bcBitCount = converted->bmiHeader.biBitCount;
|
||||
pbmci->bmciHeader.bcWidth = converted->bmiHeader.biWidth;
|
||||
pbmci->bmciHeader.bcHeight = converted->bmiHeader.biHeight;
|
||||
pbmci->bmciHeader.bcPlanes = converted->bmiHeader.biPlanes;
|
||||
|
||||
|
||||
if(pbmci->bmciHeader.bcBitCount <= 8)
|
||||
{
|
||||
UINT numColors = converted->bmiHeader.biClrUsed;
|
||||
|
|
|
@ -1237,6 +1237,11 @@ GDIOBJ_AllocObjWithHandle(ULONG ObjectType, ULONG cjSize)
|
|||
}
|
||||
|
||||
pobj = GDIOBJ_AllocateObject(objt, cjSize, fl);
|
||||
if (!pobj)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!GDIOBJ_hInsertObject(pobj, GDI_OBJ_HMGR_POWNED))
|
||||
{
|
||||
GDIOBJ_vFreeObject(pobj);
|
||||
|
|
|
@ -155,6 +155,8 @@ GdiPoolAllocate(
|
|||
/* Yes, remove it from the empty list */
|
||||
ple = RemoveHeadList(&pPool->leEmptyList);
|
||||
pSection = CONTAINING_RECORD(ple, GDI_POOL_SECTION, leInUseLink);
|
||||
pPool->cEmptySections--;
|
||||
ASSERT(pSection->cAllocCount == 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -166,13 +168,11 @@ GdiPoolAllocate(
|
|||
pvAlloc = NULL;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Insert it into the ready list */
|
||||
InsertHeadList(&pPool->leReadyList, &pSection->leReadyLink);
|
||||
}
|
||||
|
||||
/* Insert it into the in-use list */
|
||||
/* Insert it into the in-use and ready list */
|
||||
InsertHeadList(&pPool->leInUseList, &pSection->leInUseLink);
|
||||
InsertHeadList(&pPool->leReadyList, &pSection->leReadyLink);
|
||||
}
|
||||
|
||||
/* Find and set a single bit */
|
||||
|
@ -203,6 +203,7 @@ GdiPoolAllocate(
|
|||
|
||||
/* Increase alloc count */
|
||||
pSection->cAllocCount++;
|
||||
ASSERT(RtlNumberOfSetBits(&pSection->bitmap) == pSection->cAllocCount);
|
||||
DBG_LOGEVENT(&pPool->slhLog, EVENT_ALLOCATE, pvAlloc);
|
||||
|
||||
/* Check if section is now busy */
|
||||
|
@ -260,6 +261,7 @@ GdiPoolFree(
|
|||
|
||||
/* Decrease allocation count */
|
||||
pSection->cAllocCount--;
|
||||
ASSERT(RtlNumberOfSetBits(&pSection->bitmap) == pSection->cAllocCount);
|
||||
DBG_LOGEVENT(&pPool->slhLog, EVENT_FREE, pvAlloc);
|
||||
|
||||
/* Check if the section got valid now */
|
||||
|
@ -275,7 +277,7 @@ GdiPoolFree(
|
|||
RemoveEntryList(&pSection->leInUseLink);
|
||||
RemoveEntryList(&pSection->leReadyLink);
|
||||
|
||||
if (pPool->cEmptySections > 1)
|
||||
if (pPool->cEmptySections >= 1)
|
||||
{
|
||||
/* Delete the section */
|
||||
GdiPoolDeleteSection(pPool, pSection);
|
||||
|
|
|
@ -540,7 +540,8 @@ NtGdiPolyDraw(
|
|||
/*
|
||||
* @implemented
|
||||
*/
|
||||
BOOL _Success_(return != FALSE)
|
||||
_Success_(return != FALSE)
|
||||
BOOL
|
||||
APIENTRY
|
||||
NtGdiMoveTo(
|
||||
IN HDC hdc,
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
*/
|
||||
|
||||
#include <win32k.h>
|
||||
#include <suppress.h>
|
||||
|
||||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
@ -1166,11 +1167,11 @@ PATH_PathToRegion ( PPATH pPath, INT nPolyFillMode, HRGN *pHrgn )
|
|||
if((pPath->pFlags[i] & ~PT_CLOSEFIGURE) == PT_MOVETO)
|
||||
{
|
||||
iStroke++;
|
||||
_PRAGMA_WARNING_SUPPRESS(6386)
|
||||
_PRAGMA_WARNING_SUPPRESS(__WARNING_WRITE_OVERRUN)
|
||||
pNumPointsInStroke[iStroke]=0;
|
||||
}
|
||||
|
||||
_PRAGMA_WARNING_SUPPRESS(6385)
|
||||
_PRAGMA_WARNING_SUPPRESS(__WARNING_READ_OVERRUN)
|
||||
pNumPointsInStroke[iStroke]++;
|
||||
}
|
||||
|
||||
|
@ -2584,7 +2585,7 @@ NtGdiSetMiterLimit(
|
|||
{
|
||||
DC *pDc;
|
||||
gxf_long worker, worker1;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
BOOL bResult = TRUE;
|
||||
|
||||
if (!(pDc = DC_LockDc(hdc)))
|
||||
{
|
||||
|
@ -2600,26 +2601,19 @@ NtGdiSetMiterLimit(
|
|||
{
|
||||
_SEH2_TRY
|
||||
{
|
||||
ProbeForWrite(pdwOut,
|
||||
sizeof(DWORD),
|
||||
1);
|
||||
ProbeForWrite(pdwOut, sizeof(DWORD), 1);
|
||||
*pdwOut = worker1.l;
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
Status = _SEH2_GetExceptionCode();
|
||||
SetLastNtError(_SEH2_GetExceptionCode());
|
||||
bResult = FALSE;
|
||||
}
|
||||
_SEH2_END;
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
DC_UnlockDc(pDc);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
DC_UnlockDc(pDc);
|
||||
return TRUE;
|
||||
return bResult;
|
||||
}
|
||||
|
||||
BOOL
|
||||
|
|
|
@ -114,6 +114,7 @@ SOFTWARE.
|
|||
*/
|
||||
|
||||
#include <win32k.h>
|
||||
#include <suppress.h>
|
||||
|
||||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
@ -1841,7 +1842,7 @@ REGION_CreateSimpleFrameRgn(
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
_PRAGMA_WARNING_SUPPRESS(28199) // rc is initialized
|
||||
_PRAGMA_WARNING_SUPPRESS(__WARNING_MAYBE_UNINIT_VAR) // rc is initialized
|
||||
COPY_RECTS(rgn->Buffer, rc, rgn->rdh.nCount);
|
||||
}
|
||||
}
|
||||
|
@ -3987,51 +3988,60 @@ NtGdiUnionRectWithRgn(
|
|||
*
|
||||
* If the function fails, the return value is zero."
|
||||
*/
|
||||
DWORD APIENTRY
|
||||
_Success_(return!=0)
|
||||
ULONG
|
||||
APIENTRY
|
||||
NtGdiGetRegionData(
|
||||
HRGN hrgn,
|
||||
DWORD count,
|
||||
LPRGNDATA rgndata
|
||||
)
|
||||
_In_ HRGN hrgn,
|
||||
_In_ ULONG cjBuffer,
|
||||
_Out_opt_bytecap_(cjBuffer) LPRGNDATA lpRgnData)
|
||||
{
|
||||
DWORD size;
|
||||
PROSRGNDATA obj = RGNOBJAPI_Lock(hrgn, NULL);
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
ULONG cjRects, cjSize;
|
||||
PREGION prgn;
|
||||
|
||||
if (!obj)
|
||||
return 0;
|
||||
|
||||
size = obj->rdh.nCount * sizeof(RECT);
|
||||
if (count < (size + sizeof(RGNDATAHEADER)) || rgndata == NULL)
|
||||
/* Lock the region */
|
||||
prgn = RGNOBJAPI_Lock(hrgn, NULL);
|
||||
if (!prgn)
|
||||
{
|
||||
RGNOBJAPI_Unlock(obj);
|
||||
if (rgndata) /* Buffer is too small, signal it by return 0 */
|
||||
return 0;
|
||||
else /* User requested buffer size with rgndata NULL */
|
||||
return size + sizeof(RGNDATAHEADER);
|
||||
}
|
||||
|
||||
_SEH2_TRY
|
||||
{
|
||||
ProbeForWrite(rgndata, count, 1);
|
||||
RtlCopyMemory(rgndata, &obj->rdh, sizeof(RGNDATAHEADER));
|
||||
RtlCopyMemory(rgndata->Buffer, obj->Buffer, size);
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
Status = _SEH2_GetExceptionCode();
|
||||
}
|
||||
_SEH2_END;
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
RGNOBJAPI_Unlock(obj);
|
||||
EngSetLastError(ERROR_INVALID_HANDLE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
RGNOBJAPI_Unlock(obj);
|
||||
return size + sizeof(RGNDATAHEADER);
|
||||
/* Calculate the region sizes */
|
||||
cjRects = prgn->rdh.nCount * sizeof(RECT);
|
||||
cjSize = cjRects + sizeof(RGNDATAHEADER);
|
||||
|
||||
/* Check if region data is requested */
|
||||
if (lpRgnData)
|
||||
{
|
||||
/* Check if the buffer is large enough */
|
||||
if (cjBuffer >= cjSize)
|
||||
{
|
||||
/* Probe the buffer and copy the data */
|
||||
_SEH2_TRY
|
||||
{
|
||||
ProbeForWrite(lpRgnData, cjSize, sizeof(ULONG));
|
||||
RtlCopyMemory(lpRgnData, &prgn->rdh, sizeof(RGNDATAHEADER));
|
||||
RtlCopyMemory(lpRgnData->Buffer, prgn->Buffer, cjRects);
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
EngSetLastError(ERROR_INVALID_PARAMETER);
|
||||
cjSize = 0;
|
||||
}
|
||||
_SEH2_END;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Buffer is too small */
|
||||
EngSetLastError(ERROR_INVALID_PARAMETER);
|
||||
cjSize = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Unlock the region and return the size */
|
||||
RGNOBJAPI_Unlock(prgn);
|
||||
return cjSize;
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -62,40 +62,39 @@ static LOGPEN NullPen =
|
|||
{ PS_NULL, { 0, 0 }, 0 };
|
||||
|
||||
static LOGFONTW OEMFixedFont =
|
||||
{ 11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, OEM_CHARSET,
|
||||
0, 0, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, L"Courier New"
|
||||
}; // Bitstream Vera Sans Mono
|
||||
{ 12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, OEM_CHARSET,
|
||||
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE | FIXED_PITCH, L"Terminal"
|
||||
};
|
||||
|
||||
static LOGFONTW AnsiFixedFont =
|
||||
{ 11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
||||
0, 0, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, L"Courier New"
|
||||
}; // Bitstream Vera Sans Mono
|
||||
{ 14, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
||||
OUT_DEFAULT_PRECIS, /*CLIP_DEFAULT_PRECIS*/ CLIP_STROKE_PRECIS, /*DEFAULT_QUALITY*/ PROOF_QUALITY, FF_DONTCARE | FIXED_PITCH, L"Courier"
|
||||
};
|
||||
|
||||
static LOGFONTW AnsiVarFont =
|
||||
{ 11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
||||
0, 0, DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS, L"MS Sans Serif"
|
||||
OUT_DEFAULT_PRECIS, /*CLIP_DEFAULT_PRECIS*/ CLIP_STROKE_PRECIS, /*DEFAULT_QUALITY*/ PROOF_QUALITY, FF_DONTCARE | VARIABLE_PITCH, L"MS Sans Serif"
|
||||
};
|
||||
|
||||
static LOGFONTW SystemFont =
|
||||
{ 11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
||||
0, 0, DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS, L"Courier New"
|
||||
}; // Bitstream Vera Sans
|
||||
{ 12, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
||||
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE | VARIABLE_PITCH, L"System"
|
||||
};
|
||||
|
||||
static LOGFONTW DeviceDefaultFont =
|
||||
{ 11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
||||
0, 0, DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS, L"MS Sans Serif"
|
||||
}; // Bitstream Vera Sans
|
||||
{ 12, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
||||
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE | VARIABLE_PITCH, L"System"
|
||||
};
|
||||
|
||||
static LOGFONTW SystemFixedFont =
|
||||
{ 11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
||||
0, 0, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, L"Courier New"
|
||||
}; // Bitstream Vera Sans Mono
|
||||
{ 16, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
||||
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE | FIXED_PITCH, L"Fixedsys"
|
||||
};
|
||||
|
||||
/* FIXME: Is this correct? */
|
||||
static LOGFONTW DefaultGuiFont =
|
||||
{ 11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
||||
0, 0, DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS, L"MS Sans Serif"
|
||||
}; // Bitstream Vera Sans
|
||||
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, /*DEFAULT_QUALITY*/ PROOF_QUALITY, VARIABLE_PITCH | FF_SWISS, L"MS Shell Dlg"
|
||||
};
|
||||
|
||||
HGDIOBJ StockObjects[NB_STOCK_OBJECTS];
|
||||
|
||||
|
|
|
@ -1893,11 +1893,13 @@ NTAPI
|
|||
NtUserGetAsyncKeyState(
|
||||
INT Key);
|
||||
|
||||
DWORD
|
||||
NTAPI
|
||||
_Success_(return!=0)
|
||||
_At_(pustrName->Buffer, _Out_z_bytecap_post_bytecount_(pustrName->MaximumLength, return*2+2))
|
||||
ULONG
|
||||
APIENTRY
|
||||
NtUserGetAtomName(
|
||||
ATOM nAtom,
|
||||
PUNICODE_STRING pBuffer);
|
||||
_In_ ATOM atom,
|
||||
_Inout_ PUNICODE_STRING pustrName);
|
||||
|
||||
UINT
|
||||
NTAPI
|
||||
|
@ -2024,13 +2026,14 @@ NtUserGetGUIThreadInfo(
|
|||
DWORD idThread,
|
||||
LPGUITHREADINFO lpgui);
|
||||
|
||||
_Success_(return!=FALSE)
|
||||
BOOL
|
||||
NTAPI
|
||||
NtUserGetIconInfo(
|
||||
_In_ HANDLE hCurIcon,
|
||||
_Out_opt_ PICONINFO IconInfo,
|
||||
_Out_opt_ PUNICODE_STRING lpInstName,
|
||||
_Out_opt_ PUNICODE_STRING lpResName,
|
||||
_Inout_opt_ PUNICODE_STRING lpInstName,
|
||||
_Inout_opt_ PUNICODE_STRING lpResName,
|
||||
_Out_opt_ LPDWORD pbpp,
|
||||
_In_ BOOL bInternal);
|
||||
|
||||
|
@ -2782,7 +2785,7 @@ typedef struct _tagFINDEXISTINGCURICONPARAM
|
|||
LONG cx;
|
||||
LONG cy;
|
||||
} FINDEXISTINGCURICONPARAM;
|
||||
|
||||
|
||||
HICON
|
||||
NTAPI
|
||||
NtUserFindExistingCursorIcon(
|
||||
|
@ -2799,7 +2802,7 @@ NtUserSetCursorIconData(
|
|||
HMODULE hModule,
|
||||
HRSRC hRsrc,
|
||||
HRSRC hGroupRsrc);
|
||||
|
||||
|
||||
HICON
|
||||
NTAPI
|
||||
NtUserFindExistingCursorIcon(
|
||||
|
|
|
@ -125,7 +125,7 @@ _Must_inspect_result_
|
|||
NTSTATUS
|
||||
NTAPI
|
||||
ProbeAndCaptureUnicodeStringOrAtom(
|
||||
_Out_ PUNICODE_STRING pustrOut,
|
||||
_Out_ _When_(return>=0, _At_(pustrOut->Buffer, _Post_ _Notnull_)) PUNICODE_STRING pustrOut,
|
||||
__in_data_source(USER_MODE) _In_ PUNICODE_STRING pustrUnsafe)
|
||||
{
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
|
|
@ -63,7 +63,7 @@ _Must_inspect_result_
|
|||
NTSTATUS
|
||||
NTAPI
|
||||
ProbeAndCaptureUnicodeStringOrAtom(
|
||||
_Out_ PUNICODE_STRING pustrOut,
|
||||
_Out_ _When_(return>=0, _At_(pustrOut->Buffer, _Post_ _Notnull_)) PUNICODE_STRING pustrOut,
|
||||
__in_data_source(USER_MODE) _In_ PUNICODE_STRING pustrUnsafe);
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -240,7 +240,7 @@ IntDestroyCurIconObject(PCURICON_OBJECT CurIcon, PPROCESSINFO ppi)
|
|||
HBITMAP bmpMask, bmpColor;
|
||||
BOOLEAN Ret, bListEmpty, bFound = FALSE;
|
||||
PCURICON_PROCESS Current = NULL;
|
||||
|
||||
|
||||
/* For handles created without any data (error handling) */
|
||||
if(IsListEmpty(&CurIcon->ProcessList))
|
||||
goto emptyList;
|
||||
|
@ -256,7 +256,7 @@ IntDestroyCurIconObject(PCURICON_OBJECT CurIcon, PPROCESSINFO ppi)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(!bFound)
|
||||
{
|
||||
/* This object doesn't belong to this process */
|
||||
|
@ -386,6 +386,18 @@ NtUserGetIconInfo(
|
|||
ProbeForWrite(IconInfo, sizeof(ICONINFO), 1);
|
||||
RtlCopyMemory(IconInfo, &ii, sizeof(ICONINFO));
|
||||
|
||||
/// @todo Implement support for lpInstName
|
||||
if (lpInstName)
|
||||
{
|
||||
RtlInitEmptyUnicodeString(lpInstName, NULL, 0);
|
||||
}
|
||||
|
||||
/// @todo Implement support for lpResName
|
||||
if (lpResName)
|
||||
{
|
||||
RtlInitEmptyUnicodeString(lpResName, NULL, 0);
|
||||
}
|
||||
|
||||
if (pbpp)
|
||||
{
|
||||
ProbeForWrite(pbpp, sizeof(DWORD), 1);
|
||||
|
@ -1049,7 +1061,7 @@ UserDrawIconEx(
|
|||
RECTL rcDest, rcSrc;
|
||||
CLIPOBJ* pdcClipObj = NULL;
|
||||
EXLATEOBJ exlo;
|
||||
|
||||
|
||||
/* Stupid case */
|
||||
if((diFlags & DI_NORMAL) == 0)
|
||||
{
|
||||
|
@ -1059,12 +1071,12 @@ UserDrawIconEx(
|
|||
|
||||
hbmMask = pIcon->IconInfo.hbmMask;
|
||||
hbmColor = pIcon->IconInfo.hbmColor;
|
||||
|
||||
|
||||
if (istepIfAniCur)
|
||||
ERR("NtUserDrawIconEx: istepIfAniCur is not supported!\n");
|
||||
|
||||
|
||||
/*
|
||||
* Get our objects.
|
||||
* Get our objects.
|
||||
* Shared locks are enough, we are only reading those bitmaps
|
||||
*/
|
||||
psurfMask = SURFACE_ShareLockSurface(hbmMask);
|
||||
|
@ -1073,7 +1085,7 @@ UserDrawIconEx(
|
|||
ERR("Unable to lock the mask surface.\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/* Color bitmap is not mandatory */
|
||||
if(hbmColor == NULL)
|
||||
{
|
||||
|
@ -1087,7 +1099,7 @@ UserDrawIconEx(
|
|||
SURFACE_ShareUnlockSurface(psurfMask);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/* Set source rect */
|
||||
RECTL_vSetRect(&rcSrc, 0, 0, pIcon->Size.cx, pIcon->Size.cy);
|
||||
|
||||
|
@ -1119,17 +1131,17 @@ UserDrawIconEx(
|
|||
if (!cxWidth)
|
||||
{
|
||||
if(diFlags & DI_DEFAULTSIZE)
|
||||
cxWidth = pIcon->IconInfo.fIcon ?
|
||||
cxWidth = pIcon->IconInfo.fIcon ?
|
||||
UserGetSystemMetrics(SM_CXICON) : UserGetSystemMetrics(SM_CXCURSOR);
|
||||
else
|
||||
cxWidth = pIcon->Size.cx;
|
||||
}
|
||||
|
||||
|
||||
/* Fix height parameter, if needed */
|
||||
if (!cyHeight)
|
||||
{
|
||||
if(diFlags & DI_DEFAULTSIZE)
|
||||
cyHeight = pIcon->IconInfo.fIcon ?
|
||||
cyHeight = pIcon->IconInfo.fIcon ?
|
||||
UserGetSystemMetrics(SM_CYICON) : UserGetSystemMetrics(SM_CYCURSOR);
|
||||
else
|
||||
cyHeight = pIcon->Size.cy;
|
||||
|
@ -1143,9 +1155,9 @@ UserDrawIconEx(
|
|||
/* Yes: Allocate and paint the offscreen surface */
|
||||
EBRUSHOBJ eboFill;
|
||||
PBRUSH pbrush = BRUSH_ShareLockBrush(hbrFlickerFreeDraw);
|
||||
|
||||
|
||||
TRACE("Performing off-screen rendering.\n");
|
||||
|
||||
|
||||
if(!pbrush)
|
||||
{
|
||||
ERR("Failed to get brush object.\n");
|
||||
|
@ -1171,11 +1183,11 @@ UserDrawIconEx(
|
|||
BRUSH_ShareUnlockBrush(pbrush);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/* Paint the brush */
|
||||
EBRUSHOBJ_vInit(&eboFill, pbrush, psurfOffScreen, 0x00FFFFFF, 0, NULL);
|
||||
RECTL_vSetRect(&rcDest, 0, 0, cxWidth, cyHeight);
|
||||
|
||||
|
||||
Ret = IntEngBitBlt(&psurfOffScreen->SurfObj,
|
||||
NULL,
|
||||
NULL,
|
||||
|
@ -1191,7 +1203,7 @@ UserDrawIconEx(
|
|||
/* Clean up everything */
|
||||
EBRUSHOBJ_vCleanup(&eboFill);
|
||||
BRUSH_ShareUnlockBrush(pbrush);
|
||||
|
||||
|
||||
if(!Ret)
|
||||
{
|
||||
ERR("Failed to paint the off-screen surface.\n");
|
||||
|
@ -1200,7 +1212,7 @@ UserDrawIconEx(
|
|||
GDIOBJ_vDeleteObject(&psurfOffScreen->BaseObject);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/* We now have our destination surface */
|
||||
psurfDest = psurfOffScreen;
|
||||
}
|
||||
|
@ -1208,7 +1220,7 @@ UserDrawIconEx(
|
|||
{
|
||||
/* We directly draw to the DC */
|
||||
TRACE("Performing on screen rendering.\n");
|
||||
|
||||
|
||||
psurfOffScreen = NULL;
|
||||
pdc = DC_LockDc(hDc);
|
||||
if(!pdc)
|
||||
|
@ -1222,16 +1234,16 @@ UserDrawIconEx(
|
|||
RECTL_vSetRect(&rcDest, xLeft, yTop, xLeft + cxWidth, yTop + cyHeight);
|
||||
IntLPtoDP(pdc, (LPPOINT)&rcDest, 2);
|
||||
RECTL_vOffsetRect(&rcDest, pdc->ptlDCOrig.x, pdc->ptlDCOrig.y);
|
||||
|
||||
|
||||
/* Prepare the underlying surface */
|
||||
DC_vPrepareDCsForBlit(pdc, rcDest, NULL, rcDest);
|
||||
|
||||
|
||||
/* Get the clip object */
|
||||
pdcClipObj = pdc->rosdc.CombinedClip;
|
||||
|
||||
|
||||
/* We now have our destination surface and rectangle */
|
||||
psurfDest = pdc->dclevel.pSurface;
|
||||
|
||||
|
||||
if(psurfDest == NULL)
|
||||
{
|
||||
/* Empty DC */
|
||||
|
@ -1281,10 +1293,10 @@ UserDrawIconEx(
|
|||
ptr += 4;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Initialize color translation object */
|
||||
EXLATEOBJ_vInitialize(&exlo, psurf->ppal, psurfDest->ppal, 0xFFFFFFFF, 0xFFFFFFFF, 0);
|
||||
|
||||
|
||||
/* Now do it */
|
||||
Ret = IntEngAlphaBlend(&psurfDest->SurfObj,
|
||||
&psurf->SurfObj,
|
||||
|
@ -1293,9 +1305,9 @@ UserDrawIconEx(
|
|||
&rcDest,
|
||||
&rcSrc,
|
||||
&blendobj);
|
||||
|
||||
|
||||
EXLATEOBJ_vCleanup(&exlo);
|
||||
|
||||
|
||||
CleanupAlpha:
|
||||
if(psurf) SURFACE_ShareUnlockSurface(psurf);
|
||||
if(hsurfCopy) NtGdiDeleteObjectApp(hsurfCopy);
|
||||
|
@ -1306,9 +1318,9 @@ UserDrawIconEx(
|
|||
if (diFlags & DI_MASK)
|
||||
{
|
||||
DWORD rop4 = (diFlags & DI_IMAGE) ? ROP4_SRCAND : ROP4_SRCCOPY;
|
||||
|
||||
|
||||
EXLATEOBJ_vInitSrcMonoXlate(&exlo, psurfDest->ppal, 0x00FFFFFF, 0);
|
||||
|
||||
|
||||
Ret = IntEngStretchBlt(&psurfDest->SurfObj,
|
||||
&psurfMask->SurfObj,
|
||||
NULL,
|
||||
|
@ -1321,7 +1333,7 @@ UserDrawIconEx(
|
|||
NULL,
|
||||
NULL,
|
||||
rop4);
|
||||
|
||||
|
||||
EXLATEOBJ_vCleanup(&exlo);
|
||||
|
||||
if(!Ret)
|
||||
|
@ -1336,9 +1348,9 @@ UserDrawIconEx(
|
|||
if (psurfColor)
|
||||
{
|
||||
DWORD rop4 = (diFlags & DI_MASK) ? ROP4_SRCINVERT : ROP4_SRCCOPY ;
|
||||
|
||||
|
||||
EXLATEOBJ_vInitialize(&exlo, psurfColor->ppal, psurfDest->ppal, 0x00FFFFFF, 0x00FFFFFF, 0);
|
||||
|
||||
|
||||
Ret = IntEngStretchBlt(&psurfDest->SurfObj,
|
||||
&psurfColor->SurfObj,
|
||||
NULL,
|
||||
|
@ -1351,7 +1363,7 @@ UserDrawIconEx(
|
|||
NULL,
|
||||
NULL,
|
||||
rop4);
|
||||
|
||||
|
||||
EXLATEOBJ_vCleanup(&exlo);
|
||||
|
||||
if(!Ret)
|
||||
|
@ -1365,9 +1377,9 @@ UserDrawIconEx(
|
|||
/* Mask bitmap holds the information in its bottom half */
|
||||
DWORD rop4 = (diFlags & DI_MASK) ? ROP4_SRCINVERT : ROP4_SRCCOPY;
|
||||
RECTL_vOffsetRect(&rcSrc, 0, pIcon->Size.cy);
|
||||
|
||||
|
||||
EXLATEOBJ_vInitSrcMonoXlate(&exlo, psurfDest->ppal, 0x00FFFFFF, 0);
|
||||
|
||||
|
||||
Ret = IntEngStretchBlt(&psurfDest->SurfObj,
|
||||
&psurfMask->SurfObj,
|
||||
NULL,
|
||||
|
@ -1380,7 +1392,7 @@ UserDrawIconEx(
|
|||
NULL,
|
||||
NULL,
|
||||
rop4);
|
||||
|
||||
|
||||
EXLATEOBJ_vCleanup(&exlo);
|
||||
|
||||
if(!Ret)
|
||||
|
@ -1407,13 +1419,13 @@ done:
|
|||
RECTL_vSetRect(&rcDest, xLeft, yTop, xLeft + cxWidth, yTop + cyHeight);
|
||||
IntLPtoDP(pdc, (LPPOINT)&rcDest, 2);
|
||||
RECTL_vOffsetRect(&rcDest, pdc->ptlDCOrig.x, pdc->ptlDCOrig.y);
|
||||
|
||||
|
||||
/* Prepare the underlying surface */
|
||||
DC_vPrepareDCsForBlit(pdc, rcDest, NULL, rcDest);
|
||||
|
||||
|
||||
/* Get the clip object */
|
||||
pdcClipObj = pdc->rosdc.CombinedClip;
|
||||
|
||||
|
||||
/* We now have our destination surface and rectangle */
|
||||
psurfDest = pdc->dclevel.pSurface;
|
||||
if(!psurfDest)
|
||||
|
@ -1422,10 +1434,10 @@ done:
|
|||
DC_UnlockDc(pdc);
|
||||
goto Cleanup2;
|
||||
}
|
||||
|
||||
|
||||
/* Color translation */
|
||||
EXLATEOBJ_vInitialize(&exlo, psurfOffScreen->ppal, psurfDest->ppal, 0x00FFFFFF, 0x00FFFFFF, 0);
|
||||
|
||||
|
||||
/* Blt it! */
|
||||
Ret = IntEngBitBlt(&psurfDest->SurfObj,
|
||||
&psurfOffScreen->SurfObj,
|
||||
|
@ -1438,7 +1450,7 @@ done:
|
|||
NULL,
|
||||
NULL,
|
||||
ROP4_SRCCOPY);
|
||||
|
||||
|
||||
EXLATEOBJ_vCleanup(&exlo);
|
||||
}
|
||||
Cleanup:
|
||||
|
@ -1447,12 +1459,12 @@ Cleanup:
|
|||
DC_vFinishBlit(pdc, NULL);
|
||||
DC_UnlockDc(pdc);
|
||||
}
|
||||
|
||||
|
||||
Cleanup2:
|
||||
/* Delete off screen rendering surface */
|
||||
if(psurfOffScreen)
|
||||
GDIOBJ_vDeleteObject(&psurfOffScreen->BaseObject);
|
||||
|
||||
|
||||
/* Unlock other surfaces */
|
||||
SURFACE_ShareUnlockSurface(psurfMask);
|
||||
if(psurfColor) SURFACE_ShareUnlockSurface(psurfColor);
|
||||
|
|
|
@ -65,7 +65,9 @@ IntDesktopObjectParse(IN PVOID ParseObject,
|
|||
/* Get the current desktop */
|
||||
Desktop = CONTAINING_RECORD(NextEntry, DESKTOP, ListEntry);
|
||||
|
||||
/// @todo Don't mess around with the object headers!
|
||||
/* Get its name */
|
||||
_PRAGMA_WARNING_SUPPRESS(__WARNING_DEREF_NULL_PTR)
|
||||
DesktopName = GET_DESKTOP_NAME(Desktop);
|
||||
if (DesktopName)
|
||||
{
|
||||
|
@ -971,7 +973,7 @@ IntPaintDesktop(HDC hDC)
|
|||
}
|
||||
else
|
||||
{
|
||||
/* Find the upper left corner, can be negtive if the bitmap is bigger then the screen */
|
||||
/* Find the upper left corner, can be negative if the bitmap is bigger then the screen */
|
||||
x = (sz.cx / 2) - (gspv.cxWallpaper / 2);
|
||||
y = (sz.cy / 2) - (gspv.cyWallpaper / 2);
|
||||
}
|
||||
|
@ -985,14 +987,14 @@ IntPaintDesktop(HDC hDC)
|
|||
if (x > 0 || y > 0)
|
||||
{
|
||||
/* FIXME: Clip out the bitmap
|
||||
can be replaced with "NtGdiPatBlt(hDC, x, y, WinSta->cxWallpaper, WinSta->cyWallpaper, PATCOPY | DSTINVERT);"
|
||||
once we support DSTINVERT */
|
||||
can be replaced with "NtGdiPatBlt(hDC, x, y, WinSta->cxWallpaper, WinSta->cyWallpaper, PATCOPY | DSTINVERT);"
|
||||
once we support DSTINVERT */
|
||||
PreviousBrush = NtGdiSelectBrush(hDC, DesktopBrush);
|
||||
NtGdiPatBlt(hDC, Rect.left, Rect.top, Rect.right, Rect.bottom, PATCOPY);
|
||||
NtGdiSelectBrush(hDC, PreviousBrush);
|
||||
}
|
||||
|
||||
/*Do not fill the background after it is painted no matter the size of the picture */
|
||||
/* Do not fill the background after it is painted no matter the size of the picture */
|
||||
doPatBlt = FALSE;
|
||||
|
||||
hOldBitmap = NtGdiSelectBitmap(hWallpaperDC, gspv.hbmWallpaper);
|
||||
|
@ -1001,17 +1003,17 @@ IntPaintDesktop(HDC hDC)
|
|||
{
|
||||
if(Rect.right && Rect.bottom)
|
||||
NtGdiStretchBlt(hDC,
|
||||
x,
|
||||
y,
|
||||
sz.cx,
|
||||
sz.cy,
|
||||
hWallpaperDC,
|
||||
0,
|
||||
0,
|
||||
gspv.cxWallpaper,
|
||||
gspv.cyWallpaper,
|
||||
SRCCOPY,
|
||||
0);
|
||||
x,
|
||||
y,
|
||||
sz.cx,
|
||||
sz.cy,
|
||||
hWallpaperDC,
|
||||
0,
|
||||
0,
|
||||
gspv.cxWallpaper,
|
||||
gspv.cyWallpaper,
|
||||
SRCCOPY,
|
||||
0);
|
||||
|
||||
}
|
||||
else if (gspv.WallpaperMode == wmTile)
|
||||
|
@ -1071,7 +1073,7 @@ IntPaintDesktop(HDC hDC)
|
|||
* Display system version on the desktop background
|
||||
*/
|
||||
|
||||
if (g_PaintDesktopVersion||UserGetSystemMetrics(SM_CLEANBOOT))
|
||||
if (g_PaintDesktopVersion || UserGetSystemMetrics(SM_CLEANBOOT))
|
||||
{
|
||||
static WCHAR s_wszVersion[256] = {0};
|
||||
RECTL rect;
|
||||
|
@ -1099,24 +1101,26 @@ IntPaintDesktop(HDC hDC)
|
|||
|
||||
if(!UserGetSystemMetrics(SM_CLEANBOOT))
|
||||
{
|
||||
GreExtTextOutW(hDC, rect.right-16, rect.bottom-48, 0, NULL, s_wszVersion, len, NULL, 0);
|
||||
GreExtTextOutW(hDC, rect.right - 16, rect.bottom - 48, 0, NULL, s_wszVersion, len, NULL, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Safe Mode */
|
||||
|
||||
/* Version information text in top center */
|
||||
IntGdiSetTextAlign(hDC, TA_CENTER|TA_TOP);
|
||||
GreExtTextOutW(hDC, (rect.right+rect.left)/2, rect.top, 0, NULL, s_wszVersion, len, NULL, 0);
|
||||
IntGdiSetTextAlign(hDC, TA_CENTER | TA_TOP);
|
||||
GreExtTextOutW(hDC, (rect.right + rect.left)/2, rect.top + 3, 0, NULL, s_wszVersion, len, NULL, 0);
|
||||
|
||||
/* Safe Mode text in corners */
|
||||
len = wcslen(s_wszSafeMode);
|
||||
IntGdiSetTextAlign(hDC, TA_RIGHT|TA_TOP);
|
||||
GreExtTextOutW(hDC, rect.right, rect.top, 0, NULL, s_wszSafeMode, len, NULL, 0);
|
||||
IntGdiSetTextAlign(hDC, TA_RIGHT|TA_BASELINE);
|
||||
GreExtTextOutW(hDC, rect.right, rect.bottom, 0, NULL, s_wszSafeMode, len, NULL, 0);
|
||||
IntGdiSetTextAlign(hDC, TA_LEFT|TA_TOP);
|
||||
GreExtTextOutW(hDC, rect.left, rect.top, 0, NULL, s_wszSafeMode, len, NULL, 0);
|
||||
IntGdiSetTextAlign(hDC, TA_LEFT|TA_BASELINE);
|
||||
GreExtTextOutW(hDC, rect.left, rect.bottom, 0, NULL, s_wszSafeMode, len, NULL, 0);
|
||||
IntGdiSetTextAlign(hDC, TA_LEFT | TA_TOP);
|
||||
GreExtTextOutW(hDC, rect.left, rect.top + 3, 0, NULL, s_wszSafeMode, len, NULL, 0);
|
||||
IntGdiSetTextAlign(hDC, TA_RIGHT | TA_TOP);
|
||||
GreExtTextOutW(hDC, rect.right, rect.top + 3, 0, NULL, s_wszSafeMode, len, NULL, 0);
|
||||
IntGdiSetTextAlign(hDC, TA_LEFT | TA_BASELINE);
|
||||
GreExtTextOutW(hDC, rect.left, rect.bottom - 5, 0, NULL, s_wszSafeMode, len, NULL, 0);
|
||||
IntGdiSetTextAlign(hDC, TA_RIGHT | TA_BASELINE);
|
||||
GreExtTextOutW(hDC, rect.right, rect.bottom - 5, 0, NULL, s_wszSafeMode, len, NULL, 0);
|
||||
}
|
||||
|
||||
IntGdiSetBkMode(hDC, mode_old);
|
||||
|
@ -1262,7 +1266,7 @@ NtUserCreateDesktop(
|
|||
dwDesiredAccess,
|
||||
(PVOID)&Context,
|
||||
(HANDLE*)&hdesk);
|
||||
if (!NT_SUCCESS(Status))
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
ERR("ObOpenObjectByName failed to open/create desktop\n");
|
||||
SetLastNtError(Status);
|
||||
|
@ -1294,7 +1298,7 @@ NtUserCreateDesktop(
|
|||
|
||||
/* Get the desktop window class. The thread desktop does not belong to any desktop
|
||||
* so the classes created there (including the desktop class) are allocated in the shared heap
|
||||
* It would cause problems if we used a class that belongs to the caller
|
||||
* It would cause problems if we used a class that belongs to the caller
|
||||
*/
|
||||
ClassName.Buffer = WC_DESKTOP;
|
||||
ClassName.Length = 0;
|
||||
|
@ -1327,7 +1331,7 @@ NtUserCreateDesktop(
|
|||
pdesk->DesktopWindow = pWnd->head.h;
|
||||
pdesk->pDeskInfo->spwnd = pWnd;
|
||||
pWnd->fnid = FNID_DESKTOP;
|
||||
|
||||
|
||||
ClassName.Buffer = MAKEINTATOM(gpsi->atomSysClass[ICLS_HWNDMESSAGE]);
|
||||
ClassName.Length = 0;
|
||||
pcls = IntGetAndReferenceClass(&ClassName, 0, TRUE);
|
||||
|
|
|
@ -358,15 +358,20 @@ CanForceFG(PPROCESSINFO ppi)
|
|||
*/
|
||||
|
||||
static BOOL FASTCALL
|
||||
co_IntSetForegroundAndFocusWindow(PWND Wnd, BOOL MouseActivate)
|
||||
co_IntSetForegroundAndFocusWindow(
|
||||
_In_ PWND Wnd,
|
||||
_In_ BOOL MouseActivate)
|
||||
{
|
||||
HWND hWnd = UserHMGetHandle(Wnd);
|
||||
HWND hWnd;
|
||||
HWND hWndPrev = NULL;
|
||||
PUSER_MESSAGE_QUEUE PrevForegroundQueue;
|
||||
PTHREADINFO pti;
|
||||
BOOL fgRet = FALSE, Ret = FALSE;
|
||||
|
||||
ASSERT_REFS_CO(Wnd);
|
||||
NT_ASSERT(Wnd != NULL);
|
||||
|
||||
hWnd = UserHMGetHandle(Wnd);
|
||||
|
||||
TRACE("SetForegroundAndFocusWindow(%x, %s)\n", hWnd, (MouseActivate ? "TRUE" : "FALSE"));
|
||||
|
||||
|
|
|
@ -1050,6 +1050,8 @@ IntRemoveHook(PHOOK Hook)
|
|||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
/* Do nothing */
|
||||
(void)0;
|
||||
}
|
||||
_SEH2_END;
|
||||
}
|
||||
|
@ -1241,6 +1243,8 @@ co_HOOK_CallHooks( INT HookId,
|
|||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
/* Do nothing */
|
||||
(void)0;
|
||||
}
|
||||
_SEH2_END;
|
||||
}
|
||||
|
|
|
@ -254,9 +254,10 @@ UserLoadKbdLayout(PUNICODE_STRING pwszKLID, HKL hKL)
|
|||
*/
|
||||
static
|
||||
VOID
|
||||
UnloadKbdFile(PKBDFILE pkf)
|
||||
UnloadKbdFile(_In_ PKBDFILE pkf)
|
||||
{
|
||||
PKBDFILE *ppkfLink = &gpkfList;
|
||||
NT_ASSERT(pkf != NULL);
|
||||
|
||||
/* Find previous object */
|
||||
while (*ppkfLink)
|
||||
|
|
|
@ -385,7 +385,7 @@ IntTranslateChar(WORD wVirtKey,
|
|||
/* If nothing has been found in layout, check if this is ASCII control character.
|
||||
Note: we could add it to layout table, but windows does not have it there */
|
||||
if (wVirtKey >= 'A' && wVirtKey <= 'Z' &&
|
||||
IS_KEY_DOWN(pKeyState, VK_CONTROL) &&
|
||||
pKeyState && IS_KEY_DOWN(pKeyState, VK_CONTROL) &&
|
||||
!IS_KEY_DOWN(pKeyState, VK_MENU))
|
||||
{
|
||||
*pwcTranslatedChar = (wVirtKey - 'A') + 1; /* ASCII control character */
|
||||
|
@ -1097,7 +1097,7 @@ IntTranslateKbdMessage(LPMSG lpMsg,
|
|||
{
|
||||
pti->KeyboardLayout = W32kGetDefaultKeyLayout();
|
||||
pti->pClientInfo->hKL = pti->KeyboardLayout ? pti->KeyboardLayout->hkl : NULL;
|
||||
pKbdTbl = pti->KeyboardLayout->spkf->pKbdTbl;
|
||||
pKbdTbl = pti->KeyboardLayout ? pti->KeyboardLayout->spkf->pKbdTbl : NULL;
|
||||
}
|
||||
else
|
||||
pKbdTbl = pti->KeyboardLayout->spkf->pKbdTbl;
|
||||
|
|
|
@ -226,16 +226,16 @@ Win32kProcessCallback(struct _EPROCESS *Process,
|
|||
*pppi = ppiCurrent->ppiNext;
|
||||
|
||||
TRACE_CH(UserProcess,"Freeing ppi 0x%p\n", ppiCurrent);
|
||||
|
||||
/* Ftee the PROCESSINFO */
|
||||
PsSetProcessWin32Process(Process, NULL);
|
||||
ExFreePoolWithTag(ppiCurrent, USERTAG_PROCESSINFO);
|
||||
#if DBG
|
||||
if (DBG_IS_CHANNEL_ENABLED(ppiCurrent, DbgChUserObj, WARN_LEVEL))
|
||||
{
|
||||
DbgUserDumpHandleTable();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Free the PROCESSINFO */
|
||||
PsSetProcessWin32Process(Process, NULL);
|
||||
ExFreePoolWithTag(ppiCurrent, USERTAG_PROCESSINFO);
|
||||
}
|
||||
|
||||
RETURN( STATUS_SUCCESS);
|
||||
|
|
|
@ -249,8 +249,8 @@ IntCreateMenu(PHANDLE Handle, BOOL IsMenuBar)
|
|||
PPROCESSINFO CurrentWin32Process;
|
||||
|
||||
Menu = (PMENU_OBJECT)UserCreateObject( gHandleTable,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
Handle,
|
||||
otMenu,
|
||||
sizeof(MENU_OBJECT));
|
||||
|
@ -361,8 +361,8 @@ IntCloneMenu(PMENU_OBJECT Source)
|
|||
return NULL;
|
||||
|
||||
Menu = (PMENU_OBJECT)UserCreateObject( gHandleTable,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
&hMenu,
|
||||
otMenu,
|
||||
sizeof(MENU_OBJECT));
|
||||
|
@ -803,13 +803,18 @@ IntSetMenuItemInfo(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem, PROSMENUITEMINF
|
|||
}
|
||||
|
||||
BOOL FASTCALL
|
||||
IntInsertMenuItem(PMENU_OBJECT MenuObject, UINT uItem, BOOL fByPosition,
|
||||
PROSMENUITEMINFO ItemInfo)
|
||||
IntInsertMenuItem(
|
||||
_In_ PMENU_OBJECT MenuObject,
|
||||
UINT uItem,
|
||||
BOOL fByPosition,
|
||||
PROSMENUITEMINFO ItemInfo)
|
||||
{
|
||||
int pos;
|
||||
PMENU_ITEM MenuItem;
|
||||
PMENU_OBJECT SubMenu = NULL;
|
||||
|
||||
NT_ASSERT(MenuObject != NULL);
|
||||
|
||||
if (MAX_MENU_ITEMS <= MenuObject->MenuInfo.MenuItemCount)
|
||||
{
|
||||
EngSetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||
|
|
|
@ -64,7 +64,7 @@ BOOL FASTCALL
|
|||
IntCleanupMenus(struct _EPROCESS *Process, PPROCESSINFO Win32Process);
|
||||
|
||||
BOOL FASTCALL
|
||||
IntInsertMenuItem(PMENU_OBJECT MenuObject, UINT uItem, BOOL fByPosition,
|
||||
IntInsertMenuItem(_In_ PMENU_OBJECT MenuObject, UINT uItem, BOOL fByPosition,
|
||||
PROSMENUITEMINFO ItemInfo);
|
||||
|
||||
PMENU_OBJECT FASTCALL
|
||||
|
|
|
@ -116,7 +116,7 @@ typedef struct tagMSGMEMORY
|
|||
}
|
||||
MSGMEMORY, *PMSGMEMORY;
|
||||
|
||||
static MSGMEMORY MsgMemory[] =
|
||||
static MSGMEMORY g_MsgMemory[] =
|
||||
{
|
||||
{ WM_CREATE, MMS_SIZE_SPECIAL, MMS_FLAG_READWRITE },
|
||||
{ WM_DDE_ACK, sizeof(KMDDELPARAM), MMS_FLAG_READ },
|
||||
|
@ -140,8 +140,8 @@ FindMsgMemory(UINT Msg)
|
|||
PMSGMEMORY MsgMemoryEntry;
|
||||
|
||||
/* See if this message type is present in the table */
|
||||
for (MsgMemoryEntry = MsgMemory;
|
||||
MsgMemoryEntry < MsgMemory + sizeof(MsgMemory) / sizeof(MSGMEMORY);
|
||||
for (MsgMemoryEntry = g_MsgMemory;
|
||||
MsgMemoryEntry < g_MsgMemory + sizeof(g_MsgMemory) / sizeof(MSGMEMORY);
|
||||
MsgMemoryEntry++)
|
||||
{
|
||||
if (Msg == MsgMemoryEntry->Message)
|
||||
|
@ -225,9 +225,9 @@ MsgMemorySize(PMSGMEMORY MsgMemoryEntry, WPARAM wParam, LPARAM lParam)
|
|||
|
||||
UINT lParamMemorySize(UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
PMSGMEMORY MsgMemory = FindMsgMemory(Msg);
|
||||
if(MsgMemory == NULL) return 0;
|
||||
return MsgMemorySize(MsgMemory, wParam, lParam);
|
||||
PMSGMEMORY MsgMemoryEntry = FindMsgMemory(Msg);
|
||||
if(MsgMemoryEntry == NULL) return 0;
|
||||
return MsgMemorySize(MsgMemoryEntry, wParam, lParam);
|
||||
}
|
||||
|
||||
static NTSTATUS
|
||||
|
@ -388,9 +388,9 @@ UnpackParam(LPARAM lParamPacked, UINT Msg, WPARAM wParam, LPARAM lParam, BOOL No
|
|||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if (MsgMemory->Flags == MMS_FLAG_READWRITE)
|
||||
if (MsgMemoryEntry->Flags == MMS_FLAG_READWRITE)
|
||||
{
|
||||
//RtlCopyMemory((PVOID)lParam, (PVOID)lParamPacked, MsgMemory->Size);
|
||||
//RtlCopyMemory((PVOID)lParam, (PVOID)lParamPacked, MsgMemoryEntry->Size);
|
||||
}
|
||||
ExFreePool((PVOID) lParamPacked);
|
||||
return STATUS_SUCCESS;
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
|
|
@ -139,7 +139,7 @@ UserAttachMonitor(IN HDEV hDev)
|
|||
TRACE("Couldnt create monitor object\n");
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
|
||||
pMonitor->hDev = hDev;
|
||||
pMonitor->cWndStack = 0;
|
||||
|
||||
|
@ -185,7 +185,7 @@ UserDetachMonitor(IN HDEV hDev)
|
|||
{
|
||||
if (pMonitor->hDev == hDev)
|
||||
break;
|
||||
|
||||
|
||||
pLink = &pMonitor->pMonitorNext;
|
||||
pMonitor = pMonitor->pMonitorNext;
|
||||
}
|
||||
|
|
|
@ -704,7 +704,7 @@ MsqDestroyMessage(PUSER_MESSAGE Message)
|
|||
}
|
||||
|
||||
BOOLEAN FASTCALL
|
||||
co_MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue)
|
||||
co_MsqDispatchOneSentMessage(_In_ PUSER_MESSAGE_QUEUE MessageQueue)
|
||||
{
|
||||
PUSER_SENT_MESSAGE SaveMsg, Message;
|
||||
PLIST_ENTRY Entry;
|
||||
|
@ -1331,7 +1331,7 @@ FASTCALL
|
|||
IntTrackMouseMove(PWND pwndTrack, PDESKTOP pDesk, PMSG msg, USHORT hittest)
|
||||
{
|
||||
// PWND pwndTrack = IntChildrenWindowFromPoint(pwndMsg, msg->pt.x, msg->pt.y);
|
||||
hittest = GetNCHitEx(pwndTrack, msg->pt);
|
||||
hittest = (USHORT)GetNCHitEx(pwndTrack, msg->pt); /// @todo WTF is this???
|
||||
|
||||
if ( pDesk->spwndTrack != pwndTrack || // Change with tracking window or
|
||||
msg->message != WM_MOUSEMOVE || // Mouse click changes or
|
||||
|
|
|
@ -188,7 +188,7 @@ BOOLEAN FASTCALL MsqInitializeMessageQueue(PTHREADINFO, PUSER_MESSAGE_QUEUE);
|
|||
PUSER_MESSAGE_QUEUE FASTCALL MsqCreateMessageQueue(PTHREADINFO);
|
||||
VOID FASTCALL MsqDestroyMessageQueue(PTHREADINFO);
|
||||
INIT_FUNCTION NTSTATUS NTAPI MsqInitializeImpl(VOID);
|
||||
BOOLEAN FASTCALL co_MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue);
|
||||
BOOLEAN FASTCALL co_MsqDispatchOneSentMessage(_In_ PUSER_MESSAGE_QUEUE MessageQueue);
|
||||
NTSTATUS FASTCALL
|
||||
co_MsqWaitForNewMessages(PUSER_MESSAGE_QUEUE MessageQueue, PWND WndFilter,
|
||||
UINT MsgFilterMin, UINT MsgFilterMax);
|
||||
|
|
|
@ -345,7 +345,7 @@ co_IntSetScrollInfo(PWND Window, INT nBar, LPCSCROLLINFO lpsi, BOOL bRedraw)
|
|||
UINT new_flags;
|
||||
INT action = 0;
|
||||
PSBDATA pSBData;
|
||||
DWORD OldPos;
|
||||
DWORD OldPos = 0;
|
||||
BOOL bChangeParams = FALSE; /* Don't show/hide scrollbar if params don't change */
|
||||
|
||||
ASSERT_REFS_CO(Window);
|
||||
|
|
|
@ -25,9 +25,16 @@ BOOL g_PaintDesktopVersion = FALSE;
|
|||
#define METRIC2REG(met) (-((((met) * 1440)- 0) / dpi))
|
||||
|
||||
#define REQ_INTERACTIVE_WINSTA(err) \
|
||||
if ( GetW32ProcessInfo()->prpwinsta != InputWindowStation) \
|
||||
if (GetW32ProcessInfo()->prpwinsta != InputWindowStation) \
|
||||
{ \
|
||||
ERR("NtUserSystemParametersInfo requires interactive window station (current is %wZ)\n", &GetW32ProcessInfo()->prpwinsta->Name); \
|
||||
if (GetW32ProcessInfo()->prpwinsta == NULL) \
|
||||
{ \
|
||||
ERR("NtUserSystemParametersInfo called without active window station, and it requires an interactive one\n"); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
ERR("NtUserSystemParametersInfo requires interactive window station (current is %wZ)\n", &GetW32ProcessInfo()->prpwinsta->Name); \
|
||||
} \
|
||||
EngSetLastError(err); \
|
||||
return 0; \
|
||||
}
|
||||
|
@ -610,7 +617,7 @@ SpiSetWallpaper(PVOID pvParam, FLONG fl)
|
|||
}
|
||||
|
||||
/* Capture UNICODE_STRING */
|
||||
bResult = SpiMemCopy(&ustr, pvParam, sizeof(UNICODE_STRING), fl & SPIF_PROTECT, 0);
|
||||
bResult = SpiMemCopy(&ustr, pvParam, sizeof(ustr), fl & SPIF_PROTECT, 0);
|
||||
if (!bResult) return 0;
|
||||
if (ustr.Length > MAX_PATH * sizeof(WCHAR))
|
||||
return 0;
|
||||
|
@ -1568,7 +1575,7 @@ UserSystemParametersInfo(
|
|||
/* Get a pointer to the current Windowstation */
|
||||
if (!ppi->prpwinsta)
|
||||
{
|
||||
ERR("UserSystemParametersInfo called without active windowstation.\n");
|
||||
ERR("UserSystemParametersInfo called without active window station.\n");
|
||||
//ASSERT(FALSE);
|
||||
//return FALSE;
|
||||
}
|
||||
|
|
|
@ -141,7 +141,7 @@ typedef struct _SPIVALUES
|
|||
ULONG cxWallpaper, cyWallpaper;
|
||||
WALLPAPER_MODE WallpaperMode;
|
||||
UNICODE_STRING ustrWallpaper;
|
||||
WCHAR awcWallpaper[MAX_PATH];
|
||||
WCHAR awcWallpaper[MAX_PATH + 1];
|
||||
|
||||
BOOL bHandHeld;
|
||||
BOOL bFastTaskSwitch;
|
||||
|
|
|
@ -359,7 +359,7 @@ FASTCALL
|
|||
StartTheTimers(VOID)
|
||||
{
|
||||
// Need to start gdi syncro timers then start timer with Hang App proc
|
||||
// that calles Idle process so the screen savers will know to run......
|
||||
// that calles Idle process so the screen savers will know to run......
|
||||
IntSetTimer(NULL, 0, 1000, HungAppSysTimerProc, TMRF_RIT);
|
||||
// Test Timers
|
||||
// IntSetTimer(NULL, 0, 1000, SystemTimerProc, TMRF_RIT);
|
||||
|
@ -584,9 +584,14 @@ NTAPI
|
|||
InitTimerImpl(VOID)
|
||||
{
|
||||
ULONG BitmapBytes;
|
||||
|
||||
|
||||
/* Allocate FAST_MUTEX from non paged pool */
|
||||
Mutex = ExAllocatePoolWithTag(NonPagedPool, sizeof(FAST_MUTEX), TAG_INTERNAL_SYNC);
|
||||
if (!Mutex)
|
||||
{
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
ExInitializeFastMutex(Mutex);
|
||||
|
||||
BitmapBytes = ROUND_UP(NUM_WINDOW_LESS_TIMERS, sizeof(ULONG) * 8) / 8;
|
||||
|
|
|
@ -34,11 +34,11 @@ IntAddAtom(LPWSTR AtomName)
|
|||
}
|
||||
|
||||
ULONG FASTCALL
|
||||
IntGetAtomName(RTL_ATOM nAtom, LPWSTR lpBuffer, ULONG nSize)
|
||||
IntGetAtomName(RTL_ATOM nAtom, LPWSTR lpBuffer, ULONG cjBufSize)
|
||||
{
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
PTHREADINFO pti;
|
||||
ULONG Size = nSize;
|
||||
ULONG Size = cjBufSize;
|
||||
|
||||
pti = PsGetCurrentThreadWin32Thread();
|
||||
if (pti->rpdesk == NULL)
|
||||
|
@ -49,13 +49,12 @@ IntGetAtomName(RTL_ATOM nAtom, LPWSTR lpBuffer, ULONG nSize)
|
|||
|
||||
Status = RtlQueryAtomInAtomTable(gAtomTable, nAtom, NULL, NULL, lpBuffer, &Size);
|
||||
|
||||
if (Size < nSize)
|
||||
*(lpBuffer + Size/sizeof(WCHAR)) = 0;
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return Size;
|
||||
}
|
||||
|
||||
|
@ -78,30 +77,67 @@ IntAddGlobalAtom(LPWSTR lpBuffer, BOOL PinAtom)
|
|||
return Atom;
|
||||
}
|
||||
|
||||
DWORD
|
||||
/*!
|
||||
* \brief Returns the name of an atom.
|
||||
*
|
||||
* \param atom - The atom to be queried.
|
||||
* \param pustrName - Pointer to an initialized UNICODE_STRING that receives
|
||||
* the name of the atom. The function does not update the
|
||||
Length member. The string is always NULL-terminated.
|
||||
*
|
||||
* \return The length of the name in characters, or 0 if the function fails.
|
||||
*
|
||||
* \note The function does not aquire any global lock, since synchronisation is
|
||||
* handled by the RtlAtom function.
|
||||
*/
|
||||
_Success_(return!=0)
|
||||
_At_(pustrName->Buffer, _Out_z_bytecap_post_bytecount_(pustrName->MaximumLength, return*2+2))
|
||||
ULONG
|
||||
APIENTRY
|
||||
NtUserGetAtomName(
|
||||
ATOM nAtom,
|
||||
PUNICODE_STRING pBuffer)
|
||||
_In_ ATOM atom,
|
||||
_Inout_ PUNICODE_STRING pustrName)
|
||||
{
|
||||
DWORD Ret;
|
||||
WCHAR Buffer[256];
|
||||
UNICODE_STRING CapturedName = {0};
|
||||
UserEnterShared();
|
||||
CapturedName.Buffer = (LPWSTR)&Buffer;
|
||||
CapturedName.MaximumLength = sizeof(Buffer);
|
||||
Ret = IntGetAtomName((RTL_ATOM)nAtom, CapturedName.Buffer, (ULONG)CapturedName.Length);
|
||||
_SEH2_TRY
|
||||
{
|
||||
RtlCopyMemory(pBuffer->Buffer, &Buffer, pBuffer->MaximumLength);
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
Ret = 0;
|
||||
}
|
||||
_SEH2_END
|
||||
UserLeave();
|
||||
return Ret;
|
||||
WCHAR awcBuffer[256];
|
||||
ULONG cjLength;
|
||||
|
||||
/* Retrieve the atom name into a local buffer (max length is 255 chars) */
|
||||
cjLength = IntGetAtomName((RTL_ATOM)atom, awcBuffer, sizeof(awcBuffer));
|
||||
if (cjLength != 0)
|
||||
{
|
||||
_SEH2_TRY
|
||||
{
|
||||
/* Probe the unicode string and the buffer */
|
||||
ProbeForRead(pustrName, sizeof(*pustrName), 1);
|
||||
ProbeForWrite(pustrName->Buffer, pustrName->MaximumLength, 1);
|
||||
|
||||
/* Check if we have enough space to write the NULL termination */
|
||||
if (pustrName->MaximumLength >= sizeof(UNICODE_NULL))
|
||||
{
|
||||
/* Limit the length to the buffer size */
|
||||
cjLength = min(pustrName->MaximumLength - sizeof(UNICODE_NULL),
|
||||
cjLength);
|
||||
|
||||
/* Copy the string and NULL terminate it */
|
||||
RtlCopyMemory(pustrName->Buffer, awcBuffer, cjLength);
|
||||
pustrName->Buffer[cjLength / sizeof(WCHAR)] = L'\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
cjLength = 0;
|
||||
}
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
/* On exception, set last error and fail */
|
||||
SetLastNtError(_SEH2_GetExceptionCode());
|
||||
cjLength = 0;
|
||||
}
|
||||
_SEH2_END
|
||||
}
|
||||
|
||||
/* Return the length in characters */
|
||||
return cjLength / sizeof(WCHAR);
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -852,7 +852,7 @@ DceResetActiveDCEs(PWND Window)
|
|||
{
|
||||
if (!pDCE->hwndCurrent)
|
||||
CurrentWindow = NULL;
|
||||
else
|
||||
else
|
||||
CurrentWindow = UserGetWindowObject(pDCE->hwndCurrent);
|
||||
if (NULL == CurrentWindow)
|
||||
{
|
||||
|
|
|
@ -497,6 +497,7 @@ static LRESULT co_UserFreeWindow(PWND Window,
|
|||
/* flush the message queue */
|
||||
MsqRemoveWindowMessagesFromQueue(Window);
|
||||
|
||||
NT_ASSERT(Window->head.pti);
|
||||
IntDereferenceMessageQueue(Window->head.pti->MessageQueue);
|
||||
|
||||
/* from now on no messages can be sent to this window anymore */
|
||||
|
@ -1987,7 +1988,7 @@ co_UserCreateWindowEx(CREATESTRUCTW* Cs,
|
|||
PWINSTATION_OBJECT WinSta;
|
||||
PCLS Class = NULL;
|
||||
SIZE Size;
|
||||
POINT MaxPos;
|
||||
POINT MaxSize, MaxPos, MinTrack, MaxTrack;
|
||||
CBT_CREATEWNDW * pCbtCreate;
|
||||
LRESULT Result;
|
||||
USER_REFERENCE_ENTRY ParentRef, Ref;
|
||||
|
@ -2190,8 +2191,6 @@ co_UserCreateWindowEx(CREATESTRUCTW* Cs,
|
|||
|
||||
if ((Cs->style & WS_THICKFRAME) || !(Cs->style & (WS_POPUP | WS_CHILD)))
|
||||
{
|
||||
POINT MaxSize, MaxPos, MinTrack, MaxTrack;
|
||||
|
||||
co_WinPosGetMinMaxInfo(Window, &MaxSize, &MaxPos, &MinTrack, &MaxTrack);
|
||||
if (Size.cx > MaxTrack.x) Size.cx = MaxTrack.x;
|
||||
if (Size.cy > MaxTrack.y) Size.cy = MaxTrack.y;
|
||||
|
@ -2542,7 +2541,7 @@ BOOLEAN FASTCALL co_UserDestroyWindow(PWND Window)
|
|||
|
||||
TRACE("co_UserDestroyWindow \n");
|
||||
|
||||
/* Check for owner thread */
|
||||
/* Check for owner thread */
|
||||
if ( Window->head.pti != PsGetCurrentThreadWin32Thread())
|
||||
{
|
||||
/* Check if we are destroying the desktop window */
|
||||
|
@ -2627,7 +2626,7 @@ BOOLEAN FASTCALL co_UserDestroyWindow(PWND Window)
|
|||
* Check if this window is the Shell's Desktop Window. If so set hShellWindow to NULL
|
||||
*/
|
||||
|
||||
if ((ti != NULL) & (ti->pDeskInfo != NULL))
|
||||
if ((ti != NULL) && (ti->pDeskInfo != NULL))
|
||||
{
|
||||
if (ti->pDeskInfo->hShellWindow == hWnd)
|
||||
{
|
||||
|
@ -3074,8 +3073,6 @@ PWND FASTCALL UserGetAncestor(PWND Wnd, UINT Type)
|
|||
|
||||
for (;;)
|
||||
{
|
||||
PWND Parent;
|
||||
|
||||
Parent = IntGetParent(WndAncestor);
|
||||
|
||||
if (!Parent)
|
||||
|
|
|
@ -57,7 +57,10 @@ UserCreateWinstaDirectoy()
|
|||
Peb = NtCurrentPeb();
|
||||
if(Peb->SessionId == 0)
|
||||
{
|
||||
RtlCreateUnicodeString(&gustrWindowStationsDir, WINSTA_OBJ_DIR);
|
||||
if (!RtlCreateUnicodeString(&gustrWindowStationsDir, WINSTA_OBJ_DIR))
|
||||
{
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -67,7 +70,10 @@ UserCreateWinstaDirectoy()
|
|||
Peb->SessionId,
|
||||
WINSTA_OBJ_DIR);
|
||||
|
||||
RtlCreateUnicodeString( &gustrWindowStationsDir, wstrWindowStationsDir);
|
||||
if (!RtlCreateUnicodeString(&gustrWindowStationsDir, wstrWindowStationsDir))
|
||||
{
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
}
|
||||
|
||||
InitializeObjectAttributes(&ObjectAttributes,
|
||||
|
@ -1024,27 +1030,30 @@ BuildWindowStationNameList(
|
|||
&ReturnLength);
|
||||
if (STATUS_BUFFER_TOO_SMALL == Status)
|
||||
{
|
||||
BufferSize = ReturnLength;
|
||||
Buffer = ExAllocatePoolWithTag(PagedPool, BufferSize, TAG_WINSTA);
|
||||
if (NULL == Buffer)
|
||||
{
|
||||
ObDereferenceObject(DirectoryHandle);
|
||||
return STATUS_NO_MEMORY;
|
||||
}
|
||||
ObDereferenceObject(DirectoryHandle);
|
||||
return STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
/* We should have a sufficiently large buffer now */
|
||||
Context = 0;
|
||||
Status = ZwQueryDirectoryObject(DirectoryHandle, Buffer, BufferSize,
|
||||
FALSE, TRUE, &Context, &ReturnLength);
|
||||
if (! NT_SUCCESS(Status) ||
|
||||
STATUS_NO_MORE_ENTRIES != ZwQueryDirectoryObject(DirectoryHandle, NULL, 0, FALSE,
|
||||
FALSE, &Context, NULL))
|
||||
{
|
||||
/* Something went wrong, maybe someone added a directory entry? Just give up. */
|
||||
ExFreePoolWithTag(Buffer, TAG_WINSTA);
|
||||
ObDereferenceObject(DirectoryHandle);
|
||||
return NT_SUCCESS(Status) ? STATUS_INTERNAL_ERROR : Status;
|
||||
}
|
||||
BufferSize = ReturnLength;
|
||||
Buffer = ExAllocatePoolWithTag(PagedPool, BufferSize, TAG_WINSTA);
|
||||
if (NULL == Buffer)
|
||||
{
|
||||
ObDereferenceObject(DirectoryHandle);
|
||||
return STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
/* We should have a sufficiently large buffer now */
|
||||
Context = 0;
|
||||
Status = ZwQueryDirectoryObject(DirectoryHandle, Buffer, BufferSize,
|
||||
FALSE, TRUE, &Context, &ReturnLength);
|
||||
if (! NT_SUCCESS(Status) ||
|
||||
STATUS_NO_MORE_ENTRIES != ZwQueryDirectoryObject(DirectoryHandle, NULL, 0, FALSE,
|
||||
FALSE, &Context, NULL))
|
||||
{
|
||||
/* Something went wrong, maybe someone added a directory entry? Just give up. */
|
||||
ExFreePoolWithTag(Buffer, TAG_WINSTA);
|
||||
ObDereferenceObject(DirectoryHandle);
|
||||
return NT_SUCCESS(Status) ? STATUS_INTERNAL_ERROR : Status;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1130,7 +1139,7 @@ BuildWindowStationNameList(
|
|||
/*
|
||||
* Clean up
|
||||
*/
|
||||
if (NULL != Buffer && Buffer != InitialBuffer)
|
||||
if (Buffer != InitialBuffer)
|
||||
{
|
||||
ExFreePoolWithTag(Buffer, TAG_WINSTA);
|
||||
}
|
||||
|
@ -1153,6 +1162,7 @@ BuildDesktopNameList(
|
|||
DWORD EntryCount;
|
||||
ULONG ReturnLength;
|
||||
WCHAR NullWchar;
|
||||
PUNICODE_STRING DesktopName;
|
||||
|
||||
Status = IntValidateWindowStationHandle(hWindowStation,
|
||||
KernelMode,
|
||||
|
@ -1175,7 +1185,8 @@ BuildDesktopNameList(
|
|||
DesktopEntry = DesktopEntry->Flink)
|
||||
{
|
||||
DesktopObject = CONTAINING_RECORD(DesktopEntry, DESKTOP, ListEntry);
|
||||
ReturnLength += ((PUNICODE_STRING)GET_DESKTOP_NAME(DesktopObject))->Length + sizeof(WCHAR);
|
||||
DesktopName = GET_DESKTOP_NAME(DesktopObject);
|
||||
if (DesktopName) ReturnLength += DesktopName->Length + sizeof(WCHAR);
|
||||
EntryCount++;
|
||||
}
|
||||
TRACE("Required size: %d Entry count: %d\n", ReturnLength, EntryCount);
|
||||
|
@ -1218,14 +1229,18 @@ BuildDesktopNameList(
|
|||
DesktopEntry = DesktopEntry->Flink)
|
||||
{
|
||||
DesktopObject = CONTAINING_RECORD(DesktopEntry, DESKTOP, ListEntry);
|
||||
Status = MmCopyToCaller(lpBuffer, ((PUNICODE_STRING)GET_DESKTOP_NAME(DesktopObject))->Buffer, ((PUNICODE_STRING)GET_DESKTOP_NAME(DesktopObject))->Length);
|
||||
_PRAGMA_WARNING_SUPPRESS(__WARNING_DEREF_NULL_PTR)
|
||||
DesktopName = GET_DESKTOP_NAME(DesktopObject);/// @todo Don't mess around with the object headers!
|
||||
if (!DesktopName) continue;
|
||||
|
||||
Status = MmCopyToCaller(lpBuffer, DesktopName->Buffer, DesktopName->Length);
|
||||
if (! NT_SUCCESS(Status))
|
||||
{
|
||||
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
|
||||
ObDereferenceObject(WindowStation);
|
||||
return Status;
|
||||
}
|
||||
lpBuffer = (PVOID) ((PCHAR) lpBuffer + ((PUNICODE_STRING)GET_DESKTOP_NAME(DesktopObject))->Length);
|
||||
lpBuffer = (PVOID) ((PCHAR)lpBuffer + DesktopName->Length);
|
||||
Status = MmCopyToCaller(lpBuffer, &NullWchar, sizeof(WCHAR));
|
||||
if (! NT_SUCCESS(Status))
|
||||
{
|
||||
|
|
|
@ -7,8 +7,6 @@ include_directories(
|
|||
include
|
||||
${REACTOS_SOURCE_DIR}/win32ss/include)
|
||||
|
||||
set_rc_compiler()
|
||||
|
||||
list(APPEND SOURCE
|
||||
controls/appswitch.c
|
||||
controls/button.c
|
||||
|
@ -71,16 +69,8 @@ else()
|
|||
endif()
|
||||
|
||||
add_library(user32 SHARED ${SOURCE})
|
||||
set_module_type(user32
|
||||
win32dll
|
||||
ENTRYPOINT DllMain 12
|
||||
UNICODE)
|
||||
|
||||
target_link_libraries(user32
|
||||
user32_wsprintf
|
||||
wine
|
||||
win32ksys
|
||||
${PSEH_LIB})
|
||||
set_module_type(user32 win32dll ENTRYPOINT DllMain 12 UNICODE)
|
||||
target_link_libraries(user32 user32_wsprintf wine win32ksys ${PSEH_LIB})
|
||||
|
||||
if(MSVC)
|
||||
# for __ftol2_sse, float to int cast helper
|
||||
|
@ -91,4 +81,3 @@ add_delay_importlibs(user32 imm32 usp10)
|
|||
add_importlibs(user32 gdi32 advapi32 kernel32 ntdll)
|
||||
add_pch(user32 include/user32.h)
|
||||
add_cd_file(TARGET user32 DESTINATION reactos/system32 FOR all)
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Отказ",IDCANCEL,142,98,43,17
|
||||
PUSHBUTTON "&Прекратяване веднага",IDC_END_NOW,150,71,60,17
|
||||
LTEXT "Приложението не отговаря",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Приложението не отговаря.",IDC_STATIC,7,7,178,8
|
||||
LTEXT "За да се върнете в РеактОС и да проверите състоянието на приложението, натиснете „Отказ“.",
|
||||
IDC_STATIC,7,26,178,16
|
||||
LTEXT "Ако решите да затворите приложението веднага, ще изгубите всички незаписани данни. За да прекратите приложението веднага, натиснете „Прекратяване веднага“.",
|
||||
|
|
|
@ -25,8 +25,8 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Storno",IDCANCEL,142,98,43,17
|
||||
PUSHBUTTON "&Ukončit okamžitě",IDC_END_NOW,78,98,43,17
|
||||
LTEXT "Tento program neodpovídá",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Kliknutím na Storno se lze vrátit do systému ReactOS a ověřit stav programu",
|
||||
LTEXT "Tento program neodpovídá.",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Kliknutím na Storno se lze vrátit do systému ReactOS a ověřit stav programu.",
|
||||
IDC_STATIC,7,26,178,16
|
||||
LTEXT "Pokud zvolíte okamžité ukončení programu, všechna neuložená data budou ztracena. Kliknutím na Ukončit okamžitě ukončíte program.",
|
||||
IDC_STATIC,7,53,178,26
|
||||
|
|
|
@ -20,7 +20,7 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Abbechen",IDCANCEL,142,98,43,17
|
||||
PUSHBUTTON "J&etzt beenden",IDC_END_NOW,78,98,43,17
|
||||
LTEXT "Das Programm reagiert nicht",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Das Programm reagiert nicht.",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Um zu ReactOS zurückzukehren und den Status der Anwendung zu überprüfen, wählen Sie Abbrechen.",
|
||||
IDC_STATIC,7,26,178,16
|
||||
LTEXT "Wenn Sie das Programm sofort beenden, werden Sie eventuell ungespeicherte Daten verlieren. Um das Programm zu beenden, wählen Sie Jetzt beenden.",
|
||||
|
|
|
@ -20,8 +20,8 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "’κυρο",IDCANCEL,142,98,43,17
|
||||
PUSHBUTTON "&Κλείσιμο Τώρα",IDC_END_NOW,78,98,43,17
|
||||
LTEXT "Το πρόγραμμα δεν αποκρίνεται",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Για να επιστρέψετε στο ReactOS και να ελέγξετε την κατάσταση του προγράμματος, πατήστε '’κυρο'",
|
||||
LTEXT "Το πρόγραμμα δεν αποκρίνεται.",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Για να επιστρέψετε στο ReactOS και να ελέγξετε την κατάσταση του προγράμματος, πατήστε '’κυρο'.",
|
||||
IDC_STATIC,7,26,178,16
|
||||
LTEXT "Αν κλείσετε την εφαρμογή τώρα , θα χάσετε όλα τα μη αποθηκευμένα δεδομένα. Για να κλείσετε το πρόγραμμα τώρα, πατήστε 'Κλείσιμο Τώρα'.",
|
||||
IDC_STATIC,7,53,178,26
|
||||
|
|
|
@ -20,10 +20,10 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Cancel",IDCANCEL,142,98,43,17
|
||||
PUSHBUTTON "&End Now",IDC_END_NOW,78,98,43,17
|
||||
LTEXT "This program is not responding",IDC_STATIC,7,7,178,8
|
||||
LTEXT "To return to ReactOS and check the status of the program, click Cancel",
|
||||
LTEXT "This program is not responding.",IDC_STATIC,7,7,178,8
|
||||
LTEXT "To return to ReactOS and check the status of the program, click Cancel.",
|
||||
IDC_STATIC,7,26,178,16
|
||||
LTEXT "If you choose to end the program immediately, you will loose any unsaved data. To end the program now, click End Now",
|
||||
LTEXT "If you choose to end the program immediately, you will lose any unsaved data. To end the program now, click End Now.",
|
||||
IDC_STATIC,7,53,178,26
|
||||
END
|
||||
|
||||
|
|
|
@ -25,8 +25,8 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Cancelar",IDCANCEL,142,98,43,17
|
||||
PUSHBUTTON "&Finalizar ahora",IDC_END_NOW,78,98,43,17
|
||||
LTEXT "Este programa no responde",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Para volver a ReactOS y ver el estado del programa, haga clic en Cancelar",
|
||||
LTEXT "Este programa no responde.",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Para volver a ReactOS y ver el estado del programa, haga clic en Cancelar.",
|
||||
IDC_STATIC,7,26,178,16
|
||||
LTEXT "Si elige finalizar el programa ahora, perderá todos los datos no guardados. Para finalizar el programa ahora, haga clic en Finalizar ahora.",
|
||||
IDC_STATIC,7,53,178,26
|
||||
|
|
|
@ -20,10 +20,10 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Annuler",IDCANCEL,142,98,43,17
|
||||
PUSHBUTTON "T&erminer maintenant",IDC_END_NOW,78,98,43,17
|
||||
LTEXT "Ce programme ne répond pas",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Pour retourner à ReactOS et vérifier l'état du programme, cliquez sur Annuler",
|
||||
LTEXT "Ce programme ne répond pas.",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Pour retourner à ReactOS et vérifier l'état du programme, cliquez sur Annuler.",
|
||||
IDC_STATIC,7,26,178,16
|
||||
LTEXT "Si vous choisissez de terminer le programme immédiatement, vous perdrez toutes les données non sauvegardées. Pour terminer le programme maintenant, cliquez sur Terminer maintenant",
|
||||
LTEXT "Si vous choisissez de terminer le programme immédiatement, vous perdrez toutes les données non sauvegardées. Pour terminer le programme maintenant, cliquez sur Terminer maintenant.",
|
||||
IDC_STATIC,7,53,178,26
|
||||
END
|
||||
|
||||
|
|
|
@ -20,8 +20,8 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Batal",IDCANCEL,142,98,43,17
|
||||
PUSHBUTTON "&Akhiri Sekarang",IDC_END_NOW,78,98,43,17
|
||||
LTEXT "Program ini tidak merespon",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Untuk kembali ke ReactOS dan memeriksa status program, klik Batal",
|
||||
LTEXT "Program ini tidak merespon.",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Untuk kembali ke ReactOS dan memeriksa status program, klik Batal.",
|
||||
IDC_STATIC,7,26,178,16
|
||||
LTEXT "Jika anda memilih untuk segera mengakhiri program, anda akan kehilangan data yang belum disimpan. Untuk mengakhiri program sekarang, klik Akhiri Sekarang.",
|
||||
IDC_STATIC,7,53,178,26
|
||||
|
|
|
@ -29,8 +29,8 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Annulla",IDCANCEL,142,98,43,17
|
||||
PUSHBUTTON "T&ermina ora",IDC_END_NOW,78,98,43,17
|
||||
LTEXT "Il programma non risponde",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Per tornare a ReactOS e controllare lo stato del programma, selezionare Annulla",
|
||||
LTEXT "Il programma non risponde.",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Per tornare a ReactOS e controllare lo stato del programma, selezionare Annulla.",
|
||||
IDC_STATIC,7,26,178,16
|
||||
LTEXT "Se si sceglie di terminare il programma immediatamente, si perderanno tutti i dati non salvati. Per terminare il programma ora, selezionare Termina ora.",
|
||||
IDC_STATIC,7,53,178,26
|
||||
|
|
|
@ -20,10 +20,10 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Avbryt",IDCANCEL,142,98,43,17
|
||||
PUSHBUTTON "&Avslutt nå",IDC_END_NOW,78,98,43,17
|
||||
LTEXT "Programmet svarer ikke",IDC_STATIC,7,7,178,8
|
||||
LTEXT "For å returnere til ReactOS for å sjekke statusen på programmet, trykk på avbryt",
|
||||
LTEXT "Programmet svarer ikke.",IDC_STATIC,7,7,178,8
|
||||
LTEXT "For å returnere til ReactOS for å sjekke statusen på programmet, trykk på avbryt.",
|
||||
IDC_STATIC,7,26,178,16
|
||||
LTEXT "Hvis du velger å avslutte programmet øyeblikkelig, vil du miste alt data som ikke er lagret. For å avslutte programmet nå, Trykk på Avslutt nå",
|
||||
LTEXT "Hvis du velger å avslutte programmet øyeblikkelig, vil du miste alt data som ikke er lagret. For å avslutte programmet nå, Trykk på Avslutt nå.",
|
||||
IDC_STATIC,7,53,178,26
|
||||
END
|
||||
|
||||
|
|
|
@ -28,8 +28,8 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Anuluj",IDCANCEL,142,98,43,17
|
||||
PUSHBUTTON "&Zakończ teraz",IDC_END_NOW,78,98,43,17
|
||||
LTEXT "Wybrany program nie odpowiada",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Aby powrócić do ReactOS i sprawdzić status programu, kliknij Anuluj",
|
||||
LTEXT "Wybrany program nie odpowiada.",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Aby powrócić do ReactOS i sprawdzić status programu, kliknij Anuluj.",
|
||||
IDC_STATIC,7,26,178,16
|
||||
LTEXT "Jeśli zdecydujesz się zamknąć program natychmiastowo, utracisz wszelkie niezapisane dane. Aby zakończyć program, wciśnij Zakończ teraz.",
|
||||
IDC_STATIC,7,53,178,26
|
||||
|
|
|
@ -22,10 +22,10 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Cancelar",IDCANCEL,142,98,43,17
|
||||
PUSHBUTTON "&Finalizar Agora",IDC_END_NOW,78,98,43,17
|
||||
LTEXT "O programa não está respondendo",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Parar retornar ao ReactOS e verificar o estado do programa, pressione Cancelar",
|
||||
LTEXT "O programa não está respondendo.",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Parar retornar ao ReactOS e verificar o estado do programa, pressione Cancelar.",
|
||||
IDC_STATIC,7,26,178,16
|
||||
LTEXT "Se você finalizar o programa imediatamente, você irá perder qualquer alteração não salva. Para finalizar o programa agora, pressione Finalizar Agora",
|
||||
LTEXT "Se você finalizar o programa imediatamente, você irá perder qualquer alteração não salva. Para finalizar o programa agora, pressione Finalizar Agora.",
|
||||
IDC_STATIC,7,53,178,26
|
||||
END
|
||||
|
||||
|
|
|
@ -27,8 +27,8 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "A&nulează", IDCANCEL,142,98,43,17
|
||||
PUSHBUTTON "Termină &forțat",IDC_END_NOW,78,98,43,17
|
||||
LTEXT "Acest program nu răspunde",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Pentru a vă întoarce în ReactOS și a verifica starea programului, apăsați „Anulează”",
|
||||
LTEXT "Acest program nu răspunde.",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Pentru a vă întoarce în ReactOS și a verifica starea programului, apăsați „Anulează”.",
|
||||
IDC_STATIC,7,26,178,16
|
||||
LTEXT "Dacă alegeți închiderea imediată a programului, riscați pierderi de date. Pentru a forța închiderea, apăsați „Termină forțat”.",
|
||||
IDC_STATIC,7,53,178,26
|
||||
|
|
|
@ -20,10 +20,10 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Отмена",IDCANCEL,142,98,43,17
|
||||
PUSHBUTTON "&Завершить",IDC_END_NOW,78,98,43,17
|
||||
LTEXT "Эта программа не отвечает",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Для возврата в ReactOS и сохранения данных нажмите ""Отмена""",
|
||||
LTEXT "Эта программа не отвечает.",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Для возврата в ReactOS и сохранения данных нажмите ""Отмена"".",
|
||||
IDC_STATIC,7,26,178,16
|
||||
LTEXT "Если вы завершите программу сейчас, то вы можете потерять несохраненные данные. Чтобы завешить программу сейчас нажмите ""Завершить""",
|
||||
LTEXT "Если вы завершите программу сейчас, то вы можете потерять несохраненные данные. Чтобы завешить программу сейчас нажмите ""Завершить"".",
|
||||
IDC_STATIC,7,53,178,26
|
||||
END
|
||||
|
||||
|
|
|
@ -27,8 +27,8 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Avbryt",IDCANCEL,142,98,43,17
|
||||
PUSHBUTTON "&Avsluta Nu",IDC_END_NOW,78,98,43,17
|
||||
LTEXT "Detta programmet svarar inte",IDC_STATIC,7,7,178,8
|
||||
LTEXT "För att återgå till ReactOS och undersöka programmets status klicka Avbryt",
|
||||
LTEXT "Detta programmet svarar inte.",IDC_STATIC,7,7,178,8
|
||||
LTEXT "För att återgå till ReactOS och undersöka programmets status klicka Avbryt.",
|
||||
IDC_STATIC,7,26,178,16
|
||||
LTEXT "m du väljer att avsluta programmet omedelbart kommer du att förlora all osparad data. För att avsluta programmet, klicka Avsluta nu.",
|
||||
IDC_STATIC,7,53,178,26
|
||||
|
|
|
@ -28,10 +28,10 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
DEFPUSHBUTTON "Скасувати",IDCANCEL,142,98,43,17
|
||||
PUSHBUTTON "&Завершити зараз",IDC_END_NOW,78,98,43,17
|
||||
LTEXT "Ця програма не відповідає",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Щоб повернутися у ReactOS і перевірити стан програми, натисніть 'Скасувати'",
|
||||
LTEXT "Ця програма не відповідає.",IDC_STATIC,7,7,178,8
|
||||
LTEXT "Щоб повернутися у ReactOS і перевірити стан програми, натисніть 'Скасувати'.",
|
||||
IDC_STATIC,7,26,178,16
|
||||
LTEXT "Якщо завершити програму негайно, то можна втратити всі незбережені дані. Щоб завершити програму зараз, натисніть 'Завершити зараз'",
|
||||
LTEXT "Якщо завершити програму негайно, то можна втратити всі незбережені дані. Щоб завершити програму зараз, натисніть 'Завершити зараз'.",
|
||||
IDC_STATIC,7,53,178,26
|
||||
END
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue