mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-03 04:13:31 +00:00
remove whitespace from end of lines
svn path=/trunk/; revision=15106
This commit is contained in:
@@ -95,7 +95,7 @@ DIB_DoRop(ULONG Rop, ULONG Dest, ULONG Source, ULONG Pattern)
|
||||
ULONG ResultNibble;
|
||||
ULONG Result;
|
||||
ULONG i;
|
||||
static const ULONG ExpandDest[16] =
|
||||
static const ULONG ExpandDest[16] =
|
||||
{
|
||||
0x55555555 /* 0000 */,
|
||||
0x555555AA /* 0001 */,
|
||||
@@ -114,7 +114,7 @@ DIB_DoRop(ULONG Rop, ULONG Dest, ULONG Source, ULONG Pattern)
|
||||
0xAAAAAA55 /* 1110 */,
|
||||
0xAAAAAAAA /* 1111 */,
|
||||
};
|
||||
static const ULONG ExpandSource[16] =
|
||||
static const ULONG ExpandSource[16] =
|
||||
{
|
||||
0x33333333 /* 0000 */,
|
||||
0x333333CC /* 0001 */,
|
||||
@@ -133,7 +133,7 @@ DIB_DoRop(ULONG Rop, ULONG Dest, ULONG Source, ULONG Pattern)
|
||||
0xCCCCCC33 /* 1110 */,
|
||||
0xCCCCCCCC /* 1111 */,
|
||||
};
|
||||
static const ULONG ExpandPattern[16] =
|
||||
static const ULONG ExpandPattern[16] =
|
||||
{
|
||||
0x0F0F0F0F /* 0000 */,
|
||||
0x0F0F0FF0 /* 0001 */,
|
||||
@@ -180,7 +180,7 @@ DIB_DoRop(ULONG Rop, ULONG Dest, ULONG Source, ULONG Pattern)
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
ResultNibble = Rop & ExpandDest[Dest & 0xF] & ExpandSource[Source & 0xF] & ExpandPattern[Pattern & 0xF];
|
||||
Result |= (((ResultNibble & 0xFF000000) ? 0x8 : 0x0) | ((ResultNibble & 0x00FF0000) ? 0x4 : 0x0) |
|
||||
Result |= (((ResultNibble & 0xFF000000) ? 0x8 : 0x0) | ((ResultNibble & 0x00FF0000) ? 0x4 : 0x0) |
|
||||
((ResultNibble & 0x0000FF00) ? 0x2 : 0x0) | ((ResultNibble & 0x000000FF) ? 0x1 : 0x0)) << (i * 4);
|
||||
Dest >>= 4;
|
||||
Source >>= 4;
|
||||
|
||||
@@ -310,8 +310,8 @@ DIB_16BPP_BitBlt(PBLTINFO BltInfo)
|
||||
ULONG RoundedRight;
|
||||
|
||||
UsesSource = ROP4_USES_SOURCE(BltInfo->Rop4);
|
||||
UsesPattern = ROP4_USES_PATTERN(BltInfo->Rop4);
|
||||
|
||||
UsesPattern = ROP4_USES_PATTERN(BltInfo->Rop4);
|
||||
|
||||
RoundedRight = BltInfo->DestRect.right -
|
||||
((BltInfo->DestRect.right - BltInfo->DestRect.left) & 0x1);
|
||||
SourceY = BltInfo->SourcePoint.y;
|
||||
@@ -324,7 +324,7 @@ DIB_16BPP_BitBlt(PBLTINFO BltInfo)
|
||||
{
|
||||
if (BltInfo->PatternSurface)
|
||||
{
|
||||
PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %
|
||||
PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %
|
||||
BltInfo->PatternSurface->sizlBitmap.cy;
|
||||
}
|
||||
else
|
||||
@@ -337,11 +337,11 @@ DIB_16BPP_BitBlt(PBLTINFO BltInfo)
|
||||
for (DestY = BltInfo->DestRect.top; DestY < BltInfo->DestRect.bottom; DestY++)
|
||||
{
|
||||
SourceX = BltInfo->SourcePoint.x;
|
||||
|
||||
|
||||
for (DestX = BltInfo->DestRect.left; DestX < RoundedRight; DestX += 2, DestBits++, SourceX += 2)
|
||||
{
|
||||
Dest = *DestBits;
|
||||
|
||||
|
||||
if (UsesSource)
|
||||
{
|
||||
Source = DIB_GetSource(BltInfo->SourceSurface, SourceX, SourceY, BltInfo->XlateSourceToDest);
|
||||
@@ -369,7 +369,7 @@ DIB_16BPP_BitBlt(PBLTINFO BltInfo)
|
||||
if (BltInfo->PatternSurface)
|
||||
{
|
||||
Pattern = DIB_GetSource(BltInfo->PatternSurface, (DestX + BltInfo->BrushOrigin.x) % BltInfo->PatternSurface->sizlBitmap.cx, PatternY, BltInfo->XlatePatternToDest);
|
||||
}
|
||||
}
|
||||
|
||||
DIB_16BPP_PutPixel(BltInfo->DestSurface, DestX, DestY, DIB_DoRop(BltInfo->Rop4, Dest, Source, Pattern) & 0xFFFF);
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + 2);
|
||||
@@ -386,7 +386,7 @@ DIB_16BPP_BitBlt(PBLTINFO BltInfo)
|
||||
((BltInfo->DestRect.right - BltInfo->DestRect.left) << 1) +
|
||||
BltInfo->DestSurface->lDelta);
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -415,22 +415,22 @@ inline PIXEL average16(PIXEL a, PIXEL b)
|
||||
}*/ /* if */
|
||||
|
||||
// This one should be correct, but it's too long
|
||||
/*
|
||||
/*
|
||||
unsigned char r1, g1, b1, r2, g2, b2, rr, gr, br;
|
||||
unsigned short res;
|
||||
|
||||
|
||||
r1 = (a & 0xF800) >> 11;
|
||||
g1 = (a & 0x7E0) >> 5;
|
||||
b1 = (a & 0x1F);
|
||||
|
||||
|
||||
r2 = (b & 0xF800) >> 11;
|
||||
g2 = (b & 0x7E0) >> 5;
|
||||
b2 = (b & 0x1F);
|
||||
|
||||
|
||||
rr = (r1+r2) / 2;
|
||||
gr = (g1+g2) / 2;
|
||||
br = (b1+b2) / 2;
|
||||
|
||||
|
||||
res = (rr << 11) + (gr << 5) + br;
|
||||
|
||||
return res;
|
||||
@@ -473,7 +473,7 @@ FinalCopy16(PIXEL *Target, PIXEL *Source, PSPAN ClipSpans, UINT ClipSpansCount,
|
||||
UINT DestY, RECTL *DestRect)
|
||||
{
|
||||
LONG Left, Right;
|
||||
|
||||
|
||||
while (ClipSpans[*SpanIndex].Y < DestY
|
||||
|| (ClipSpans[*SpanIndex].Y == DestY
|
||||
&& ClipSpans[*SpanIndex].X + ClipSpans[*SpanIndex].Width < DestRect->left))
|
||||
@@ -561,7 +561,7 @@ BOOLEAN ScaleRectAvg16(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
} /* if */
|
||||
PrevSource = Source;
|
||||
} /* if */
|
||||
|
||||
|
||||
if (E >= Mid && PrevSourceAhead != (PIXEL *)((BYTE *)Source + SourceSurf->lDelta)) {
|
||||
int x;
|
||||
ScaleLineAvg16(ScanLineAhead, (PIXEL *)((BYTE *)Source + SourceSurf->lDelta), SourceRect->right - SourceRect->left, DestRect->right - DestRect->left);
|
||||
@@ -629,46 +629,46 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
case BMF_24BPP:
|
||||
case BMF_32BPP:
|
||||
/* Not implemented yet. */
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
case BMF_16BPP:
|
||||
return ScaleRectAvg16(DestSurf, SourceSurf, DestRect, SourceRect, MaskOrigin, BrushOrigin,
|
||||
ClipRegion, ColorTranslation, Mode);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
DPRINT1("DIB_16BPP_StretchBlt: Unhandled Source BPP: %u\n", BitsPerFormat(SourceSurf->iBitmapFormat));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
BOOLEAN
|
||||
DIB_16BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
RECTL* DestRect, POINTL *SourcePoint,
|
||||
XLATEOBJ *ColorTranslation, ULONG iTransColor)
|
||||
{
|
||||
ULONG RoundedRight, X, Y, SourceX, SourceY, Source, wd, Dest;
|
||||
ULONG *DestBits;
|
||||
|
||||
|
||||
RoundedRight = DestRect->right - ((DestRect->right - DestRect->left) & 0x1);
|
||||
SourceY = SourcePoint->y;
|
||||
DestBits = (ULONG*)(DestSurf->pvScan0 +
|
||||
(DestRect->left << 1) +
|
||||
DestRect->top * DestSurf->lDelta);
|
||||
wd = DestSurf->lDelta - ((DestRect->right - DestRect->left) << 1);
|
||||
|
||||
|
||||
for(Y = DestRect->top; Y < DestRect->bottom; Y++)
|
||||
{
|
||||
SourceX = SourcePoint->x;
|
||||
for(X = DestRect->left; X < RoundedRight; X += 2, DestBits++, SourceX += 2)
|
||||
{
|
||||
Dest = *DestBits;
|
||||
|
||||
|
||||
Source = DIB_GetSourceIndex(SourceSurf, SourceX, SourceY);
|
||||
if(Source != iTransColor)
|
||||
{
|
||||
@@ -685,7 +685,7 @@ DIB_16BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
|
||||
*DestBits = Dest;
|
||||
}
|
||||
|
||||
|
||||
if(X < DestRect->right)
|
||||
{
|
||||
Source = DIB_GetSourceIndex(SourceSurf, SourceX, SourceY);
|
||||
@@ -693,13 +693,13 @@ DIB_16BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
{
|
||||
*((USHORT*)DestBits) = (USHORT)XLATEOBJ_iXlate(ColorTranslation, Source);
|
||||
}
|
||||
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + 2);
|
||||
}
|
||||
SourceY++;
|
||||
DestBits = (ULONG*)((ULONG_PTR)DestBits + wd);
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -352,7 +352,7 @@ DIB_1BPP_BitBlt(PBLTINFO BltInfo)
|
||||
UsesSource = ROP4_USES_SOURCE(BltInfo->Rop4);
|
||||
UsesPattern = ROP4_USES_PATTERN(BltInfo->Rop4);
|
||||
|
||||
RoundedRight = BltInfo->DestRect.right -
|
||||
RoundedRight = BltInfo->DestRect.right -
|
||||
((BltInfo->DestRect.right - BltInfo->DestRect.left) & 31);
|
||||
SourceY = BltInfo->SourcePoint.y;
|
||||
|
||||
@@ -360,7 +360,7 @@ DIB_1BPP_BitBlt(PBLTINFO BltInfo)
|
||||
{
|
||||
if (BltInfo->PatternSurface)
|
||||
{
|
||||
PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %
|
||||
PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %
|
||||
BltInfo->PatternSurface->sizlBitmap.cy;
|
||||
}
|
||||
else
|
||||
@@ -383,7 +383,7 @@ DIB_1BPP_BitBlt(PBLTINFO BltInfo)
|
||||
{
|
||||
#if 0
|
||||
/* FIXME: This case is completely untested!!! */
|
||||
|
||||
|
||||
Dest = *((PBYTE)DestBits);
|
||||
NoBits = 31 - (DestX & 31);
|
||||
|
||||
@@ -402,12 +402,12 @@ DIB_1BPP_BitBlt(PBLTINFO BltInfo)
|
||||
Pattern |= (DIB_GetSource(PatternObj, (X + BrushOrigin.x + k) % PatternWidth, PatternY, BltInfo->XlatePatternToDest) << (31 - k));
|
||||
}
|
||||
|
||||
Dest = DIB_DoRop(Rop4, Dest, Source, Pattern);
|
||||
Dest = DIB_DoRop(Rop4, Dest, Source, Pattern);
|
||||
Dest &= ~((1 << (31 - NoBits)) - 1);
|
||||
Dest |= *((PBYTE)DestBits) & ((1 << (31 - NoBits)) - 1);
|
||||
|
||||
*DestBits = Dest;
|
||||
|
||||
|
||||
DestX += NoBits;
|
||||
SourceX += NoBits;
|
||||
#endif
|
||||
@@ -441,7 +441,7 @@ DIB_1BPP_BitBlt(PBLTINFO BltInfo)
|
||||
}
|
||||
}
|
||||
|
||||
*DestBits = DIB_DoRop(BltInfo->Rop4, Dest, Source, Pattern);
|
||||
*DestBits = DIB_DoRop(BltInfo->Rop4, Dest, Source, Pattern);
|
||||
}
|
||||
|
||||
if (DestX < BltInfo->DestRect.right)
|
||||
@@ -474,7 +474,7 @@ DIB_1BPP_BitBlt(PBLTINFO BltInfo)
|
||||
PatternY %= BltInfo->PatternSurface->sizlBitmap.cy;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -490,7 +490,7 @@ DIB_1BPP_StretchBlt (
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
BOOLEAN
|
||||
DIB_1BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
RECTL* DestRect, POINTL *SourcePoint,
|
||||
XLATEOBJ *ColorTranslation, ULONG iTransColor)
|
||||
|
||||
@@ -246,7 +246,7 @@ DIB_24BPP_BitBlt(PBLTINFO BltInfo)
|
||||
|
||||
UsesSource = ROP4_USES_SOURCE(BltInfo->Rop4);
|
||||
UsesPattern = ROP4_USES_PATTERN(BltInfo->Rop4);
|
||||
|
||||
|
||||
SourceY = BltInfo->SourcePoint.y;
|
||||
DestBits = (PBYTE)(
|
||||
BltInfo->DestSurface->pvScan0 +
|
||||
@@ -257,7 +257,7 @@ DIB_24BPP_BitBlt(PBLTINFO BltInfo)
|
||||
{
|
||||
if (BltInfo->PatternSurface)
|
||||
{
|
||||
PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %
|
||||
PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %
|
||||
BltInfo->PatternSurface->sizlBitmap.cy;
|
||||
}
|
||||
else
|
||||
@@ -269,11 +269,11 @@ DIB_24BPP_BitBlt(PBLTINFO BltInfo)
|
||||
for (DestY = BltInfo->DestRect.top; DestY < BltInfo->DestRect.bottom; DestY++)
|
||||
{
|
||||
SourceX = BltInfo->SourcePoint.x;
|
||||
|
||||
|
||||
for (DestX = BltInfo->DestRect.left; DestX < BltInfo->DestRect.right; DestX++, DestBits += 3, SourceX++)
|
||||
{
|
||||
Dest = *((PUSHORT)DestBits) + (*(DestBits + 2) << 16);
|
||||
|
||||
|
||||
if (UsesSource)
|
||||
{
|
||||
Source = DIB_GetSource(BltInfo->SourceSurface, SourceX, SourceY, BltInfo->XlateSourceToDest);
|
||||
@@ -298,7 +298,7 @@ DIB_24BPP_BitBlt(PBLTINFO BltInfo)
|
||||
DestBits -= (BltInfo->DestRect.right - BltInfo->DestRect.left) * 3;
|
||||
DestBits += BltInfo->DestSurface->lDelta;
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -312,20 +312,20 @@ BOOLEAN DIB_24BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
BOOLEAN
|
||||
DIB_24BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
RECTL* DestRect, POINTL *SourcePoint,
|
||||
XLATEOBJ *ColorTranslation, ULONG iTransColor)
|
||||
{
|
||||
ULONG X, Y, SourceX, SourceY, Source, wd, Dest;
|
||||
BYTE *DestBits;
|
||||
|
||||
|
||||
SourceY = SourcePoint->y;
|
||||
DestBits = (BYTE*)(DestSurf->pvScan0 +
|
||||
(DestRect->left << 2) +
|
||||
DestRect->top * DestSurf->lDelta);
|
||||
wd = DestSurf->lDelta - ((DestRect->right - DestRect->left) << 2);
|
||||
|
||||
|
||||
for(Y = DestRect->top; Y < DestRect->bottom; Y++)
|
||||
{
|
||||
SourceX = SourcePoint->x;
|
||||
@@ -339,11 +339,11 @@ DIB_24BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
*(DestBits + 2) = Dest >> 16;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SourceY++;
|
||||
DestBits = (BYTE*)((ULONG_PTR)DestBits + wd);
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -306,7 +306,7 @@ DIB_32BPP_BitBlt(PBLTINFO BltInfo)
|
||||
{
|
||||
if (BltInfo->PatternSurface)
|
||||
{
|
||||
PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %
|
||||
PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %
|
||||
BltInfo->PatternSurface->sizlBitmap.cy;
|
||||
}
|
||||
else
|
||||
@@ -314,15 +314,15 @@ DIB_32BPP_BitBlt(PBLTINFO BltInfo)
|
||||
Pattern = BltInfo->Brush->iSolidColor;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (DestY = BltInfo->DestRect.top; DestY < BltInfo->DestRect.bottom; DestY++)
|
||||
{
|
||||
SourceX = BltInfo->SourcePoint.x;
|
||||
|
||||
|
||||
for (DestX = BltInfo->DestRect.left; DestX < BltInfo->DestRect.right; DestX++, DestBits++, SourceX++)
|
||||
{
|
||||
Dest = *DestBits;
|
||||
|
||||
|
||||
if (UsesSource)
|
||||
{
|
||||
Source = DIB_GetSource(BltInfo->SourceSurface, SourceX, SourceY, BltInfo->XlateSourceToDest);
|
||||
@@ -347,7 +347,7 @@ DIB_32BPP_BitBlt(PBLTINFO BltInfo)
|
||||
((BltInfo->DestRect.right - BltInfo->DestRect.left) << 2) +
|
||||
BltInfo->DestSurface->lDelta);
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -398,13 +398,13 @@ void ScaleLineAvg32(PIXEL *Target, PIXEL *Source, int SrcWidth, int TgtWidth)
|
||||
while (skip-- > 0)
|
||||
*Target++ = *Source;
|
||||
}
|
||||
|
||||
|
||||
static BOOLEAN
|
||||
FinalCopy32(PIXEL *Target, PIXEL *Source, PSPAN ClipSpans, UINT ClipSpansCount, UINT *SpanIndex,
|
||||
UINT DestY, RECTL *DestRect)
|
||||
{
|
||||
LONG Left, Right;
|
||||
|
||||
|
||||
while (ClipSpans[*SpanIndex].Y < DestY
|
||||
|| (ClipSpans[*SpanIndex].Y == DestY
|
||||
&& ClipSpans[*SpanIndex].X + ClipSpans[*SpanIndex].Width < DestRect->left))
|
||||
@@ -458,7 +458,7 @@ BOOLEAN ScaleRectAvg32(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
UINT ClipSpansCount;
|
||||
UINT SpanIndex;
|
||||
LONG DestY;
|
||||
|
||||
|
||||
if (! ClipobjToSpans(&ClipSpans, &ClipSpansCount, ClipRegion, DestRect))
|
||||
{
|
||||
return FALSE;
|
||||
@@ -492,7 +492,7 @@ BOOLEAN ScaleRectAvg32(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
} /* if */
|
||||
PrevSource = Source;
|
||||
} /* if */
|
||||
|
||||
|
||||
if (E >= Mid && PrevSourceAhead != (PIXEL *)((BYTE *)Source + SourceSurf->lDelta)) {
|
||||
int x;
|
||||
ScaleLineAvg32(ScanLineAhead, (PIXEL *)((BYTE *)Source + SourceSurf->lDelta), SourceRect->right - SourceRect->left, DestRect->right - DestRect->left);
|
||||
@@ -500,7 +500,7 @@ BOOLEAN ScaleRectAvg32(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
ScanLine[x] = average32(ScanLine[x], ScanLineAhead[x]);
|
||||
PrevSourceAhead = (PIXEL *)((BYTE *)Source + SourceSurf->lDelta);
|
||||
} /* if */
|
||||
|
||||
|
||||
if (! FinalCopy32(Target, ScanLine, ClipSpans, ClipSpansCount, &SpanIndex, DestY, DestRect))
|
||||
{
|
||||
/* No more spans, everything else is clipped away, we're done */
|
||||
@@ -560,38 +560,38 @@ BOOLEAN DIB_32BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
case BMF_16BPP:
|
||||
case BMF_24BPP:
|
||||
/* Not implemented yet. */
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
||||
case BMF_32BPP:
|
||||
return ScaleRectAvg32(DestSurf, SourceSurf, DestRect, SourceRect, MaskOrigin, BrushOrigin,
|
||||
ClipRegion, ColorTranslation, Mode);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
//DPRINT1("DIB_32BPP_StretchBlt: Unhandled Source BPP: %u\n", BitsPerFormat(SourceSurf->iBitmapFormat));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
BOOLEAN
|
||||
DIB_32BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
RECTL* DestRect, POINTL *SourcePoint,
|
||||
XLATEOBJ *ColorTranslation, ULONG iTransColor)
|
||||
{
|
||||
ULONG X, Y, SourceX, SourceY, Source, wd;
|
||||
ULONG *DestBits;
|
||||
|
||||
|
||||
SourceY = SourcePoint->y;
|
||||
DestBits = (ULONG*)(DestSurf->pvScan0 +
|
||||
(DestRect->left << 2) +
|
||||
DestRect->top * DestSurf->lDelta);
|
||||
wd = DestSurf->lDelta - ((DestRect->right - DestRect->left) << 2);
|
||||
|
||||
|
||||
for(Y = DestRect->top; Y < DestRect->bottom; Y++)
|
||||
{
|
||||
SourceX = SourcePoint->x;
|
||||
@@ -603,11 +603,11 @@ DIB_32BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
*DestBits = XLATEOBJ_iXlate(ColorTranslation, Source);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SourceY++;
|
||||
DestBits = (ULONG*)((ULONG_PTR)DestBits + wd);
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -231,7 +231,7 @@ DIB_4BPP_BitBlt(PBLTINFO BltInfo)
|
||||
BOOLEAN UsesPattern;
|
||||
PULONG DestBits;
|
||||
LONG RoundedRight;
|
||||
static const ULONG ExpandSolidColor[16] =
|
||||
static const ULONG ExpandSolidColor[16] =
|
||||
{
|
||||
0x00000000 /* 0 */,
|
||||
0x11111111 /* 1 */,
|
||||
@@ -262,7 +262,7 @@ DIB_4BPP_BitBlt(PBLTINFO BltInfo)
|
||||
{
|
||||
if (BltInfo->PatternSurface)
|
||||
{
|
||||
PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %
|
||||
PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %
|
||||
BltInfo->PatternSurface->sizlBitmap.cy;
|
||||
}
|
||||
else
|
||||
@@ -292,7 +292,7 @@ DIB_4BPP_BitBlt(PBLTINFO BltInfo)
|
||||
if (BltInfo->PatternSurface)
|
||||
{
|
||||
Pattern = DIB_GetSource(BltInfo->PatternSurface, (DestX + BltInfo->BrushOrigin.x) % BltInfo->PatternSurface->sizlBitmap.cx, PatternY, BltInfo->XlatePatternToDest);
|
||||
}
|
||||
}
|
||||
|
||||
DIB_4BPP_PutPixel(BltInfo->DestSurface, DestX, DestY, DIB_DoRop(BltInfo->Rop4, Dest, Source, Pattern) & 0xF);
|
||||
|
||||
@@ -307,13 +307,13 @@ DIB_4BPP_BitBlt(PBLTINFO BltInfo)
|
||||
if (UsesSource)
|
||||
{
|
||||
Source =
|
||||
(DIB_GetSource(BltInfo->SourceSurface, SourceX + 1, SourceY, BltInfo->XlateSourceToDest)) |
|
||||
(DIB_GetSource(BltInfo->SourceSurface, SourceX + 1, SourceY, BltInfo->XlateSourceToDest)) |
|
||||
(DIB_GetSource(BltInfo->SourceSurface, SourceX + 0, SourceY, BltInfo->XlateSourceToDest) << 4) |
|
||||
(DIB_GetSource(BltInfo->SourceSurface, SourceX + 3, SourceY, BltInfo->XlateSourceToDest) << 8) |
|
||||
(DIB_GetSource(BltInfo->SourceSurface, SourceX + 3, SourceY, BltInfo->XlateSourceToDest) << 8) |
|
||||
(DIB_GetSource(BltInfo->SourceSurface, SourceX + 2, SourceY, BltInfo->XlateSourceToDest) << 12) |
|
||||
(DIB_GetSource(BltInfo->SourceSurface, SourceX + 5, SourceY, BltInfo->XlateSourceToDest) << 16) |
|
||||
(DIB_GetSource(BltInfo->SourceSurface, SourceX + 5, SourceY, BltInfo->XlateSourceToDest) << 16) |
|
||||
(DIB_GetSource(BltInfo->SourceSurface, SourceX + 4, SourceY, BltInfo->XlateSourceToDest) << 20) |
|
||||
(DIB_GetSource(BltInfo->SourceSurface, SourceX + 7, SourceY, BltInfo->XlateSourceToDest) << 24) |
|
||||
(DIB_GetSource(BltInfo->SourceSurface, SourceX + 7, SourceY, BltInfo->XlateSourceToDest) << 24) |
|
||||
(DIB_GetSource(BltInfo->SourceSurface, SourceX + 6, SourceY, BltInfo->XlateSourceToDest) << 28);
|
||||
}
|
||||
if (BltInfo->PatternSurface)
|
||||
@@ -327,7 +327,7 @@ DIB_4BPP_BitBlt(PBLTINFO BltInfo)
|
||||
Pattern |= DIB_GetSource(BltInfo->PatternSurface, (DestX + BltInfo->BrushOrigin.x + 7) % BltInfo->PatternSurface->sizlBitmap.cx, PatternY, BltInfo->XlatePatternToDest) << 24;
|
||||
Pattern |= DIB_GetSource(BltInfo->PatternSurface, (DestX + BltInfo->BrushOrigin.x + 6) % BltInfo->PatternSurface->sizlBitmap.cx, PatternY, BltInfo->XlatePatternToDest) << 28;
|
||||
}
|
||||
*DestBits = DIB_DoRop(BltInfo->Rop4, Dest, Source, Pattern);
|
||||
*DestBits = DIB_DoRop(BltInfo->Rop4, Dest, Source, Pattern);
|
||||
}
|
||||
|
||||
/* Process the rest of pixel on the line */
|
||||
@@ -341,9 +341,9 @@ DIB_4BPP_BitBlt(PBLTINFO BltInfo)
|
||||
if (BltInfo->PatternSurface)
|
||||
{
|
||||
Pattern = DIB_GetSource(BltInfo->PatternSurface, (DestX + BltInfo->BrushOrigin.x) % BltInfo->PatternSurface->sizlBitmap.cx, PatternY, BltInfo->XlatePatternToDest);
|
||||
}
|
||||
}
|
||||
DIB_4BPP_PutPixel(BltInfo->DestSurface, DestX, DestY, DIB_DoRop(BltInfo->Rop4, Dest, Source, Pattern) & 0xF);
|
||||
}
|
||||
}
|
||||
|
||||
SourceY++;
|
||||
if (BltInfo->PatternSurface)
|
||||
@@ -366,7 +366,7 @@ BOOLEAN DIB_4BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
BOOLEAN
|
||||
DIB_4BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
RECTL* DestRect, POINTL *SourcePoint,
|
||||
XLATEOBJ *ColorTranslation, ULONG iTransColor)
|
||||
|
||||
@@ -271,7 +271,7 @@ DIB_8BPP_BitBlt(PBLTINFO BltInfo)
|
||||
{
|
||||
if (BltInfo->PatternSurface)
|
||||
{
|
||||
PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %
|
||||
PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %
|
||||
BltInfo->PatternSurface->sizlBitmap.cy;
|
||||
}
|
||||
else
|
||||
@@ -311,7 +311,7 @@ DIB_8BPP_BitBlt(PBLTINFO BltInfo)
|
||||
Pattern |= DIB_GetSource(BltInfo->PatternSurface, (DestX + BltInfo->BrushOrigin.x + 3) % BltInfo->PatternSurface->sizlBitmap.cx, PatternY, BltInfo->XlatePatternToDest) << 24;
|
||||
}
|
||||
|
||||
*DestBits = DIB_DoRop(BltInfo->Rop4, Dest, Source, Pattern);
|
||||
*DestBits = DIB_DoRop(BltInfo->Rop4, Dest, Source, Pattern);
|
||||
}
|
||||
|
||||
if (DestX < BltInfo->DestRect.right)
|
||||
@@ -319,7 +319,7 @@ DIB_8BPP_BitBlt(PBLTINFO BltInfo)
|
||||
for (; DestX < BltInfo->DestRect.right; DestX++)
|
||||
{
|
||||
Dest = DIB_8BPP_GetPixel(BltInfo->DestSurface, DestX, DestY);
|
||||
|
||||
|
||||
if (UsesSource)
|
||||
{
|
||||
Source = DIB_GetSource(BltInfo->SourceSurface, SourceX + (DestX - BltInfo->DestRect.left), SourceY, BltInfo->XlateSourceToDest);
|
||||
@@ -397,7 +397,7 @@ FinalCopy8(PIXEL *Target, PIXEL *Source, PSPAN ClipSpans, UINT ClipSpansCount, U
|
||||
UINT DestY, RECTL *DestRect)
|
||||
{
|
||||
LONG Left, Right;
|
||||
|
||||
|
||||
while (ClipSpans[*SpanIndex].Y < DestY
|
||||
|| (ClipSpans[*SpanIndex].Y == DestY
|
||||
&& ClipSpans[*SpanIndex].X + ClipSpans[*SpanIndex].Width < DestRect->left))
|
||||
@@ -485,7 +485,7 @@ BOOLEAN ScaleRectAvg8(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
} /* if */
|
||||
PrevSource = Source;
|
||||
} /* if */
|
||||
|
||||
|
||||
if (E >= Mid && PrevSourceAhead != (PIXEL *)((BYTE *)Source + SourceSurf->lDelta)) {
|
||||
int x;
|
||||
ScaleLineAvg8(ScanLineAhead, (PIXEL *)((BYTE *)Source + SourceSurf->lDelta), SourceRect->right - SourceRect->left, DestRect->right - DestRect->left);
|
||||
@@ -493,7 +493,7 @@ BOOLEAN ScaleRectAvg8(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
ScanLine[x] = average8(ScanLine[x], ScanLineAhead[x]);
|
||||
PrevSourceAhead = (PIXEL *)((BYTE *)Source + SourceSurf->lDelta);
|
||||
} /* if */
|
||||
|
||||
|
||||
if (! FinalCopy8(Target, ScanLine, ClipSpans, ClipSpansCount, &SpanIndex, DestY, DestRect))
|
||||
{
|
||||
/* No more spans, everything else is clipped away, we're done */
|
||||
@@ -552,36 +552,36 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
case BMF_24BPP:
|
||||
case BMF_32BPP:
|
||||
/* Not implemented yet. */
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
||||
case BMF_8BPP:
|
||||
return ScaleRectAvg8(DestSurf, SourceSurf, DestRect, SourceRect, MaskOrigin, BrushOrigin,
|
||||
ClipRegion, ColorTranslation, Mode);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
DPRINT1("DIB_8BPP_StretchBlt: Unhandled Source BPP: %u\n", BitsPerFormat(SourceSurf->iBitmapFormat));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
BOOLEAN
|
||||
DIB_8BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
RECTL* DestRect, POINTL *SourcePoint,
|
||||
XLATEOBJ *ColorTranslation, ULONG iTransColor)
|
||||
{
|
||||
ULONG RoundedRight, X, Y, SourceX, SourceY, Source, wd, Dest;
|
||||
ULONG *DestBits;
|
||||
|
||||
|
||||
RoundedRight = DestRect->right - ((DestRect->right - DestRect->left) & 0x3);
|
||||
SourceY = SourcePoint->y;
|
||||
DestBits = (ULONG*)(DestSurf->pvScan0 + DestRect->left +
|
||||
(DestRect->top * DestSurf->lDelta));
|
||||
wd = DestSurf->lDelta - (DestRect->right - DestRect->left);
|
||||
|
||||
|
||||
for(Y = DestRect->top; Y < DestRect->bottom; Y++)
|
||||
{
|
||||
DestBits = (ULONG*)(DestSurf->pvScan0 + DestRect->left +
|
||||
@@ -590,7 +590,7 @@ DIB_8BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
for (X = DestRect->left; X < RoundedRight; X += 4, DestBits++)
|
||||
{
|
||||
Dest = *DestBits;
|
||||
|
||||
|
||||
Source = DIB_GetSourceIndex(SourceSurf, SourceX++, SourceY);
|
||||
if(Source != iTransColor)
|
||||
{
|
||||
@@ -604,14 +604,14 @@ DIB_8BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
Dest &= 0xFFFF00FF;
|
||||
Dest |= ((XLATEOBJ_iXlate(ColorTranslation, Source) << 8) & 0xFF00);
|
||||
}
|
||||
|
||||
|
||||
Source = DIB_GetSourceIndex(SourceSurf, SourceX++, SourceY);
|
||||
if(Source != iTransColor)
|
||||
{
|
||||
Dest &= 0xFF00FFFF;
|
||||
Dest |= ((XLATEOBJ_iXlate(ColorTranslation, Source) << 16) & 0xFF0000);
|
||||
}
|
||||
|
||||
|
||||
Source = DIB_GetSourceIndex(SourceSurf, SourceX++, SourceY);
|
||||
if(Source != iTransColor)
|
||||
{
|
||||
@@ -621,7 +621,7 @@ DIB_8BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
|
||||
*DestBits = Dest;
|
||||
}
|
||||
|
||||
|
||||
if(X < DestRect->right)
|
||||
{
|
||||
for (; X < DestRect->right; X++)
|
||||
@@ -636,7 +636,7 @@ DIB_8BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
||||
}
|
||||
SourceY++;
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ BOOL STDCALL EngIntersectRect(RECTL* prcDst, RECTL* prcSrc1, RECTL* prcSrc2)
|
||||
static BOOLEAN STDCALL
|
||||
BltMask(SURFOBJ* Dest,
|
||||
SURFOBJ* Source,
|
||||
SURFOBJ* Mask,
|
||||
SURFOBJ* Mask,
|
||||
XLATEOBJ* ColorTranslation,
|
||||
RECTL* DestRect,
|
||||
POINTL* SourcePoint,
|
||||
@@ -93,7 +93,7 @@ BltMask(SURFOBJ* Dest,
|
||||
SURFOBJ *PatternObj = NULL;
|
||||
PBITMAPOBJ PatternBitmap;
|
||||
ULONG PatternWidth = 0, PatternHeight = 0, PatternY = 0;
|
||||
|
||||
|
||||
if (Mask == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
@@ -126,10 +126,10 @@ BltMask(SURFOBJ* Dest,
|
||||
{
|
||||
lMask = tMask;
|
||||
c8 = SourcePoint->x & 0x07;
|
||||
|
||||
|
||||
if(PatternBitmap != NULL)
|
||||
PatternY = (DestRect->top + j) % PatternHeight;
|
||||
|
||||
|
||||
for (i = 0; i < dx; i++)
|
||||
{
|
||||
if (0 != (*lMask & maskbit[c8]))
|
||||
@@ -165,7 +165,7 @@ BltMask(SURFOBJ* Dest,
|
||||
static BOOLEAN STDCALL
|
||||
BltPatCopy(SURFOBJ* Dest,
|
||||
SURFOBJ* Source,
|
||||
SURFOBJ* Mask,
|
||||
SURFOBJ* Mask,
|
||||
XLATEOBJ* ColorTranslation,
|
||||
RECTL* DestRect,
|
||||
POINTL* SourcePoint,
|
||||
@@ -375,7 +375,7 @@ EngBitBlt(SURFOBJ *DestObj,
|
||||
OutputRect.right = DestRect->right + Translate.x;
|
||||
OutputRect.top = DestRect->top + Translate.y;
|
||||
OutputRect.bottom = DestRect->bottom + Translate.y;
|
||||
|
||||
|
||||
if(BrushOrigin)
|
||||
{
|
||||
AdjustedBrushOrigin.x = BrushOrigin->x + Translate.x;
|
||||
@@ -644,7 +644,7 @@ EngStretchBlt(
|
||||
)
|
||||
{
|
||||
// www.osr.com/ddk/graphics/gdifncs_0bs7.htm
|
||||
|
||||
|
||||
POINTL InputPoint;
|
||||
RECTL InputRect;
|
||||
RECTL OutputRect;
|
||||
@@ -669,7 +669,7 @@ EngStretchBlt(
|
||||
|
||||
InputPoint.x = InputRect.left + Translate.x;
|
||||
InputPoint.y = InputRect.top + Translate.y;
|
||||
|
||||
|
||||
OutputRect = *prclDest;
|
||||
|
||||
/* Check for degenerate case: if height or width of OutputRect is 0 pixels there's
|
||||
@@ -690,7 +690,7 @@ EngStretchBlt(
|
||||
OutputRect.right = prclDest->right + Translate.x;
|
||||
OutputRect.top = prclDest->top + Translate.y;
|
||||
OutputRect.bottom = prclDest->bottom + Translate.y;
|
||||
|
||||
|
||||
if (NULL != BrushOrigin)
|
||||
{
|
||||
AdjustedBrushOrigin.x = BrushOrigin->x + Translate.x;
|
||||
@@ -707,8 +707,8 @@ EngStretchBlt(
|
||||
DPRINT("EngStretchBlt isn't capable of handling mask yet.\n");
|
||||
IntEngLeave(&EnterLeaveDest);
|
||||
IntEngLeave(&EnterLeaveSource);
|
||||
|
||||
return FALSE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -803,7 +803,7 @@ IntEngStretchBlt(BITMAPOBJ *DestObj,
|
||||
static BOOLEAN STDCALL
|
||||
AlphaBltMask(SURFOBJ* Dest,
|
||||
SURFOBJ* Source,
|
||||
SURFOBJ* Mask,
|
||||
SURFOBJ* Mask,
|
||||
XLATEOBJ* ColorTranslation,
|
||||
XLATEOBJ* SrcColorTranslation,
|
||||
RECTL* DestRect,
|
||||
@@ -826,7 +826,7 @@ AlphaBltMask(SURFOBJ* Dest,
|
||||
r = (int)GetRValue(BrushColor);
|
||||
g = (int)GetGValue(BrushColor);
|
||||
b = (int)GetBValue(BrushColor);
|
||||
|
||||
|
||||
tMask = Mask->pvScan0 + (SourcePoint->y * Mask->lDelta) + SourcePoint->x;
|
||||
for (j = 0; j < dy; j++)
|
||||
{
|
||||
@@ -845,7 +845,7 @@ AlphaBltMask(SURFOBJ* Dest,
|
||||
Background = DIB_GetSource(Dest, DestRect->left + i, DestRect->top + j,
|
||||
SrcColorTranslation);
|
||||
|
||||
NewColor =
|
||||
NewColor =
|
||||
RGB((*lMask * (r - GetRValue(Background)) >> 8) + GetRValue(Background),
|
||||
(*lMask * (g - GetGValue(Background)) >> 8) + GetGValue(Background),
|
||||
(*lMask * (b - GetBValue(Background)) >> 8) + GetBValue(Background));
|
||||
@@ -976,7 +976,7 @@ EngMaskBitBlt(SURFOBJ *DestObj,
|
||||
OutputRect.right = DestRect->right + Translate.x;
|
||||
OutputRect.top = DestRect->top + Translate.y;
|
||||
OutputRect.bottom = DestRect->bottom + Translate.y;
|
||||
|
||||
|
||||
if(BrushOrigin)
|
||||
{
|
||||
AdjustedBrushOrigin.x = BrushOrigin->x + Translate.x;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id$
|
||||
*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* PURPOSE: GDI Clipping Functions
|
||||
@@ -206,13 +206,13 @@ CLIPOBJ* FASTCALL
|
||||
IntEngCreateClipRegion(ULONG count, PRECTL pRect, PRECTL rcBounds)
|
||||
{
|
||||
CLIPGDI *Clip;
|
||||
|
||||
|
||||
if(count > 1)
|
||||
{
|
||||
RECTL *dest;
|
||||
|
||||
|
||||
Clip = EngAllocMem(0, sizeof(CLIPGDI) + ((count - 1) * sizeof(RECTL)), TAG_CLIPOBJ);
|
||||
|
||||
|
||||
if(Clip != NULL)
|
||||
{
|
||||
Clip->EnumRects.c = count;
|
||||
@@ -228,7 +228,7 @@ IntEngCreateClipRegion(ULONG count, PRECTL pRect, PRECTL rcBounds)
|
||||
Clip->ClipObj.iFComplexity = ((Clip->EnumRects.c <= 4) ? FC_RECT4 : FC_COMPLEX);
|
||||
Clip->ClipObj.iMode = TC_RECTANGLES;
|
||||
Clip->ClipObj.rclBounds = *rcBounds;
|
||||
|
||||
|
||||
return GDIToObj(Clip, CLIP);
|
||||
}
|
||||
}
|
||||
@@ -241,14 +241,14 @@ IntEngCreateClipRegion(ULONG count, PRECTL pRect, PRECTL rcBounds)
|
||||
Clip->EnumRects.c = 1;
|
||||
Clip->EnumOrder = CD_ANY;
|
||||
Clip->EnumRects.arcl[0] = *rcBounds;
|
||||
|
||||
|
||||
Clip->ClipObj.iDComplexity = (((rcBounds->top == rcBounds->bottom) &&
|
||||
(rcBounds->left == rcBounds->right))
|
||||
? DC_TRIVIAL : DC_RECT);
|
||||
Clip->ClipObj.iFComplexity = FC_RECT;
|
||||
Clip->ClipObj.iMode = TC_RECTANGLES;
|
||||
Clip->ClipObj.rclBounds = *rcBounds;
|
||||
|
||||
|
||||
return GDIToObj(Clip, CLIP);
|
||||
}
|
||||
}
|
||||
@@ -358,7 +358,7 @@ CLIPOBJ_bEnum(IN CLIPOBJ* ClipObj,
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/* copy rectangles */
|
||||
src = ClipGDI->EnumRects.arcl + ClipGDI->EnumPos;
|
||||
for(i = 0, dest = pERects->arcl;
|
||||
@@ -367,7 +367,7 @@ CLIPOBJ_bEnum(IN CLIPOBJ* ClipObj,
|
||||
{
|
||||
*dest = *src;
|
||||
}
|
||||
|
||||
|
||||
pERects->c = nCopy;
|
||||
|
||||
ClipGDI->EnumPos+=nCopy;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id$
|
||||
*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* PURPOSE: GDI Driver Brush Functions
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id$
|
||||
*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* PURPOSE: GDI Driver Device Functions
|
||||
|
||||
@@ -37,7 +37,7 @@ EngCreateEvent ( OUT PEVENT *Event )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
KeInitializeEvent((PKEVENT)(*Event), SynchronizationEvent, FALSE);
|
||||
KeInitializeEvent((PKEVENT)(*Event), SynchronizationEvent, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ EngMapEvent(IN HDEV Dev,
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return (PEVENT)Event;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id$
|
||||
*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* PURPOSE: Engine floating point functions
|
||||
@@ -48,7 +48,7 @@ EngSaveFloatingPointState(OUT VOID *Buffer,
|
||||
KFLOATING_SAVE TempBuffer;
|
||||
NTSTATUS Status;
|
||||
if (Buffer == NULL || BufferSize == 0)
|
||||
{
|
||||
{
|
||||
/* Check for floating point support. */
|
||||
Status = KeSaveFloatingPointState(&TempBuffer);
|
||||
if (Status != STATUS_SUCCESS)
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id$
|
||||
*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* PURPOSE: GDI Driver Gradient Functions
|
||||
@@ -42,8 +42,8 @@ const LONG LINC[2] = {-1, 1};
|
||||
#define MOVERECT(r,x,y) \
|
||||
r.left += x; r.right += x; \
|
||||
r.top += y; r.bottom += y
|
||||
|
||||
|
||||
|
||||
|
||||
/* Horizontal/Vertical gradients */
|
||||
#define HVINITCOL(Col, id) \
|
||||
c[id] = v1->Col >> 8; \
|
||||
@@ -81,17 +81,17 @@ IntEngGradientFillRect(
|
||||
POINTL Translate;
|
||||
INTENG_ENTER_LEAVE EnterLeave;
|
||||
LONG y, dy, c[3], dc[3], ec[3], ic[3];
|
||||
|
||||
|
||||
v1 = (pVertex + gRect->UpperLeft);
|
||||
v2 = (pVertex + gRect->LowerRight);
|
||||
|
||||
|
||||
rcGradient.left = min(v1->x, v2->x);
|
||||
rcGradient.right = max(v1->x, v2->x);
|
||||
rcGradient.top = min(v1->y, v2->y);
|
||||
rcGradient.bottom = max(v1->y, v2->y);
|
||||
rcSG = rcGradient;
|
||||
MOVERECT(rcSG, pptlDitherOrg->x, pptlDitherOrg->y);
|
||||
|
||||
|
||||
if(Horizontal)
|
||||
{
|
||||
dy = abs(rcGradient.right - rcGradient.left);
|
||||
@@ -100,12 +100,12 @@ IntEngGradientFillRect(
|
||||
{
|
||||
dy = abs(rcGradient.bottom - rcGradient.top);
|
||||
}
|
||||
|
||||
|
||||
if(!IntEngEnter(&EnterLeave, psoDest, &rcSG, FALSE, &Translate, &OutputObj))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if((v1->Red != v2->Red || v1->Green != v2->Green || v1->Blue != v2->Blue) && dy > 1)
|
||||
{
|
||||
CLIPOBJ_cEnumStart(pco, FALSE, CT_RECTANGLES, CD_RIGHTDOWN, 0);
|
||||
@@ -113,7 +113,7 @@ IntEngGradientFillRect(
|
||||
{
|
||||
RECT FillRect;
|
||||
ULONG Color;
|
||||
|
||||
|
||||
if(Horizontal)
|
||||
{
|
||||
EnumMore = CLIPOBJ_bEnum(pco, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum);
|
||||
@@ -124,7 +124,7 @@ IntEngGradientFillRect(
|
||||
HVINITCOL(Red, 0);
|
||||
HVINITCOL(Green, 1);
|
||||
HVINITCOL(Blue, 2);
|
||||
|
||||
|
||||
for(y = rcSG.left; y < FillRect.right; y++)
|
||||
{
|
||||
if(y >= FillRect.left)
|
||||
@@ -139,10 +139,10 @@ IntEngGradientFillRect(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
/* vertical */
|
||||
EnumMore = CLIPOBJ_bEnum(pco, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum);
|
||||
for (i = 0; i < RectEnum.c && RectEnum.arcl[i].top <= rcSG.bottom; i++)
|
||||
@@ -152,7 +152,7 @@ IntEngGradientFillRect(
|
||||
HVINITCOL(Red, 0);
|
||||
HVINITCOL(Green, 1);
|
||||
HVINITCOL(Blue, 2);
|
||||
|
||||
|
||||
for(y = rcSG.top; y < FillRect.bottom; y++)
|
||||
{
|
||||
if(y >= FillRect.top)
|
||||
@@ -167,19 +167,19 @@ IntEngGradientFillRect(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} while(EnumMore);
|
||||
|
||||
return IntEngLeave(&EnterLeave);
|
||||
}
|
||||
|
||||
|
||||
/* rectangle has only one color, no calculation required */
|
||||
CLIPOBJ_cEnumStart(pco, FALSE, CT_RECTANGLES, CD_RIGHTDOWN, 0);
|
||||
do
|
||||
{
|
||||
RECT FillRect;
|
||||
ULONG Color = XLATEOBJ_iXlate(pxlo, RGB(v1->Red, v1->Green, v1->Blue));
|
||||
|
||||
|
||||
EnumMore = CLIPOBJ_bEnum(pco, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum);
|
||||
for (i = 0; i < RectEnum.c && RectEnum.arcl[i].top <= rcSG.bottom; i++)
|
||||
{
|
||||
@@ -193,7 +193,7 @@ IntEngGradientFillRect(
|
||||
}
|
||||
}
|
||||
} while(EnumMore);
|
||||
|
||||
|
||||
return IntEngLeave(&EnterLeave);
|
||||
}
|
||||
|
||||
@@ -210,7 +210,7 @@ IntEngGradientFillRect(
|
||||
x[line] += incx[line]; \
|
||||
sx[line] += incx[line]; \
|
||||
ex[line] -= dy[line]; \
|
||||
}
|
||||
}
|
||||
#define S_GOLINE(a,b,line) \
|
||||
if(y >= a->y && y <= b->y) \
|
||||
{
|
||||
@@ -277,7 +277,7 @@ IntEngGradientFillRect(
|
||||
x[line] += incx[line]; \
|
||||
sx[line] += incx[line]; \
|
||||
ex[line] -= dy[line]; \
|
||||
}
|
||||
}
|
||||
#define GOLINE(a,b,line) \
|
||||
if(y >= a->y && y <= b->y) \
|
||||
{
|
||||
@@ -321,17 +321,17 @@ IntEngGradientFillTriangle(
|
||||
INTENG_ENTER_LEAVE EnterLeave;
|
||||
RECTL FillRect;
|
||||
ULONG Color;
|
||||
|
||||
|
||||
BOOL sx[NLINES];
|
||||
LONG x[NLINES], dx[NLINES], dy[NLINES], incx[NLINES], ex[NLINES], destx[NLINES];
|
||||
LONG c[NLINES][3], dc[NLINES][3], ec[NLINES][3], ic[NLINES][3]; /* colors on lines */
|
||||
LONG g, gx, gxi, gc[3], gd[3], ge[3], gi[3]; /* colors in triangle */
|
||||
LONG sy, y, bt;
|
||||
|
||||
|
||||
v1 = (pVertex + gTriangle->Vertex1);
|
||||
v2 = (pVertex + gTriangle->Vertex2);
|
||||
v3 = (pVertex + gTriangle->Vertex3);
|
||||
|
||||
|
||||
/* bubble sort */
|
||||
if(SMALLER(v2,v1))
|
||||
{
|
||||
@@ -347,14 +347,14 @@ IntEngGradientFillTriangle(
|
||||
SWAP(v1,v2,t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DbgPrint("Triangle: (%i,%i) (%i,%i) (%i,%i)\n", v1->x, v1->y, v2->x, v2->y, v3->x, v3->y);
|
||||
|
||||
|
||||
if(!IntEngEnter(&EnterLeave, psoDest, &FillRect, FALSE, &Translate, &OutputObj))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(VCMPCLRS(v1, v2, v3))
|
||||
{
|
||||
CLIPOBJ_cEnumStart(pco, FALSE, CT_RECTANGLES, CD_RIGHTDOWN, 0);
|
||||
@@ -366,44 +366,44 @@ IntEngGradientFillTriangle(
|
||||
if(IntGdiIntersectRect((PRECT)&FillRect, (PRECT)&RectEnum.arcl[i], (PRECT)prclExtents))
|
||||
{
|
||||
BOOL InY;
|
||||
|
||||
|
||||
DOINIT(v1, v3, 0);
|
||||
DOINIT(v1, v2, 1);
|
||||
DOINIT(v2, v3, 2);
|
||||
|
||||
|
||||
y = v1->y;
|
||||
sy = v1->y + pptlDitherOrg->y;
|
||||
bt = min(v3->y + pptlDitherOrg->y, FillRect.bottom);
|
||||
|
||||
|
||||
while(sy < bt)
|
||||
{
|
||||
InY = !(sy < FillRect.top || sy >= FillRect.bottom);
|
||||
GOLINE(v1, v3, 0);
|
||||
DOLINE(v1, v3, 0);
|
||||
ENDLINE(v1, v3, 0);
|
||||
|
||||
|
||||
GOLINE(v1, v2, 1);
|
||||
DOLINE(v1, v2, 1);
|
||||
FILLLINE(0, 1);
|
||||
ENDLINE(v1, v2, 1);
|
||||
|
||||
|
||||
GOLINE(v2, v3, 2);
|
||||
DOLINE(v2, v3, 2);
|
||||
FILLLINE(0, 2);
|
||||
ENDLINE(23, v3, 2);
|
||||
|
||||
|
||||
y++;
|
||||
sy++;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while(EnumMore);
|
||||
|
||||
|
||||
return IntEngLeave(&EnterLeave);
|
||||
}
|
||||
|
||||
|
||||
/* fill triangle with one solid color */
|
||||
|
||||
|
||||
Color = XLATEOBJ_iXlate(pxlo, RGB(v1->Red >> 8, v1->Green >> 8, v1->Blue >> 8));
|
||||
CLIPOBJ_cEnumStart(pco, FALSE, CT_RECTANGLES, CD_RIGHTDOWN, 0);
|
||||
do
|
||||
@@ -416,34 +416,34 @@ IntEngGradientFillTriangle(
|
||||
S_INITLINE(v1, v3, 0);
|
||||
S_INITLINE(v1, v2, 1);
|
||||
S_INITLINE(v2, v3, 2);
|
||||
|
||||
|
||||
y = v1->y;
|
||||
sy = v1->y + pptlDitherOrg->y;
|
||||
bt = min(v3->y + pptlDitherOrg->y, FillRect.bottom);
|
||||
|
||||
|
||||
while(sy < bt)
|
||||
{
|
||||
S_GOLINE(v1, v3, 0);
|
||||
S_DOLINE(v1, v3, 0);
|
||||
S_ENDLINE(v1, v3, 0);
|
||||
|
||||
|
||||
S_GOLINE(v1, v2, 1);
|
||||
S_DOLINE(v1, v2, 1);
|
||||
S_FILLLINE(0, 1);
|
||||
S_ENDLINE(v1, v2, 1);
|
||||
|
||||
|
||||
S_GOLINE(v2, v3, 2);
|
||||
S_DOLINE(v2, v3, 2);
|
||||
S_FILLLINE(0, 2);
|
||||
S_ENDLINE(23, v3, 2);
|
||||
|
||||
|
||||
y++;
|
||||
sy++;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while(EnumMore);
|
||||
|
||||
|
||||
return IntEngLeave(&EnterLeave);
|
||||
}
|
||||
|
||||
@@ -475,7 +475,7 @@ EngGradientFill(
|
||||
IN ULONG ulMode)
|
||||
{
|
||||
ULONG i;
|
||||
|
||||
|
||||
switch(ulMode)
|
||||
{
|
||||
case GRADIENT_FILL_RECT_H:
|
||||
@@ -534,22 +534,22 @@ IntEngGradientFill(
|
||||
|
||||
psoDest = &pboDest->SurfObj;
|
||||
ASSERT(psoDest);
|
||||
|
||||
|
||||
MouseSafetyOnDrawStart(
|
||||
psoDest,
|
||||
pco->rclBounds.left,
|
||||
pco->rclBounds.top,
|
||||
pco->rclBounds.top,
|
||||
pco->rclBounds.right,
|
||||
pco->rclBounds.bottom);
|
||||
if(pboDest->flHooks & HOOK_GRADIENTFILL)
|
||||
{
|
||||
Ret = GDIDEVFUNCS(psoDest).GradientFill(
|
||||
psoDest, pco, pxlo, pVertex, nVertex, pMesh, nMesh,
|
||||
psoDest, pco, pxlo, pVertex, nVertex, pMesh, nMesh,
|
||||
prclExtents, pptlDitherOrg, ulMode);
|
||||
MouseSafetyOnDrawEnd(psoDest);
|
||||
return Ret;
|
||||
}
|
||||
Ret = EngGradientFill(psoDest, pco, pxlo, pVertex, nVertex, pMesh, nMesh, prclExtents,
|
||||
Ret = EngGradientFill(psoDest, pco, pxlo, pVertex, nVertex, pMesh, nMesh, prclExtents,
|
||||
pptlDitherOrg, ulMode);
|
||||
MouseSafetyOnDrawEnd(psoDest);
|
||||
return Ret;
|
||||
|
||||
@@ -45,12 +45,12 @@ MouseSafetyOnDrawStart(SURFOBJ *SurfObj, LONG HazardX1,
|
||||
ASSERT(SurfObj != NULL);
|
||||
|
||||
ppdev = GDIDEV(SurfObj);
|
||||
|
||||
|
||||
if(ppdev == NULL)
|
||||
{
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
|
||||
pgp = &ppdev->Pointer;
|
||||
|
||||
if (SPS_ACCEPT_NOEXCLUDE == pgp->Status ||
|
||||
@@ -74,7 +74,7 @@ MouseSafetyOnDrawStart(SURFOBJ *SurfObj, LONG HazardX1,
|
||||
{
|
||||
/* already hidden */
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (pgp->Exclude.right >= HazardX1
|
||||
&& pgp->Exclude.left <= HazardX2
|
||||
@@ -103,7 +103,7 @@ MouseSafetyOnDrawEnd(SURFOBJ *SurfObj)
|
||||
ASSERT(SurfObj != NULL);
|
||||
|
||||
ppdev = GDIDEV(SurfObj);
|
||||
|
||||
|
||||
if(ppdev == NULL)
|
||||
{
|
||||
return(FALSE);
|
||||
@@ -150,7 +150,7 @@ IntHideMousePointer(GDIDEVICE *ppdev, SURFOBJ *DestSurface)
|
||||
}
|
||||
|
||||
pgp->Enabled = FALSE;
|
||||
|
||||
|
||||
pt.x = pgp->Pos.x - pgp->HotSpot.x;
|
||||
pt.y = pgp->Pos.y - pgp->HotSpot.y;
|
||||
|
||||
@@ -204,7 +204,7 @@ IntShowMousePointer(GDIDEVICE *ppdev, SURFOBJ *DestSurface)
|
||||
}
|
||||
|
||||
pgp->Enabled = TRUE;
|
||||
|
||||
|
||||
pt.x = pgp->Pos.x - pgp->HotSpot.x;
|
||||
pt.y = pgp->Pos.y - pgp->HotSpot.y;
|
||||
|
||||
@@ -371,7 +371,7 @@ EngSetPointerShape(
|
||||
pgp->Pos.x = x;
|
||||
pgp->Pos.y = y;
|
||||
}
|
||||
|
||||
|
||||
pgp->Size.cx = abs(psoMask->lDelta) << 3;
|
||||
pgp->Size.cy = (psoMask->cjBits / abs(psoMask->lDelta)) >> 1;
|
||||
|
||||
@@ -467,7 +467,7 @@ EngSetPointerShape(
|
||||
if(x != -1)
|
||||
{
|
||||
IntShowMousePointer(ppdev, pso);
|
||||
|
||||
|
||||
if (prcl != NULL)
|
||||
{
|
||||
prcl->left = x - pgp->HotSpot.x;
|
||||
@@ -500,9 +500,9 @@ EngMovePointer(
|
||||
ppdev = GDIDEV(pso);
|
||||
|
||||
ASSERT(ppdev);
|
||||
|
||||
|
||||
pgp = &ppdev->Pointer;
|
||||
|
||||
|
||||
IntHideMousePointer(ppdev, pso);
|
||||
if (x != -1)
|
||||
{
|
||||
@@ -520,7 +520,7 @@ EngMovePointer(
|
||||
}
|
||||
} else if (prcl != NULL)
|
||||
prcl->left = prcl->top = prcl->right = prcl->bottom = -1;
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id$
|
||||
*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* PURPOSE: GDI Internal Objects
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id$
|
||||
*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* PURPOSE: GDI Driver Paint Functions
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id$
|
||||
*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* PURPOSE: GDI Palette Functions
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id$
|
||||
*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* PURPOSE: GDI Driver Surace Functions
|
||||
@@ -98,7 +98,7 @@ EngCreateDeviceBitmap(IN DHSURF dhsurf,
|
||||
return NewBitmap;
|
||||
}
|
||||
|
||||
VOID Decompress4bpp(SIZEL Size, BYTE *CompressedBits, BYTE *UncompressedBits, LONG Delta)
|
||||
VOID Decompress4bpp(SIZEL Size, BYTE *CompressedBits, BYTE *UncompressedBits, LONG Delta)
|
||||
{
|
||||
int x = 0;
|
||||
int y = Size.cy - 1;
|
||||
@@ -155,7 +155,7 @@ VOID Decompress4bpp(SIZEL Size, BYTE *CompressedBits, BYTE *UncompressedBits, LO
|
||||
}
|
||||
}
|
||||
|
||||
VOID Decompress8bpp(SIZEL Size, BYTE *CompressedBits, BYTE *UncompressedBits, LONG Delta)
|
||||
VOID Decompress8bpp(SIZEL Size, BYTE *CompressedBits, BYTE *UncompressedBits, LONG Delta)
|
||||
{
|
||||
int x = 0;
|
||||
int y = Size.cy - 1;
|
||||
@@ -331,7 +331,7 @@ EngCreateBitmap(IN SIZEL Size,
|
||||
IN PVOID Bits)
|
||||
{
|
||||
HBITMAP NewBitmap;
|
||||
|
||||
|
||||
NewBitmap = IntCreateBitmap(Size, Width, Format, Flags, Bits);
|
||||
if ( !NewBitmap )
|
||||
return 0;
|
||||
@@ -492,7 +492,7 @@ EngLockSurface(IN HSURF Surface)
|
||||
{
|
||||
return &bmp->SurfObj;
|
||||
}
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id$
|
||||
*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* PURPOSE: GDI TransparentBlt Function
|
||||
@@ -45,20 +45,20 @@ EngTransparentBlt(SURFOBJ *Dest,
|
||||
SURFOBJ *InputObj, *OutputObj;
|
||||
RECTL OutputRect, InputRect;
|
||||
POINTL Translate, InputPoint;
|
||||
|
||||
|
||||
InputRect.left = 0;
|
||||
InputRect.right = DestRect->right - DestRect->left;
|
||||
InputRect.top = 0;
|
||||
InputRect.bottom = DestRect->bottom - DestRect->top;
|
||||
|
||||
|
||||
if(!IntEngEnter(&EnterLeaveSource, Source, &InputRect, TRUE, &Translate, &InputObj))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
InputPoint.x = SourceRect->left + Translate.x;
|
||||
InputPoint.y = SourceRect->top + Translate.y;
|
||||
|
||||
|
||||
OutputRect = *DestRect;
|
||||
if(Clip)
|
||||
{
|
||||
@@ -85,7 +85,7 @@ EngTransparentBlt(SURFOBJ *Dest,
|
||||
OutputRect.bottom = Clip->rclBounds.bottom;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Check for degenerate case: if height or width of OutputRect is 0 pixels there's
|
||||
nothing to do */
|
||||
if(OutputRect.right <= OutputRect.left || OutputRect.bottom <= OutputRect.top)
|
||||
@@ -93,20 +93,20 @@ EngTransparentBlt(SURFOBJ *Dest,
|
||||
IntEngLeave(&EnterLeaveSource);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
if(!IntEngEnter(&EnterLeaveDest, Dest, &OutputRect, FALSE, &Translate, &OutputObj))
|
||||
{
|
||||
IntEngLeave(&EnterLeaveSource);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
OutputRect.left = DestRect->left + Translate.x;
|
||||
OutputRect.right = DestRect->right + Translate.x;
|
||||
OutputRect.top = DestRect->top + Translate.y;
|
||||
OutputRect.bottom = DestRect->bottom + Translate.y;
|
||||
|
||||
|
||||
ClippingType = (Clip ? Clip->iDComplexity : DC_TRIVIAL);
|
||||
|
||||
|
||||
switch(ClippingType)
|
||||
{
|
||||
case DC_TRIVIAL:
|
||||
@@ -119,7 +119,7 @@ EngTransparentBlt(SURFOBJ *Dest,
|
||||
{
|
||||
RECTL ClipRect, CombinedRect;
|
||||
POINTL Pt;
|
||||
|
||||
|
||||
ClipRect.left = Clip->rclBounds.left + Translate.x;
|
||||
ClipRect.right = Clip->rclBounds.right + Translate.x;
|
||||
ClipRect.top = Clip->rclBounds.top + Translate.y;
|
||||
@@ -137,7 +137,7 @@ EngTransparentBlt(SURFOBJ *Dest,
|
||||
RECT_ENUM RectEnum;
|
||||
BOOL EnumMore;
|
||||
POINTL Pt;
|
||||
|
||||
|
||||
if(OutputObj == InputObj)
|
||||
{
|
||||
if(OutputRect.top < InputPoint.y)
|
||||
@@ -153,7 +153,7 @@ EngTransparentBlt(SURFOBJ *Dest,
|
||||
{
|
||||
Direction = CD_ANY;
|
||||
}
|
||||
|
||||
|
||||
CLIPOBJ_cEnumStart(Clip, FALSE, CT_RECTANGLES, Direction, 0);
|
||||
do
|
||||
{
|
||||
@@ -161,7 +161,7 @@ EngTransparentBlt(SURFOBJ *Dest,
|
||||
for (i = 0; i < RectEnum.c; i++)
|
||||
{
|
||||
RECTL ClipRect, CombinedRect;
|
||||
|
||||
|
||||
ClipRect.left = RectEnum.arcl[i].left + Translate.x;
|
||||
ClipRect.right = RectEnum.arcl[i].right + Translate.x;
|
||||
ClipRect.top = RectEnum.arcl[i].top + Translate.y;
|
||||
@@ -185,10 +185,10 @@ EngTransparentBlt(SURFOBJ *Dest,
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
IntEngLeave(&EnterLeaveDest);
|
||||
IntEngLeave(&EnterLeaveSource);
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@ IntEngTransparentBlt(BITMAPOBJ *DestObj,
|
||||
RECTL OutputRect, InputClippedRect;
|
||||
SURFOBJ *DestSurf;
|
||||
SURFOBJ *SourceSurf;
|
||||
|
||||
|
||||
ASSERT(DestObj);
|
||||
ASSERT(SourceObj);
|
||||
ASSERT(DestRect);
|
||||
@@ -228,7 +228,7 @@ IntEngTransparentBlt(BITMAPOBJ *DestObj,
|
||||
InputClippedRect.top = DestRect->bottom;
|
||||
InputClippedRect.bottom = DestRect->top;
|
||||
}
|
||||
|
||||
|
||||
/* Clip against the bounds of the clipping region so we won't try to write
|
||||
* outside the surface */
|
||||
if(Clip)
|
||||
@@ -246,30 +246,30 @@ IntEngTransparentBlt(BITMAPOBJ *DestObj,
|
||||
{
|
||||
OutputRect = *DestRect;
|
||||
}
|
||||
|
||||
|
||||
if(SourceSurf != DestSurf)
|
||||
{
|
||||
MouseSafetyOnDrawStart(SourceSurf, SourceRect->left, SourceRect->top,
|
||||
MouseSafetyOnDrawStart(SourceSurf, SourceRect->left, SourceRect->top,
|
||||
SourceRect->right, SourceRect->bottom);
|
||||
}
|
||||
MouseSafetyOnDrawStart(DestSurf, OutputRect.left, OutputRect.top,
|
||||
OutputRect.right, OutputRect.bottom);
|
||||
|
||||
|
||||
if(DestObj->flHooks & HOOK_TRANSPARENTBLT)
|
||||
{
|
||||
Ret = GDIDEVFUNCS(DestSurf).TransparentBlt(
|
||||
DestSurf, SourceSurf, Clip, ColorTranslation, &OutputRect,
|
||||
DestSurf, SourceSurf, Clip, ColorTranslation, &OutputRect,
|
||||
SourceRect, iTransColor, Reserved);
|
||||
}
|
||||
else
|
||||
Ret = FALSE;
|
||||
|
||||
|
||||
if(!Ret)
|
||||
{
|
||||
Ret = EngTransparentBlt(DestSurf, SourceSurf, Clip, ColorTranslation,
|
||||
&OutputRect, SourceRect, iTransColor, Reserved);
|
||||
}
|
||||
|
||||
|
||||
MouseSafetyOnDrawEnd(DestSurf);
|
||||
if(SourceSurf != DestSurf)
|
||||
{
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id$
|
||||
*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* PURPOSE: GDI Color Translation Functions
|
||||
@@ -73,7 +73,7 @@ ClosestColorMatch(XLATEGDI *XlateGDI, LPPALETTEENTRY SourceColor,
|
||||
cxBlue *= cxBlue;
|
||||
|
||||
Rating = cxRed + cxGreen + cxBlue;
|
||||
|
||||
|
||||
if (Rating == 0)
|
||||
{
|
||||
/* Exact match */
|
||||
@@ -234,7 +234,7 @@ IntEngCreateXlate(USHORT DestPalType, USHORT SourcePalType,
|
||||
/* Indexed -> Indexed */
|
||||
if (SourcePalType == PAL_INDEXED && DestPalType == PAL_INDEXED)
|
||||
{
|
||||
XlateGDI->translationTable =
|
||||
XlateGDI->translationTable =
|
||||
EngAllocMem(0, sizeof(ULONG) * SourcePalGDI->NumColors, 0);
|
||||
|
||||
XlateObj->flXlate |= XO_TRIVIAL;
|
||||
@@ -255,7 +255,7 @@ IntEngCreateXlate(USHORT DestPalType, USHORT SourcePalType,
|
||||
/* Indexed -> Bitfields/RGB/BGR */
|
||||
if (SourcePalType == PAL_INDEXED)
|
||||
{
|
||||
XlateGDI->translationTable =
|
||||
XlateGDI->translationTable =
|
||||
EngAllocMem(0, sizeof(ULONG) * SourcePalGDI->NumColors, 0);
|
||||
for (i = 0; i < SourcePalGDI->NumColors; i++)
|
||||
XlateGDI->translationTable[i] =
|
||||
@@ -400,7 +400,7 @@ IntEngCreateSrcMonoXlate(HPALETTE PaletteDest,
|
||||
(LPPALETTEENTRY)&XlateGDI->translationTable[0],
|
||||
DestPalGDI->IndexedColors,
|
||||
DestPalGDI->NumColors);
|
||||
XlateGDI->translationTable[1] =
|
||||
XlateGDI->translationTable[1] =
|
||||
ClosestColorMatch(XlateGDI,
|
||||
(LPPALETTEENTRY)&XlateGDI->translationTable[1],
|
||||
DestPalGDI->IndexedColors,
|
||||
@@ -488,7 +488,7 @@ XLATEOBJ_iXlate(XLATEOBJ *XlateObj, ULONG Color)
|
||||
{
|
||||
/* FIXME: should we cache colors used often? */
|
||||
/* FIXME: won't work if destination isn't indexed */
|
||||
|
||||
|
||||
/* Convert the source color to the palette RGB format. */
|
||||
Color = ShiftAndMask(XlateGDI, Color);
|
||||
|
||||
@@ -539,10 +539,10 @@ XLATEOBJ_cGetPalette(XLATEOBJ *XlateObj, ULONG PalOutType, ULONG cPal,
|
||||
}
|
||||
|
||||
PALETTE_UnlockPalette(hPalette);
|
||||
|
||||
|
||||
return cPal;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#include "window.h"
|
||||
|
||||
extern PDESKTOP_OBJECT InputDesktop;
|
||||
extern HDESK InputDesktopHandle;
|
||||
extern HDESK InputDesktopHandle;
|
||||
extern PWNDCLASS_OBJECT DesktopWindowClass;
|
||||
extern HDC ScreenDeviceContext;
|
||||
extern BOOL g_PaintDesktopVersion;
|
||||
@@ -26,13 +26,13 @@ InitDesktopImpl(VOID);
|
||||
NTSTATUS FASTCALL
|
||||
CleanupDesktopImpl(VOID);
|
||||
|
||||
NTSTATUS
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
IntDesktopObjectCreate(PVOID ObjectBody,
|
||||
PVOID Parent,
|
||||
PWSTR RemainingPath,
|
||||
struct _OBJECT_ATTRIBUTES* ObjectAttributes);
|
||||
|
||||
|
||||
VOID STDCALL
|
||||
IntDesktopObjectDelete(PVOID DeletedObject);
|
||||
|
||||
|
||||
@@ -107,7 +107,7 @@ XLATEOBJ* FASTCALL
|
||||
IntEngCreateSrcMonoXlate(HPALETTE PaletteDest,
|
||||
ULONG ForegroundColor,
|
||||
ULONG BackgroundColor);
|
||||
|
||||
|
||||
BOOL STDCALL
|
||||
IntEngPolyline(BITMAPOBJ *DestSurf,
|
||||
CLIPOBJ *Clip,
|
||||
|
||||
@@ -213,7 +213,7 @@ IntEnumDisplaySettings(
|
||||
IN DWORD iModeNum,
|
||||
IN OUT LPDEVMODEW pDevMode,
|
||||
IN DWORD dwFlags);
|
||||
|
||||
|
||||
LONG
|
||||
FASTCALL
|
||||
IntChangeDisplaySettings(
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
|
||||
#define IS_ATOM(x) \
|
||||
(((ULONG_PTR)(x) > 0x0) && ((ULONG_PTR)(x) < 0x10000))
|
||||
|
||||
|
||||
#define MENU_ITEM_TYPE(flags) \
|
||||
((flags) & (MF_STRING | MF_BITMAP | MF_OWNERDRAW | MF_SEPARATOR))
|
||||
|
||||
|
||||
#ifndef MF_END
|
||||
#define MF_END (0x0080)
|
||||
#endif
|
||||
@@ -62,11 +62,11 @@ IntGetMenuObject(HMENU hMenu);
|
||||
BOOL FASTCALL
|
||||
IntFreeMenuItem(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem,
|
||||
BOOL RemoveFromList, BOOL bRecurse);
|
||||
|
||||
|
||||
BOOL FASTCALL
|
||||
IntRemoveMenuItem(PMENU_OBJECT MenuObject, UINT uPosition, UINT uFlags,
|
||||
IntRemoveMenuItem(PMENU_OBJECT MenuObject, UINT uPosition, UINT uFlags,
|
||||
BOOL bRecurse);
|
||||
|
||||
|
||||
UINT FASTCALL
|
||||
IntDeleteMenuItems(PMENU_OBJECT MenuObject, BOOL bRecurse);
|
||||
|
||||
@@ -95,9 +95,9 @@ BOOL FASTCALL
|
||||
IntSetMenuInfo(PMENU_OBJECT MenuObject, PROSMENUINFO lpmi);
|
||||
|
||||
int FASTCALL
|
||||
IntGetMenuItemByFlag(PMENU_OBJECT MenuObject, UINT uSearchBy, UINT fFlag,
|
||||
IntGetMenuItemByFlag(PMENU_OBJECT MenuObject, UINT uSearchBy, UINT fFlag,
|
||||
PMENU_ITEM *MenuItem, PMENU_ITEM *PrevMenuItem);
|
||||
|
||||
|
||||
UINT FASTCALL
|
||||
IntEnableMenuItem(PMENU_OBJECT MenuObject, UINT uIDEnableItem, UINT uEnable);
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ typedef struct _USER_MESSAGE_QUEUE
|
||||
{
|
||||
/* Reference counter, only access this variable with interlocked functions! */
|
||||
LONG References;
|
||||
|
||||
|
||||
/* Owner of the message queue */
|
||||
struct _ETHREAD *Thread;
|
||||
/* Queue of messages sent to the queue. */
|
||||
@@ -101,7 +101,7 @@ typedef struct _USER_MESSAGE_QUEUE
|
||||
BYTE MenuState;
|
||||
/* Caret information for this queue */
|
||||
PTHRDCARETINFO CaretInfo;
|
||||
|
||||
|
||||
/* Window hooks */
|
||||
PHOOKTABLE Hooks;
|
||||
|
||||
@@ -109,7 +109,7 @@ typedef struct _USER_MESSAGE_QUEUE
|
||||
WORD WakeMask;
|
||||
WORD QueueBits;
|
||||
WORD ChangedBits;
|
||||
|
||||
|
||||
/* extra message information */
|
||||
LPARAM ExtraInfo;
|
||||
|
||||
@@ -117,7 +117,7 @@ typedef struct _USER_MESSAGE_QUEUE
|
||||
LIST_ENTRY DispatchingMessagesHead;
|
||||
/* messages that are currently dispatched by this message queue, required for cleanup */
|
||||
LIST_ENTRY LocalDispatchingMessagesHead;
|
||||
|
||||
|
||||
/* Desktop that the message queue is attached to */
|
||||
struct _DESKTOP_OBJECT *Desktop;
|
||||
} USER_MESSAGE_QUEUE, *PUSER_MESSAGE_QUEUE;
|
||||
|
||||
@@ -29,11 +29,11 @@ WinPosSetWindowPos(HWND Wnd, HWND WndInsertAfter, INT x, INT y, INT cx,
|
||||
BOOLEAN FASTCALL
|
||||
WinPosShowWindow(HWND Wnd, INT Cmd);
|
||||
USHORT FASTCALL
|
||||
WinPosWindowFromPoint(PWINDOW_OBJECT ScopeWin, PUSER_MESSAGE_QUEUE OnlyHitTests, POINT *WinPoint,
|
||||
WinPosWindowFromPoint(PWINDOW_OBJECT ScopeWin, PUSER_MESSAGE_QUEUE OnlyHitTests, POINT *WinPoint,
|
||||
PWINDOW_OBJECT* Window);
|
||||
VOID FASTCALL WinPosActivateOtherWindow(PWINDOW_OBJECT Window);
|
||||
|
||||
PINTERNALPOS FASTCALL WinPosInitInternalPos(PWINDOW_OBJECT WindowObject,
|
||||
PINTERNALPOS FASTCALL WinPosInitInternalPos(PWINDOW_OBJECT WindowObject,
|
||||
POINT *pt, PRECT RestoreRect);
|
||||
|
||||
#endif /* _WIN32K_WINPOS_H */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#include <internal/ex.h>
|
||||
#include <internal/ps.h>
|
||||
#include "msgqueue.h"
|
||||
|
||||
|
||||
#define WINSTA_ROOT_NAME L"\\Windows\\WindowStations"
|
||||
#define WINSTA_ROOT_NAME_LENGTH 23
|
||||
|
||||
@@ -23,13 +23,13 @@ InitWindowStationImpl(VOID);
|
||||
NTSTATUS FASTCALL
|
||||
CleanupWindowStationImpl(VOID);
|
||||
|
||||
NTSTATUS
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
IntWinStaObjectCreate(PVOID ObjectBody,
|
||||
PVOID Parent,
|
||||
PWSTR RemainingPath,
|
||||
struct _OBJECT_ATTRIBUTES* ObjectAttributes);
|
||||
|
||||
|
||||
VOID STDCALL
|
||||
IntWinStaObjectDelete(PVOID DeletedObject);
|
||||
|
||||
@@ -37,8 +37,8 @@ PVOID STDCALL
|
||||
IntWinStaObjectFind(PVOID Object,
|
||||
PWSTR Name,
|
||||
ULONG Attributes);
|
||||
|
||||
NTSTATUS
|
||||
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
IntWinStaObjectParse(PVOID Object,
|
||||
PVOID *NextObject,
|
||||
|
||||
@@ -114,7 +114,7 @@ EngFindImageProcAddress(IN HANDLE Module,
|
||||
Win32kExports[] =
|
||||
{
|
||||
{ "BRUSHOBJ_hGetColorTransform", BRUSHOBJ_hGetColorTransform },
|
||||
{ "EngAlphaBlend", EngAlphaBlend },
|
||||
{ "EngAlphaBlend", EngAlphaBlend },
|
||||
{ "EngClearEvent", EngClearEvent },
|
||||
{ "EngControlSprites", EngControlSprites },
|
||||
{ "EngCreateEvent", EngCreateEvent },
|
||||
@@ -179,7 +179,7 @@ EngFindImageProcAddress(IN HANDLE Module,
|
||||
return NULL;
|
||||
}
|
||||
RtlInitAnsiString(&ProcNameString, ProcName);
|
||||
Status = LdrGetProcedureAddress(Module,
|
||||
Status = LdrGetProcedureAddress(Module,
|
||||
&ProcNameString,
|
||||
0,
|
||||
&Function);
|
||||
|
||||
@@ -35,7 +35,7 @@ typedef NTSTATUS (STDCALL *PW32_THREAD_CALLBACK)(
|
||||
struct _ETHREAD *Thread,
|
||||
BOOLEAN Create);
|
||||
|
||||
/*
|
||||
/*
|
||||
* Callbacks used for Win32 objects... this define won't be needed after the Object Manager
|
||||
* rewrite -- Alex
|
||||
*/
|
||||
@@ -51,7 +51,7 @@ typedef NTSTATUS STDCALL_FUNC
|
||||
PUNICODE_STRING FullPath,
|
||||
PWSTR *Path,
|
||||
ULONG Attributes);
|
||||
|
||||
|
||||
typedef VOID STDCALL_FUNC
|
||||
(*OBJECT_DELETE_ROUTINE)(PVOID DeletedObject);
|
||||
|
||||
@@ -59,14 +59,14 @@ typedef PVOID STDCALL_FUNC
|
||||
(*OBJECT_FIND_ROUTINE)(PVOID WinStaObject,
|
||||
PWSTR Name,
|
||||
ULONG Attributes);
|
||||
|
||||
|
||||
typedef struct _W32_OBJECT_CALLBACK {
|
||||
OBJECT_CREATE_ROUTINE WinStaCreate;
|
||||
OBJECT_PARSE_ROUTINE WinStaParse;
|
||||
OBJECT_DELETE_ROUTINE WinStaDelete;
|
||||
OBJECT_FIND_ROUTINE WinStaFind;
|
||||
OBJECT_CREATE_ROUTINE DesktopCreate;
|
||||
OBJECT_DELETE_ROUTINE DesktopDelete;
|
||||
OBJECT_DELETE_ROUTINE DesktopDelete;
|
||||
} W32_OBJECT_CALLBACK, *PW32_OBJECT_CALLBACK;
|
||||
|
||||
VOID STDCALL
|
||||
@@ -92,7 +92,7 @@ Win32kProcessCallback (struct _EPROCESS *Process,
|
||||
BOOLEAN Create)
|
||||
{
|
||||
PW32PROCESS Win32Process;
|
||||
|
||||
|
||||
Win32Process = (PW32PROCESS)Process->Win32Process;
|
||||
if (Create)
|
||||
{
|
||||
@@ -100,24 +100,24 @@ Win32kProcessCallback (struct _EPROCESS *Process,
|
||||
|
||||
InitializeListHead(&Win32Process->ClassListHead);
|
||||
ExInitializeFastMutex(&Win32Process->ClassListLock);
|
||||
|
||||
|
||||
InitializeListHead(&Win32Process->MenuListHead);
|
||||
ExInitializeFastMutex(&Win32Process->MenuListLock);
|
||||
ExInitializeFastMutex(&Win32Process->MenuListLock);
|
||||
|
||||
InitializeListHead(&Win32Process->PrivateFontListHead);
|
||||
ExInitializeFastMutex(&Win32Process->PrivateFontListLock);
|
||||
|
||||
|
||||
InitializeListHead(&Win32Process->DriverObjListHead);
|
||||
ExInitializeFastMutex(&Win32Process->DriverObjListLock);
|
||||
|
||||
Win32Process->KeyboardLayout = W32kGetDefaultKeyLayout();
|
||||
|
||||
|
||||
if(Process->Peb != NULL)
|
||||
{
|
||||
/* map the gdi handle table to user land */
|
||||
Process->Peb->GdiSharedHandleTable = GDI_MapHandleTable(Process);
|
||||
}
|
||||
|
||||
|
||||
/* setup process flags */
|
||||
Win32Process->Flags = 0;
|
||||
}
|
||||
@@ -134,7 +134,7 @@ Win32kProcessCallback (struct _EPROCESS *Process,
|
||||
GDI_CleanupForProcess(Process);
|
||||
|
||||
IntGraphicsCheck(FALSE);
|
||||
|
||||
|
||||
/*
|
||||
* Deregister logon application automatically
|
||||
*/
|
||||
@@ -166,7 +166,7 @@ Win32kThreadCallback (struct _ETHREAD *Thread,
|
||||
PRTL_USER_PROCESS_PARAMETERS ProcessParams = (Process->Peb ? Process->Peb->ProcessParameters : NULL);
|
||||
|
||||
DPRINT("Creating W32 thread TID:%d at IRQ level: %lu\n", Thread->Cid.UniqueThread, KeGetCurrentIrql());
|
||||
|
||||
|
||||
/*
|
||||
* inherit the thread desktop and process window station (if not yet inherited) from the process startup
|
||||
* info structure. See documentation of CreateProcess()
|
||||
@@ -268,8 +268,8 @@ DllMain (
|
||||
DPRINT1("Adding system services failed!\n");
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
/*
|
||||
* Register Object Manager Callbacks
|
||||
*/
|
||||
Win32kObjectCallbacks.WinStaCreate = IntWinStaObjectCreate;
|
||||
@@ -287,14 +287,14 @@ DllMain (
|
||||
0,
|
||||
sizeof(W32THREAD),
|
||||
sizeof(W32PROCESS));
|
||||
|
||||
|
||||
Status = IntUserCreateSharedSectionPool(48 * 1024 * 1024, /* 48 MB by default */
|
||||
&SessionSharedSectionPool);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("Failed to initialize the shared section pool: Status 0x%x\n", Status);
|
||||
}
|
||||
|
||||
|
||||
Status = InitWindowStationImpl();
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -392,7 +392,7 @@ DllMain (
|
||||
used by win32 applications */
|
||||
CreateStockObjects();
|
||||
CreateSysColorObjects();
|
||||
|
||||
|
||||
PREPARE_TESTS
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id$
|
||||
*
|
||||
*
|
||||
* Entry Point for win32k.sys
|
||||
*/
|
||||
|
||||
|
||||
@@ -17,10 +17,10 @@
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id$
|
||||
*
|
||||
*
|
||||
* GDI Driver support routines
|
||||
* (mostly swiped from Wine)
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
@@ -67,13 +67,13 @@ BOOL DRIVER_RegisterDriver(LPCWSTR Name, PGD_ENABLEDRIVER EnableDriver)
|
||||
DriverList = Driver;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
if (GenericDriver != NULL)
|
||||
{
|
||||
ExFreePool(Driver);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
GenericDriver = Driver;
|
||||
return TRUE;
|
||||
}
|
||||
@@ -91,7 +91,7 @@ PGD_ENABLEDRIVER DRIVER_FindDDIDriver(LPCWSTR Name)
|
||||
BOOL DotFound;
|
||||
UINT Size;
|
||||
|
||||
DotFound = FALSE;
|
||||
DotFound = FALSE;
|
||||
PathSeparatorFound = FALSE;
|
||||
p = Name;
|
||||
while (L'\0' != *p)
|
||||
@@ -140,7 +140,7 @@ PGD_ENABLEDRIVER DRIVER_FindDDIDriver(LPCWSTR Name)
|
||||
/* First see if the driver hasn't already been loaded */
|
||||
while (Driver && FullName)
|
||||
{
|
||||
if (!_wcsicmp( Driver->Name, FullName))
|
||||
if (!_wcsicmp( Driver->Name, FullName))
|
||||
{
|
||||
return Driver->EnableDriver;
|
||||
}
|
||||
@@ -176,7 +176,7 @@ PGD_ENABLEDRIVER DRIVER_FindDDIDriver(LPCWSTR Name)
|
||||
} \
|
||||
}
|
||||
|
||||
BOOL DRIVER_BuildDDIFunctions(PDRVENABLEDATA DED,
|
||||
BOOL DRIVER_BuildDDIFunctions(PDRVENABLEDATA DED,
|
||||
PDRIVER_FUNCTIONS DF)
|
||||
{
|
||||
BEGIN_FUNCTION_MAP();
|
||||
@@ -301,7 +301,7 @@ PFILE_OBJECT DRIVER_FindMPDriver(ULONG DisplayNumber)
|
||||
BOOL DRIVER_UnregisterDriver(LPCWSTR Name)
|
||||
{
|
||||
PGRAPHICS_DRIVER Driver = NULL;
|
||||
|
||||
|
||||
if (Name)
|
||||
{
|
||||
if (DriverList != NULL)
|
||||
@@ -322,19 +322,19 @@ BOOL DRIVER_UnregisterDriver(LPCWSTR Name)
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
if (GenericDriver != NULL)
|
||||
{
|
||||
Driver = GenericDriver;
|
||||
GenericDriver = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (Driver != NULL)
|
||||
{
|
||||
ExFreePool(Driver->Name);
|
||||
ExFreePool(Driver);
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
@@ -346,11 +346,11 @@ BOOL DRIVER_UnregisterDriver(LPCWSTR Name)
|
||||
INT DRIVER_ReferenceDriver (LPCWSTR Name)
|
||||
{
|
||||
GRAPHICS_DRIVER *Driver = DriverList;
|
||||
|
||||
|
||||
while (Driver && Name)
|
||||
{
|
||||
DPRINT( "Comparing %S to %S\n", Driver->Name, Name );
|
||||
if (!_wcsicmp( Driver->Name, Name))
|
||||
if (!_wcsicmp( Driver->Name, Name))
|
||||
{
|
||||
return ++Driver->ReferenceCount;
|
||||
}
|
||||
@@ -364,11 +364,11 @@ INT DRIVER_ReferenceDriver (LPCWSTR Name)
|
||||
INT DRIVER_UnreferenceDriver (LPCWSTR Name)
|
||||
{
|
||||
GRAPHICS_DRIVER *Driver = DriverList;
|
||||
|
||||
|
||||
while (Driver && Name)
|
||||
{
|
||||
DPRINT( "Comparing %S to %S\n", Driver->Name, Name );
|
||||
if (!_wcsicmp( Driver->Name, Name))
|
||||
if (!_wcsicmp( Driver->Name, Name))
|
||||
{
|
||||
return --Driver->ReferenceCount;
|
||||
}
|
||||
|
||||
@@ -50,13 +50,13 @@ ObmpPerformRetentionChecks(PUSER_OBJECT_HEADER ObjectHeader)
|
||||
DPRINT1("ObjectHeader 0x%X has invalid reference count (%d)\n",
|
||||
ObjectHeader, ObjectHeader->RefCount);
|
||||
}
|
||||
|
||||
|
||||
if (ObjectHeader->HandleCount < 0)
|
||||
{
|
||||
DPRINT1("Object 0x%X has invalid handle count (%d)\n",
|
||||
ObjectHeader, ObjectHeader->HandleCount);
|
||||
}
|
||||
|
||||
|
||||
if ((ObjectHeader->RefCount == 0) && (ObjectHeader->HandleCount == 0))
|
||||
{
|
||||
ExFreePool(ObjectHeader);
|
||||
@@ -81,14 +81,14 @@ ObmpGetObjectByHandle(PUSER_HANDLE_TABLE HandleTable,
|
||||
PUSER_HANDLE_BLOCK Block = NULL;
|
||||
PLIST_ENTRY Current;
|
||||
ULONG i;
|
||||
|
||||
|
||||
if (NULL == Handle)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Current = HandleTable->ListHead.Flink;
|
||||
|
||||
|
||||
for (i = 0; i < Count; i++)
|
||||
{
|
||||
Current = Current->Flink;
|
||||
@@ -98,7 +98,7 @@ ObmpGetObjectByHandle(PUSER_HANDLE_TABLE HandleTable,
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Block = CONTAINING_RECORD(Current, USER_HANDLE_BLOCK, ListEntry);
|
||||
return &(Block->Handles[Index % HANDLE_BLOCK_ENTRIES]);
|
||||
}
|
||||
@@ -112,27 +112,27 @@ ObmpCloseAllHandles(PUSER_HANDLE_TABLE HandleTable)
|
||||
ULONG i;
|
||||
|
||||
ObmpLockHandleTable(HandleTable);
|
||||
|
||||
|
||||
CurrentEntry = HandleTable->ListHead.Flink;
|
||||
|
||||
while (CurrentEntry != &HandleTable->ListHead)
|
||||
{
|
||||
Current = CONTAINING_RECORD(CurrentEntry, USER_HANDLE_BLOCK, ListEntry);
|
||||
|
||||
|
||||
for (i = 0; i < HANDLE_BLOCK_ENTRIES; i++)
|
||||
{
|
||||
ObjectBody = Current->Handles[i].ObjectBody;
|
||||
|
||||
|
||||
if (ObjectBody != NULL)
|
||||
{
|
||||
PUSER_OBJECT_HEADER ObjectHeader = USER_BODY_TO_HEADER(ObjectBody);
|
||||
|
||||
|
||||
ObmReferenceObjectByPointer(ObjectBody, otUnknown);
|
||||
ObjectHeader->HandleCount--;
|
||||
Current->Handles[i].ObjectBody = NULL;
|
||||
|
||||
|
||||
ObmpUnlockHandleTable(HandleTable);
|
||||
|
||||
|
||||
ObmDereferenceObject(ObjectBody);
|
||||
|
||||
ObmpLockHandleTable(HandleTable);
|
||||
@@ -140,10 +140,10 @@ ObmpCloseAllHandles(PUSER_HANDLE_TABLE HandleTable)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CurrentEntry = CurrentEntry->Flink;
|
||||
}
|
||||
|
||||
|
||||
ObmpUnlockHandleTable(HandleTable);
|
||||
}
|
||||
|
||||
@@ -154,9 +154,9 @@ ObmpDeleteHandleTable(PUSER_HANDLE_TABLE HandleTable)
|
||||
PLIST_ENTRY CurrentEntry;
|
||||
|
||||
ObmpCloseAllHandles(HandleTable);
|
||||
|
||||
|
||||
CurrentEntry = RemoveHeadList(&HandleTable->ListHead);
|
||||
|
||||
|
||||
while (CurrentEntry != &HandleTable->ListHead)
|
||||
{
|
||||
Current = CONTAINING_RECORD(CurrentEntry,
|
||||
@@ -164,7 +164,7 @@ ObmpDeleteHandleTable(PUSER_HANDLE_TABLE HandleTable)
|
||||
ListEntry);
|
||||
|
||||
ExFreePool(Current);
|
||||
|
||||
|
||||
CurrentEntry = RemoveHeadList(&HandleTable->ListHead);
|
||||
}
|
||||
}
|
||||
@@ -178,7 +178,7 @@ ObmpDeleteHandle(PUSER_HANDLE_TABLE HandleTable,
|
||||
PVOID ObjectBody;
|
||||
|
||||
ObmpLockHandleTable(HandleTable);
|
||||
|
||||
|
||||
Entry = ObmpGetObjectByHandle(HandleTable, Handle);
|
||||
if (Entry == NULL)
|
||||
{
|
||||
@@ -188,7 +188,7 @@ ObmpDeleteHandle(PUSER_HANDLE_TABLE HandleTable,
|
||||
}
|
||||
|
||||
ObjectBody = Entry->ObjectBody;
|
||||
|
||||
|
||||
if (ObjectBody != NULL)
|
||||
{
|
||||
ObjectHeader = USER_BODY_TO_HEADER(ObjectBody);
|
||||
@@ -196,7 +196,7 @@ ObmpDeleteHandle(PUSER_HANDLE_TABLE HandleTable,
|
||||
ObmReferenceObjectByPointer(ObjectBody, otUnknown);
|
||||
Entry->ObjectBody = NULL;
|
||||
}
|
||||
|
||||
|
||||
ObmpUnlockHandleTable(HandleTable);
|
||||
|
||||
return ObjectBody;
|
||||
@@ -210,7 +210,7 @@ ObmpInitializeObject(PUSER_HANDLE_TABLE HandleTable,
|
||||
ULONG ObjectSize)
|
||||
{
|
||||
DWORD Status = STATUS_SUCCESS;
|
||||
|
||||
|
||||
ObjectHeader->Type = ObjectType;
|
||||
ObjectHeader->HandleCount = 0;
|
||||
ObjectHeader->RefCount = 1;
|
||||
@@ -253,15 +253,15 @@ ObmReferenceObject(PVOID ObjectBody)
|
||||
*/
|
||||
{
|
||||
PUSER_OBJECT_HEADER ObjectHeader;
|
||||
|
||||
|
||||
if (!ObjectBody)
|
||||
{
|
||||
DPRINT1("Cannot Reference NULL!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
ObjectHeader = USER_BODY_TO_HEADER(ObjectBody);
|
||||
|
||||
|
||||
ObjectHeader->RefCount++;
|
||||
|
||||
ObmpPerformRetentionChecks(ObjectHeader);
|
||||
@@ -277,15 +277,15 @@ ObmDereferenceObject(PVOID ObjectBody)
|
||||
*/
|
||||
{
|
||||
PUSER_OBJECT_HEADER ObjectHeader;
|
||||
|
||||
|
||||
if (!ObjectBody)
|
||||
{
|
||||
DPRINT1("Cannot Dereference NULL!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
ObjectHeader = USER_BODY_TO_HEADER(ObjectBody);
|
||||
|
||||
|
||||
ObjectHeader->RefCount--;
|
||||
ObmpPerformRetentionChecks(ObjectHeader);
|
||||
}
|
||||
@@ -302,15 +302,15 @@ ObmReferenceObjectByPointer(PVOID ObjectBody,
|
||||
*/
|
||||
{
|
||||
PUSER_OBJECT_HEADER ObjectHeader;
|
||||
|
||||
|
||||
ObjectHeader = USER_BODY_TO_HEADER(ObjectBody);
|
||||
|
||||
|
||||
if ((ObjectType != otUnknown) && (ObjectHeader->Type != ObjectType))
|
||||
{
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
ObjectHeader->RefCount++;
|
||||
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -323,30 +323,30 @@ ObmCreateObject(PUSER_HANDLE_TABLE HandleTable,
|
||||
PUSER_OBJECT_HEADER ObjectHeader;
|
||||
PVOID ObjectBody;
|
||||
DWORD Status;
|
||||
|
||||
ObjectHeader = (PUSER_OBJECT_HEADER)ExAllocatePool(PagedPool,
|
||||
|
||||
ObjectHeader = (PUSER_OBJECT_HEADER)ExAllocatePool(PagedPool,
|
||||
ObjectSize + sizeof(USER_OBJECT_HEADER));
|
||||
if (!ObjectHeader)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
ObjectBody = USER_HEADER_TO_BODY(ObjectHeader);
|
||||
|
||||
|
||||
RtlZeroMemory(ObjectBody, ObjectSize);
|
||||
|
||||
|
||||
Status = ObmpInitializeObject(HandleTable,
|
||||
ObjectHeader,
|
||||
Handle,
|
||||
ObjectType,
|
||||
ObjectSize);
|
||||
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
ExFreePool(ObjectHeader);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
return ObjectBody;
|
||||
}
|
||||
|
||||
@@ -367,11 +367,11 @@ ObmCreateHandle(PUSER_HANDLE_TABLE HandleTable,
|
||||
ULONG Handle;
|
||||
ULONG i;
|
||||
|
||||
if (ObjectBody != NULL)
|
||||
if (ObjectBody != NULL)
|
||||
{
|
||||
USER_BODY_TO_HEADER(ObjectBody)->HandleCount++;
|
||||
}
|
||||
|
||||
|
||||
ObmpLockHandleTable(HandleTable);
|
||||
|
||||
Handle = 1;
|
||||
@@ -382,9 +382,9 @@ ObmCreateHandle(PUSER_HANDLE_TABLE HandleTable,
|
||||
*/
|
||||
while (Current != &(HandleTable->ListHead))
|
||||
{
|
||||
PUSER_HANDLE_BLOCK Block =
|
||||
PUSER_HANDLE_BLOCK Block =
|
||||
CONTAINING_RECORD(Current, USER_HANDLE_BLOCK, ListEntry);
|
||||
|
||||
|
||||
for (i = 0; i < HANDLE_BLOCK_ENTRIES; i++)
|
||||
{
|
||||
if (!Block->Handles[i].ObjectBody)
|
||||
@@ -403,7 +403,7 @@ ObmCreateHandle(PUSER_HANDLE_TABLE HandleTable,
|
||||
/*
|
||||
* Add a new Handle block to the end of the list
|
||||
*/
|
||||
NewBlock = (PUSER_HANDLE_BLOCK)ExAllocatePool(PagedPool,
|
||||
NewBlock = (PUSER_HANDLE_BLOCK)ExAllocatePool(PagedPool,
|
||||
sizeof(USER_HANDLE_BLOCK));
|
||||
if (!NewBlock)
|
||||
{
|
||||
@@ -411,7 +411,7 @@ ObmCreateHandle(PUSER_HANDLE_TABLE HandleTable,
|
||||
*HandleReturn = (PHANDLE)NULL;
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
|
||||
RtlZeroMemory(NewBlock, sizeof(USER_HANDLE_BLOCK));
|
||||
NewBlock->Handles[0].ObjectBody = ObjectBody;
|
||||
InsertTailList(&HandleTable->ListHead, &NewBlock->ListEntry);
|
||||
@@ -440,33 +440,33 @@ ObmReferenceObjectByHandle(PUSER_HANDLE_TABLE HandleTable,
|
||||
PUSER_OBJECT_HEADER ObjectHeader;
|
||||
PUSER_HANDLE UserHandle;
|
||||
PVOID ObjectBody;
|
||||
|
||||
|
||||
ObmpLockHandleTable(HandleTable);
|
||||
|
||||
|
||||
UserHandle = ObmpGetObjectByHandle(HandleTable, Handle);
|
||||
|
||||
|
||||
if ((UserHandle == NULL) || (UserHandle->ObjectBody == NULL))
|
||||
{
|
||||
ObmpUnlockHandleTable(HandleTable);
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
|
||||
ObjectBody = UserHandle->ObjectBody;
|
||||
ObmReferenceObjectByPointer(ObjectBody, ObjectType);
|
||||
|
||||
|
||||
ObmpUnlockHandleTable(HandleTable);
|
||||
|
||||
|
||||
ObjectHeader = USER_BODY_TO_HEADER(ObjectBody);
|
||||
|
||||
|
||||
if ((ObjectType != otUnknown) && (ObjectHeader->Type != ObjectType))
|
||||
{
|
||||
DPRINT1("Object type mismatch 0x%x 0x%x\n", ObjectType, ObjectHeader->Type);
|
||||
ObmDereferenceObject(ObjectBody);
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
|
||||
*Object = ObjectBody;
|
||||
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -481,9 +481,9 @@ ObmCloseHandle(PUSER_HANDLE_TABLE HandleTable,
|
||||
{
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
|
||||
ObmDereferenceObject(ObjectBody);
|
||||
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -505,16 +505,16 @@ ObmCreateHandleTable(VOID)
|
||||
{
|
||||
PUSER_HANDLE_TABLE HandleTable;
|
||||
|
||||
HandleTable = (PUSER_HANDLE_TABLE)ExAllocatePool(PagedPool,
|
||||
HandleTable = (PUSER_HANDLE_TABLE)ExAllocatePool(PagedPool,
|
||||
sizeof(USER_HANDLE_TABLE));
|
||||
if (!HandleTable)
|
||||
{
|
||||
DPRINT1("Unable to create handle table\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
ObmInitializeHandleTable(HandleTable);
|
||||
|
||||
|
||||
return HandleTable;
|
||||
}
|
||||
|
||||
|
||||
@@ -128,15 +128,15 @@ IntUserCreateSharedSection(IN PSHARED_SECTION_POOL SharedSectionPool,
|
||||
LARGE_INTEGER SectionSize;
|
||||
ULONG Size;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
ASSERT(SharedSectionPool && SharedSectionSize && (*SharedSectionSize) > 0 && SystemMappedBase);
|
||||
|
||||
|
||||
FreeSharedSection = NULL;
|
||||
|
||||
|
||||
Size = ROUND_UP(*SharedSectionSize, PAGE_SIZE);
|
||||
|
||||
ExAcquireFastMutex(&SharedSectionPool->Lock);
|
||||
|
||||
|
||||
if(Size > SharedSectionPool->PoolFree)
|
||||
{
|
||||
ExReleaseFastMutex(&SharedSectionPool->Lock);
|
||||
@@ -144,14 +144,14 @@ IntUserCreateSharedSection(IN PSHARED_SECTION_POOL SharedSectionPool,
|
||||
SharedSectionPool->PoolSize / 1024, (*SharedSectionSize) / 1024);
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
|
||||
/* walk the array to find a free entry */
|
||||
for(Array = &SharedSectionPool->SectionsArray, LastArray = Array;
|
||||
Array != NULL && FreeSharedSection == NULL;
|
||||
Array = Array->Next)
|
||||
{
|
||||
LastArray = Array;
|
||||
|
||||
|
||||
for(SharedSection = Array->SharedSection, LastSharedSection = SharedSection + Array->nEntries;
|
||||
SharedSection != LastSharedSection;
|
||||
SharedSection++)
|
||||
@@ -162,22 +162,22 @@ IntUserCreateSharedSection(IN PSHARED_SECTION_POOL SharedSectionPool,
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(Array->Next != NULL)
|
||||
{
|
||||
LastArray = Array;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ASSERT(LastArray);
|
||||
|
||||
|
||||
if(FreeSharedSection == NULL)
|
||||
{
|
||||
ULONG nNewEntries;
|
||||
PSHARED_SECTIONS_ARRAY NewArray;
|
||||
|
||||
|
||||
ASSERT(LastArray->Next == NULL);
|
||||
|
||||
|
||||
/* couldn't find a free entry in the array, extend the array */
|
||||
|
||||
nNewEntries = ((PAGE_SIZE - sizeof(SHARED_SECTIONS_ARRAY)) / sizeof(SHARED_SECTION)) + 1;
|
||||
@@ -191,19 +191,19 @@ IntUserCreateSharedSection(IN PSHARED_SECTION_POOL SharedSectionPool,
|
||||
DPRINT1("Failed to allocate new array for shared sections!\n");
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
|
||||
NewArray->nEntries = nNewEntries;
|
||||
NewArray->Next = NULL;
|
||||
LastArray->Next = NewArray;
|
||||
|
||||
|
||||
Array = NewArray;
|
||||
FreeSharedSection = &Array->SharedSection[0];
|
||||
}
|
||||
|
||||
|
||||
ASSERT(FreeSharedSection);
|
||||
|
||||
|
||||
/* now allocate a real section */
|
||||
|
||||
|
||||
SectionSize.QuadPart = Size;
|
||||
Status = MmCreateSection(&FreeSharedSection->SectionObject,
|
||||
SECTION_ALL_ACCESS,
|
||||
@@ -222,7 +222,7 @@ IntUserCreateSharedSection(IN PSHARED_SECTION_POOL SharedSectionPool,
|
||||
{
|
||||
(*SharedSectionSize) -= Size;
|
||||
SharedSectionPool->SharedSectionCount++;
|
||||
|
||||
|
||||
*SystemMappedBase = FreeSharedSection->SystemMappedBase;
|
||||
*SharedSectionSize = FreeSharedSection->ViewSize;
|
||||
}
|
||||
@@ -233,9 +233,9 @@ IntUserCreateSharedSection(IN PSHARED_SECTION_POOL SharedSectionPool,
|
||||
DPRINT1("Failed to map the shared section into system space! Status 0x%x\n", Status);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ExReleaseFastMutex(&SharedSectionPool->Lock);
|
||||
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
@@ -333,7 +333,7 @@ IntUserMapSharedSection(IN PSHARED_SECTION_POOL SharedSectionPool,
|
||||
if(SectionObject != NULL)
|
||||
{
|
||||
ULONG RealViewSize = (ViewSize ? min(*ViewSize, SharedSection->ViewSize) : SharedSection->ViewSize);
|
||||
|
||||
|
||||
ObReferenceObjectByPointer(SectionObject,
|
||||
(ReadOnly ? SECTION_MAP_READ : SECTION_MAP_READ | SECTION_MAP_WRITE),
|
||||
NULL,
|
||||
@@ -359,7 +359,7 @@ IntUserMapSharedSection(IN PSHARED_SECTION_POOL SharedSectionPool,
|
||||
DPRINT1("Couldn't find and map a shared section with SystemMappedBase=0x%x!\n", SystemMappedBase);
|
||||
Status = STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
|
||||
ExReleaseFastMutex(&SharedSectionPool->Lock);
|
||||
|
||||
return Status;
|
||||
@@ -398,7 +398,7 @@ IntUserUnMapSharedSection(IN PSHARED_SECTION_POOL SharedSectionPool,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ExReleaseFastMutex(&SharedSectionPool->Lock);
|
||||
|
||||
if(SectionObject != NULL)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
@@ -29,7 +29,7 @@ DD_Cleanup(PDD_DIRECTDRAW pDD)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
HANDLE STDCALL NtGdiDdCreateDirectDrawObject(
|
||||
HANDLE STDCALL NtGdiDdCreateDirectDrawObject(
|
||||
HDC hdc
|
||||
)
|
||||
{
|
||||
@@ -127,14 +127,14 @@ HANDLE STDCALL NtGdiDdCreateDirectDrawObject(
|
||||
return hDirectDraw;
|
||||
}
|
||||
|
||||
BOOL STDCALL NtGdiDdDeleteDirectDrawObject(
|
||||
BOOL STDCALL NtGdiDdDeleteDirectDrawObject(
|
||||
HANDLE hDirectDrawLocal
|
||||
)
|
||||
{
|
||||
return GDIOBJ_FreeObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
|
||||
}
|
||||
|
||||
BOOL STDCALL NtGdiDdQueryDirectDrawObject(
|
||||
BOOL STDCALL NtGdiDdQueryDirectDrawObject(
|
||||
HANDLE hDirectDrawLocal,
|
||||
DD_HALINFO *pHalInfo,
|
||||
DWORD *pCallBackFlags,
|
||||
@@ -177,7 +177,7 @@ BOOL STDCALL NtGdiDdQueryDirectDrawObject(
|
||||
{
|
||||
RtlMoveMemory(puD3dDriverData, pHalInfo->lpD3DGlobalDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA));
|
||||
}
|
||||
|
||||
|
||||
if (pHalInfo->lpD3DBufCallbacks)
|
||||
{
|
||||
RtlMoveMemory(puD3dBufferCallbacks, pHalInfo->lpD3DBufCallbacks, sizeof(DD_D3DBUFCALLBACKS));
|
||||
@@ -188,7 +188,7 @@ BOOL STDCALL NtGdiDdQueryDirectDrawObject(
|
||||
pDirectDraw->DdUnlockD3DBuffer = puD3dBufferCallbacks->UnlockD3DBuffer;
|
||||
}
|
||||
|
||||
|
||||
|
||||
GDIOBJ_UnlockObj(hDirectDrawLocal);
|
||||
|
||||
return TRUE;
|
||||
@@ -205,7 +205,7 @@ DDSURF_Cleanup(PDD_SURFACE pDDSurf)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
HANDLE STDCALL NtGdiDdCreateSurfaceObject(
|
||||
HANDLE STDCALL NtGdiDdCreateSurfaceObject(
|
||||
HANDLE hDirectDrawLocal,
|
||||
HANDLE hSurface,
|
||||
PDD_SURFACE_LOCAL puSurfaceLocal,
|
||||
@@ -223,7 +223,7 @@ HANDLE STDCALL NtGdiDdCreateSurfaceObject(
|
||||
|
||||
PDD_SURFACE pSurface = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DD_SURFACE);
|
||||
/* FIXME - Handle pSurface == NULL!!!! */
|
||||
|
||||
|
||||
RtlMoveMemory(&pSurface->Local, puSurfaceLocal, sizeof(DD_SURFACE_LOCAL));
|
||||
RtlMoveMemory(&pSurface->More, puSurfaceMore, sizeof(DD_SURFACE_MORE));
|
||||
RtlMoveMemory(&pSurface->Global, puSurfaceGlobal, sizeof(DD_SURFACE_GLOBAL));
|
||||
@@ -241,7 +241,7 @@ HANDLE STDCALL NtGdiDdCreateSurfaceObject(
|
||||
return hSurface;
|
||||
}
|
||||
|
||||
BOOL STDCALL NtGdiDdDeleteSurfaceObject(
|
||||
BOOL STDCALL NtGdiDdDeleteSurfaceObject(
|
||||
HANDLE hSurface
|
||||
)
|
||||
{
|
||||
@@ -249,7 +249,7 @@ BOOL STDCALL NtGdiDdDeleteSurfaceObject(
|
||||
}
|
||||
|
||||
/*
|
||||
BOOL STDCALL NtGdiDdAttachSurface(
|
||||
BOOL STDCALL NtGdiDdAttachSurface(
|
||||
HANDLE hSurfaceFrom,
|
||||
HANDLE hSurfaceTo
|
||||
)
|
||||
@@ -277,39 +277,39 @@ BOOL STDCALL NtGdiDdAttachSurface(
|
||||
|
||||
|
||||
|
||||
DWORD STDCALL NtGdiDdGetDriverInfo(
|
||||
DWORD STDCALL NtGdiDdGetDriverInfo(
|
||||
HANDLE hDirectDrawLocal,
|
||||
PDD_GETDRIVERINFODATA puGetDriverInfoData)
|
||||
PDD_GETDRIVERINFODATA puGetDriverInfoData)
|
||||
|
||||
{
|
||||
DWORD pdwNumHeaps;
|
||||
{
|
||||
DWORD pdwNumHeaps;
|
||||
VIDEOMEMORY *pvmList = NULL;
|
||||
DWORD pdwNumFourCC;
|
||||
DWORD *pdwFourCC = NULL;
|
||||
DWORD ddRVal;
|
||||
|
||||
|
||||
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
|
||||
|
||||
|
||||
|
||||
ddRVal = pDirectDraw->DrvGetDirectDrawInfo(
|
||||
pDirectDraw->Global.dhpdev,(PDD_HALINFO) puGetDriverInfoData,
|
||||
&pdwNumHeaps, pvmList, &pdwNumFourCC, pdwFourCC);
|
||||
|
||||
|
||||
GDIOBJ_UnlockObj(hDirectDrawLocal);
|
||||
|
||||
|
||||
return ddRVal;
|
||||
}
|
||||
|
||||
|
||||
|
||||
DWORD STDCALL NtGdiDdWaitForVerticalBlank(
|
||||
DWORD STDCALL NtGdiDdWaitForVerticalBlank(
|
||||
HANDLE hDirectDrawLocal,
|
||||
PDD_WAITFORVERTICALBLANKDATA puWaitForVerticalBlankData
|
||||
)
|
||||
{
|
||||
DWORD ddRVal;
|
||||
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
|
||||
|
||||
|
||||
puWaitForVerticalBlankData->lpDD = pDirectDraw->Local.lpGbl;
|
||||
|
||||
ddRVal = pDirectDraw->DdWaitForVerticalBlank(puWaitForVerticalBlankData);
|
||||
@@ -320,7 +320,7 @@ DWORD STDCALL NtGdiDdWaitForVerticalBlank(
|
||||
}
|
||||
|
||||
|
||||
DWORD STDCALL NtGdiDdCanCreateSurface(
|
||||
DWORD STDCALL NtGdiDdCanCreateSurface(
|
||||
HANDLE hDirectDrawLocal,
|
||||
PDD_CANCREATESURFACEDATA puCanCreateSurfaceData
|
||||
)
|
||||
@@ -334,13 +334,13 @@ DWORD STDCALL NtGdiDdCanCreateSurface(
|
||||
ddRVal = pDirectDraw->DdCanCreateSurface(puCanCreateSurfaceData);
|
||||
|
||||
GDIOBJ_UnlockObj(hDirectDrawLocal);
|
||||
|
||||
|
||||
return ddRVal;
|
||||
}
|
||||
|
||||
|
||||
|
||||
DWORD STDCALL NtGdiDdBlt(
|
||||
DWORD STDCALL NtGdiDdBlt(
|
||||
HANDLE hSurfaceDest,
|
||||
HANDLE hSurfaceSrc,
|
||||
PDD_BLTDATA puBltData
|
||||
@@ -348,8 +348,8 @@ DWORD STDCALL NtGdiDdBlt(
|
||||
{
|
||||
DWORD ddRVal;
|
||||
|
||||
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceDest, GDI_OBJECT_TYPE_DIRECTDRAW);
|
||||
|
||||
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceDest, GDI_OBJECT_TYPE_DIRECTDRAW);
|
||||
|
||||
puBltData->lpDDDestSurface = hSurfaceDest;
|
||||
puBltData->lpDDSrcSurface = hSurfaceSrc;
|
||||
puBltData->lpDD = pDirectDraw->Local.lpGbl;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
@@ -16,12 +16,12 @@
|
||||
#include <debug.h>
|
||||
|
||||
|
||||
DWORD STDCALL NtGdiDdGetAvailDriverMemory(
|
||||
DWORD STDCALL NtGdiDdGetAvailDriverMemory(
|
||||
HANDLE hDirectDrawLocal,
|
||||
PDD_GETAVAILDRIVERMEMORYDATA puGetAvailDriverMemoryData
|
||||
)
|
||||
{
|
||||
UNIMPLEMENTED
|
||||
UNIMPLEMENTED
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -38,7 +38,7 @@ BOOL STDCALL NtGdiD3dContextCreate(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiD3dContextDestroy(
|
||||
DWORD STDCALL NtGdiD3dContextDestroy(
|
||||
PD3DNTHAL_CONTEXTDESTROYDATA pContextDestroyData
|
||||
)
|
||||
{
|
||||
@@ -55,7 +55,7 @@ DWORD STDCALL NtGdiD3dContextDestroyAll(VOID)
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiD3dDrawPrimitives2(
|
||||
DWORD STDCALL NtGdiD3dDrawPrimitives2(
|
||||
HANDLE hCmdBuf,
|
||||
HANDLE hVBuf,
|
||||
PD3DNTHAL_DRAWPRIMITIVES2DATA pded,
|
||||
@@ -70,7 +70,7 @@ DWORD STDCALL NtGdiD3dDrawPrimitives2(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiD3dValidateTextureStageState(
|
||||
DWORD STDCALL NtGdiD3dValidateTextureStageState(
|
||||
PD3DNTHAL_VALIDATETEXTURESTAGESTATEDATA pData
|
||||
)
|
||||
{
|
||||
@@ -79,7 +79,7 @@ DWORD STDCALL NtGdiD3dValidateTextureStageState(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdAddAttachedSurface(
|
||||
DWORD STDCALL NtGdiDdAddAttachedSurface(
|
||||
HANDLE hSurface,
|
||||
HANDLE hSurfaceAttached,
|
||||
PDD_ADDATTACHEDSURFACEDATA puAddAttachedSurfaceData
|
||||
@@ -92,7 +92,7 @@ DWORD STDCALL NtGdiDdAddAttachedSurface(
|
||||
|
||||
|
||||
|
||||
BOOL STDCALL NtGdiDdAttachSurface(
|
||||
BOOL STDCALL NtGdiDdAttachSurface(
|
||||
HANDLE hSurfaceFrom,
|
||||
HANDLE hSurfaceTo
|
||||
)
|
||||
@@ -102,7 +102,7 @@ BOOL STDCALL NtGdiDdAttachSurface(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdBeginMoCompFrame(
|
||||
DWORD STDCALL NtGdiDdBeginMoCompFrame(
|
||||
HANDLE hMoComp,
|
||||
PDD_BEGINMOCOMPFRAMEDATA puBeginFrameData
|
||||
)
|
||||
@@ -113,7 +113,7 @@ DWORD STDCALL NtGdiDdBeginMoCompFrame(
|
||||
}
|
||||
|
||||
|
||||
DWORD STDCALL NtGdiDdCanCreateD3DBuffer(
|
||||
DWORD STDCALL NtGdiDdCanCreateD3DBuffer(
|
||||
HANDLE hDirectDraw,
|
||||
PDD_CANCREATESURFACEDATA puCanCreateSurfaceData
|
||||
)
|
||||
@@ -125,7 +125,7 @@ DWORD STDCALL NtGdiDdCanCreateD3DBuffer(
|
||||
|
||||
|
||||
|
||||
DWORD STDCALL NtGdiDdColorControl(
|
||||
DWORD STDCALL NtGdiDdColorControl(
|
||||
HANDLE hSurface,
|
||||
PDD_COLORCONTROLDATA puColorControlData
|
||||
)
|
||||
@@ -135,7 +135,7 @@ DWORD STDCALL NtGdiDdColorControl(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdCreateD3DBuffer(
|
||||
DWORD STDCALL NtGdiDdCreateD3DBuffer(
|
||||
HANDLE hDirectDraw,
|
||||
HANDLE *hSurface,
|
||||
DDSURFACEDESC *puSurfaceDescription,
|
||||
@@ -152,7 +152,7 @@ DWORD STDCALL NtGdiDdCreateD3DBuffer(
|
||||
}
|
||||
|
||||
/*
|
||||
HANDLE STDCALL NtGdiDdCreateDirectDrawObject(
|
||||
HANDLE STDCALL NtGdiDdCreateDirectDrawObject(
|
||||
HDC hdc
|
||||
)
|
||||
{
|
||||
@@ -162,7 +162,7 @@ HANDLE STDCALL NtGdiDdCreateDirectDrawObject(
|
||||
}
|
||||
*/
|
||||
|
||||
HANDLE STDCALL NtGdiDdCreateMoComp(
|
||||
HANDLE STDCALL NtGdiDdCreateMoComp(
|
||||
HANDLE hDirectDraw,
|
||||
PDD_CREATEMOCOMPDATA puCreateMoCompData
|
||||
)
|
||||
@@ -172,7 +172,7 @@ HANDLE STDCALL NtGdiDdCreateMoComp(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdCreateSurface(
|
||||
DWORD STDCALL NtGdiDdCreateSurface(
|
||||
HANDLE hDirectDraw,
|
||||
HANDLE *hSurface,
|
||||
DDSURFACEDESC *puSurfaceDescription,
|
||||
@@ -188,7 +188,7 @@ DWORD STDCALL NtGdiDdCreateSurface(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdCreateSurfaceEx(
|
||||
DWORD STDCALL NtGdiDdCreateSurfaceEx(
|
||||
HANDLE hDirectDraw,
|
||||
HANDLE hSurface,
|
||||
DWORD dwSurfaceHandle
|
||||
@@ -200,7 +200,7 @@ DWORD STDCALL NtGdiDdCreateSurfaceEx(
|
||||
}
|
||||
|
||||
/*
|
||||
HANDLE STDCALL NtGdiDdCreateSurfaceObject(
|
||||
HANDLE STDCALL NtGdiDdCreateSurfaceObject(
|
||||
HANDLE hDirectDrawLocal,
|
||||
HANDLE hSurface,
|
||||
PDD_SURFACE_LOCAL puSurfaceLocal,
|
||||
@@ -214,7 +214,7 @@ HANDLE STDCALL NtGdiDdCreateSurfaceObject(
|
||||
return 0;
|
||||
}
|
||||
|
||||
BOOL STDCALL NtGdiDdDeleteDirectDrawObject(
|
||||
BOOL STDCALL NtGdiDdDeleteDirectDrawObject(
|
||||
HANDLE hDirectDrawLocal
|
||||
)
|
||||
{
|
||||
@@ -223,7 +223,7 @@ BOOL STDCALL NtGdiDdDeleteDirectDrawObject(
|
||||
return 0;
|
||||
}
|
||||
|
||||
BOOL STDCALL NtGdiDdDeleteSurfaceObject(
|
||||
BOOL STDCALL NtGdiDdDeleteSurfaceObject(
|
||||
HANDLE hSurface
|
||||
)
|
||||
{
|
||||
@@ -233,7 +233,7 @@ BOOL STDCALL NtGdiDdDeleteSurfaceObject(
|
||||
}
|
||||
*/
|
||||
|
||||
DWORD STDCALL NtGdiDdDestroyD3DBuffer(
|
||||
DWORD STDCALL NtGdiDdDestroyD3DBuffer(
|
||||
HANDLE hSurface
|
||||
)
|
||||
{
|
||||
@@ -242,7 +242,7 @@ DWORD STDCALL NtGdiDdDestroyD3DBuffer(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdDestroyMoComp(
|
||||
DWORD STDCALL NtGdiDdDestroyMoComp(
|
||||
HANDLE hMoComp,
|
||||
PDD_DESTROYMOCOMPDATA puBeginFrameData
|
||||
)
|
||||
@@ -252,7 +252,7 @@ DWORD STDCALL NtGdiDdDestroyMoComp(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdDestroySurface(
|
||||
DWORD STDCALL NtGdiDdDestroySurface(
|
||||
HANDLE hSurface,
|
||||
BOOL bRealDestroy
|
||||
)
|
||||
@@ -262,7 +262,7 @@ DWORD STDCALL NtGdiDdDestroySurface(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdEndMoCompFrame(
|
||||
DWORD STDCALL NtGdiDdEndMoCompFrame(
|
||||
HANDLE hMoComp,
|
||||
PDD_ENDMOCOMPFRAMEDATA puEndFrameData
|
||||
)
|
||||
@@ -272,7 +272,7 @@ DWORD STDCALL NtGdiDdEndMoCompFrame(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdFlip(
|
||||
DWORD STDCALL NtGdiDdFlip(
|
||||
HANDLE hSurfaceCurrent,
|
||||
HANDLE hSurfaceTarget,
|
||||
HANDLE hSurfaceCurrentLeft,
|
||||
@@ -285,7 +285,7 @@ DWORD STDCALL NtGdiDdFlip(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdFlipToGDISurface(
|
||||
DWORD STDCALL NtGdiDdFlipToGDISurface(
|
||||
HANDLE hDirectDraw,
|
||||
PDD_FLIPTOGDISURFACEDATA puFlipToGDISurfaceData
|
||||
)
|
||||
@@ -296,7 +296,7 @@ DWORD STDCALL NtGdiDdFlipToGDISurface(
|
||||
}
|
||||
|
||||
|
||||
DWORD STDCALL NtGdiDdGetBltStatus(
|
||||
DWORD STDCALL NtGdiDdGetBltStatus(
|
||||
HANDLE hSurface,
|
||||
PDD_GETBLTSTATUSDATA puGetBltStatusData
|
||||
)
|
||||
@@ -306,7 +306,7 @@ DWORD STDCALL NtGdiDdGetBltStatus(
|
||||
return 0;
|
||||
}
|
||||
|
||||
HDC STDCALL NtGdiDdGetDC(
|
||||
HDC STDCALL NtGdiDdGetDC(
|
||||
HANDLE hSurface,
|
||||
PALETTEENTRY *puColorTable
|
||||
)
|
||||
@@ -318,7 +318,7 @@ HDC STDCALL NtGdiDdGetDC(
|
||||
|
||||
|
||||
|
||||
DWORD STDCALL NtGdiDdGetDriverState(
|
||||
DWORD STDCALL NtGdiDdGetDriverState(
|
||||
PDD_GETDRIVERSTATEDATA pdata
|
||||
)
|
||||
{
|
||||
@@ -327,7 +327,7 @@ DWORD STDCALL NtGdiDdGetDriverState(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdGetDxHandle(
|
||||
DWORD STDCALL NtGdiDdGetDxHandle(
|
||||
HANDLE hDirectDraw,
|
||||
HANDLE hSurface,
|
||||
BOOL bRelease
|
||||
@@ -338,7 +338,7 @@ DWORD STDCALL NtGdiDdGetDxHandle(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdGetFlipStatus(
|
||||
DWORD STDCALL NtGdiDdGetFlipStatus(
|
||||
HANDLE hSurface,
|
||||
PDD_GETFLIPSTATUSDATA puGetFlipStatusData
|
||||
)
|
||||
@@ -348,7 +348,7 @@ DWORD STDCALL NtGdiDdGetFlipStatus(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdGetInternalMoCompInfo(
|
||||
DWORD STDCALL NtGdiDdGetInternalMoCompInfo(
|
||||
HANDLE hDirectDraw,
|
||||
PDD_GETINTERNALMOCOMPDATA puGetInternalData
|
||||
)
|
||||
@@ -358,7 +358,7 @@ DWORD STDCALL NtGdiDdGetInternalMoCompInfo(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdGetMoCompBuffInfo(
|
||||
DWORD STDCALL NtGdiDdGetMoCompBuffInfo(
|
||||
HANDLE hDirectDraw,
|
||||
PDD_GETMOCOMPCOMPBUFFDATA puGetBuffData
|
||||
)
|
||||
@@ -368,7 +368,7 @@ DWORD STDCALL NtGdiDdGetMoCompBuffInfo(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdGetMoCompFormats(
|
||||
DWORD STDCALL NtGdiDdGetMoCompFormats(
|
||||
HANDLE hDirectDraw,
|
||||
PDD_GETMOCOMPFORMATSDATA puGetMoCompFormatsData
|
||||
)
|
||||
@@ -378,7 +378,7 @@ DWORD STDCALL NtGdiDdGetMoCompFormats(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdGetMoCompGuids(
|
||||
DWORD STDCALL NtGdiDdGetMoCompGuids(
|
||||
HANDLE hDirectDraw,
|
||||
PDD_GETMOCOMPGUIDSDATA puGetMoCompGuidsData
|
||||
)
|
||||
@@ -388,7 +388,7 @@ DWORD STDCALL NtGdiDdGetMoCompGuids(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdGetScanLine(
|
||||
DWORD STDCALL NtGdiDdGetScanLine(
|
||||
HANDLE hDirectDraw,
|
||||
PDD_GETSCANLINEDATA puGetScanLineData
|
||||
)
|
||||
@@ -398,7 +398,7 @@ DWORD STDCALL NtGdiDdGetScanLine(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdLock(
|
||||
DWORD STDCALL NtGdiDdLock(
|
||||
HANDLE hSurface,
|
||||
PDD_LOCKDATA puLockData,
|
||||
HDC hdcClip
|
||||
@@ -409,7 +409,7 @@ DWORD STDCALL NtGdiDdLock(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdLockD3D(
|
||||
DWORD STDCALL NtGdiDdLockD3D(
|
||||
HANDLE hSurface,
|
||||
PDD_LOCKDATA puLockData
|
||||
)
|
||||
@@ -420,7 +420,7 @@ DWORD STDCALL NtGdiDdLockD3D(
|
||||
}
|
||||
|
||||
|
||||
DWORD STDCALL NtGdiDdQueryMoCompStatus(
|
||||
DWORD STDCALL NtGdiDdQueryMoCompStatus(
|
||||
HANDLE hMoComp,
|
||||
PDD_QUERYMOCOMPSTATUSDATA puQueryMoCompStatusData
|
||||
)
|
||||
@@ -430,7 +430,7 @@ DWORD STDCALL NtGdiDdQueryMoCompStatus(
|
||||
return 0;
|
||||
}
|
||||
|
||||
BOOL STDCALL NtGdiDdReenableDirectDrawObject(
|
||||
BOOL STDCALL NtGdiDdReenableDirectDrawObject(
|
||||
HANDLE hDirectDrawLocal,
|
||||
BOOL *pubNewMode
|
||||
)
|
||||
@@ -440,7 +440,7 @@ BOOL STDCALL NtGdiDdReenableDirectDrawObject(
|
||||
return 0;
|
||||
}
|
||||
|
||||
BOOL STDCALL NtGdiDdReleaseDC(
|
||||
BOOL STDCALL NtGdiDdReleaseDC(
|
||||
HANDLE hSurface
|
||||
)
|
||||
{
|
||||
@@ -449,7 +449,7 @@ BOOL STDCALL NtGdiDdReleaseDC(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdRenderMoComp(
|
||||
DWORD STDCALL NtGdiDdRenderMoComp(
|
||||
HANDLE hMoComp,
|
||||
PDD_RENDERMOCOMPDATA puRenderMoCompData
|
||||
)
|
||||
@@ -459,7 +459,7 @@ DWORD STDCALL NtGdiDdRenderMoComp(
|
||||
return 0;
|
||||
}
|
||||
|
||||
BOOL STDCALL NtGdiDdResetVisrgn(
|
||||
BOOL STDCALL NtGdiDdResetVisrgn(
|
||||
HANDLE hSurface,
|
||||
HWND hwnd
|
||||
)
|
||||
@@ -469,7 +469,7 @@ BOOL STDCALL NtGdiDdResetVisrgn(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdSetColorKey(
|
||||
DWORD STDCALL NtGdiDdSetColorKey(
|
||||
HANDLE hSurface,
|
||||
PDD_SETCOLORKEYDATA puSetColorKeyData
|
||||
)
|
||||
@@ -479,7 +479,7 @@ DWORD STDCALL NtGdiDdSetColorKey(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdSetExclusiveMode(
|
||||
DWORD STDCALL NtGdiDdSetExclusiveMode(
|
||||
HANDLE hDirectDraw,
|
||||
PDD_SETEXCLUSIVEMODEDATA puSetExclusiveModeData
|
||||
)
|
||||
@@ -489,7 +489,7 @@ DWORD STDCALL NtGdiDdSetExclusiveMode(
|
||||
return 0;
|
||||
}
|
||||
|
||||
BOOL STDCALL NtGdiDdSetGammaRamp(
|
||||
BOOL STDCALL NtGdiDdSetGammaRamp(
|
||||
HANDLE hDirectDraw,
|
||||
HDC hdc,
|
||||
LPVOID lpGammaRamp
|
||||
@@ -500,7 +500,7 @@ BOOL STDCALL NtGdiDdSetGammaRamp(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdSetOverlayPosition(
|
||||
DWORD STDCALL NtGdiDdSetOverlayPosition(
|
||||
HANDLE hSurfaceSource,
|
||||
HANDLE hSurfaceDestination,
|
||||
PDD_SETOVERLAYPOSITIONDATA puSetOverlayPositionData
|
||||
@@ -511,7 +511,7 @@ DWORD STDCALL NtGdiDdSetOverlayPosition(
|
||||
return 0;
|
||||
}
|
||||
|
||||
VOID STDCALL NtGdiDdUnattachSurface(
|
||||
VOID STDCALL NtGdiDdUnattachSurface(
|
||||
HANDLE hSurface,
|
||||
HANDLE hSurfaceAttached
|
||||
)
|
||||
@@ -519,7 +519,7 @@ VOID STDCALL NtGdiDdUnattachSurface(
|
||||
UNIMPLEMENTED
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdUnlock(
|
||||
DWORD STDCALL NtGdiDdUnlock(
|
||||
HANDLE hSurface,
|
||||
PDD_UNLOCKDATA puUnlockData
|
||||
)
|
||||
@@ -529,7 +529,7 @@ DWORD STDCALL NtGdiDdUnlock(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdUnlockD3D(
|
||||
DWORD STDCALL NtGdiDdUnlockD3D(
|
||||
HANDLE hSurface,
|
||||
PDD_UNLOCKDATA puUnlockData
|
||||
)
|
||||
@@ -539,7 +539,7 @@ DWORD STDCALL NtGdiDdUnlockD3D(
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdUpdateOverlay(
|
||||
DWORD STDCALL NtGdiDdUpdateOverlay(
|
||||
HANDLE hSurfaceDestination,
|
||||
HANDLE hSurfaceSource,
|
||||
PDD_UPDATEOVERLAYDATA puUpdateOverlayData
|
||||
|
||||
@@ -78,7 +78,7 @@ NtUserCopyAcceleratorTable(
|
||||
PACCELERATOR_TABLE AcceleratorTable;
|
||||
NTSTATUS Status;
|
||||
int Ret;
|
||||
|
||||
|
||||
Status = IntValidateWindowStationHandle(NtUserGetProcessWindowStation(),
|
||||
UserMode,
|
||||
0,
|
||||
@@ -88,7 +88,7 @@ NtUserCopyAcceleratorTable(
|
||||
SetLastNtError(STATUS_ACCESS_DENIED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Status = ObmReferenceObjectByHandle(WindowStation->HandleTable,
|
||||
Table,
|
||||
otAcceleratorTable,
|
||||
@@ -99,7 +99,7 @@ NtUserCopyAcceleratorTable(
|
||||
ObDereferenceObject(WindowStation);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
if(Entries)
|
||||
{
|
||||
Ret = min(EntriesCount, AcceleratorTable->Count);
|
||||
@@ -116,7 +116,7 @@ NtUserCopyAcceleratorTable(
|
||||
{
|
||||
Ret = AcceleratorTable->Count;
|
||||
}
|
||||
|
||||
|
||||
ObmDereferenceObject(AcceleratorTable);
|
||||
ObDereferenceObject(WindowStation);
|
||||
|
||||
|
||||
@@ -51,20 +51,20 @@ IntCbAllocateMemory(ULONG Size)
|
||||
{
|
||||
PINT_CALLBACK_HEADER Mem;
|
||||
PW32THREAD W32Thread;
|
||||
|
||||
|
||||
if(!(Mem = ExAllocatePoolWithTag(PagedPool, Size + sizeof(INT_CALLBACK_HEADER),
|
||||
TAG_CALLBACK)))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
W32Thread = PsGetWin32Thread();
|
||||
ASSERT(W32Thread);
|
||||
|
||||
|
||||
/* insert the callback memory into the thread's callback list */
|
||||
|
||||
|
||||
InsertTailList(&W32Thread->W32CallbackListHead, &Mem->ListEntry);
|
||||
|
||||
|
||||
return (Mem + 1);
|
||||
}
|
||||
|
||||
@@ -73,17 +73,17 @@ IntCbFreeMemory(PVOID Data)
|
||||
{
|
||||
PINT_CALLBACK_HEADER Mem;
|
||||
PW32THREAD W32Thread;
|
||||
|
||||
|
||||
ASSERT(Data);
|
||||
|
||||
|
||||
Mem = ((PINT_CALLBACK_HEADER)Data - 1);
|
||||
|
||||
|
||||
W32Thread = PsGetWin32Thread();
|
||||
ASSERT(W32Thread);
|
||||
|
||||
|
||||
/* remove the memory block from the thread's callback list */
|
||||
RemoveEntryList(&Mem->ListEntry);
|
||||
|
||||
|
||||
/* free memory */
|
||||
ExFreePool(Mem);
|
||||
}
|
||||
@@ -93,13 +93,13 @@ IntCleanupThreadCallbacks(PW32THREAD W32Thread)
|
||||
{
|
||||
PLIST_ENTRY CurrentEntry;
|
||||
PINT_CALLBACK_HEADER Mem;
|
||||
|
||||
|
||||
while (!IsListEmpty(&W32Thread->W32CallbackListHead))
|
||||
{
|
||||
CurrentEntry = RemoveHeadList(&W32Thread->W32CallbackListHead);
|
||||
Mem = CONTAINING_RECORD(CurrentEntry, INT_CALLBACK_HEADER,
|
||||
Mem = CONTAINING_RECORD(CurrentEntry, INT_CALLBACK_HEADER,
|
||||
ListEntry);
|
||||
|
||||
|
||||
/* free memory */
|
||||
ExFreePool(Mem);
|
||||
}
|
||||
@@ -131,7 +131,7 @@ IntCallSentMessageCallback(SENDASYNCPROC CompletionCallback,
|
||||
{
|
||||
return;
|
||||
}
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
LRESULT STDCALL
|
||||
@@ -198,7 +198,7 @@ IntCallWindowProc(WNDPROC Proc,
|
||||
(PVOID) ((char *) Arguments + sizeof(WINDOWPROC_CALLBACK_ARGUMENTS)),
|
||||
lParamBufferSize);
|
||||
IntCbFreeMemory(Arguments);
|
||||
}
|
||||
}
|
||||
|
||||
return Result;
|
||||
}
|
||||
@@ -344,7 +344,7 @@ IntCallHookProc(INT HookId,
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
ResultPointer = &Result;
|
||||
ResultLength = sizeof(LRESULT);
|
||||
Status = NtW32Call(USER32_CALLBACK_HOOKPROC,
|
||||
@@ -352,9 +352,9 @@ IntCallHookProc(INT HookId,
|
||||
ArgumentLength,
|
||||
&ResultPointer,
|
||||
&ResultLength);
|
||||
|
||||
|
||||
IntCbFreeMemory(Argument);
|
||||
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
return 0;
|
||||
|
||||
@@ -37,10 +37,10 @@ IntDestroyCaret(PW32THREAD Win32Thread)
|
||||
{
|
||||
PUSER_MESSAGE_QUEUE ThreadQueue;
|
||||
ThreadQueue = (PUSER_MESSAGE_QUEUE)Win32Thread->MessageQueue;
|
||||
|
||||
|
||||
if(!ThreadQueue || !ThreadQueue->CaretInfo)
|
||||
return FALSE;
|
||||
|
||||
|
||||
IntHideCaret(ThreadQueue->CaretInfo);
|
||||
ThreadQueue->CaretInfo->Bitmap = (HBITMAP)0;
|
||||
ThreadQueue->CaretInfo->hWnd = (HWND)0;
|
||||
@@ -55,7 +55,7 @@ IntSetCaretBlinkTime(UINT uMSeconds)
|
||||
{
|
||||
/* Don't save the new value to the registry! */
|
||||
PWINSTATION_OBJECT WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
|
||||
|
||||
|
||||
/* windows doesn't do this check */
|
||||
if((uMSeconds < MIN_CARETBLINKRATE) || (uMSeconds > MAX_CARETBLINKRATE))
|
||||
{
|
||||
@@ -63,9 +63,9 @@ IntSetCaretBlinkTime(UINT uMSeconds)
|
||||
ObDereferenceObject(WinStaObject);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
WinStaObject->CaretBlinkRate = uMSeconds;
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -80,19 +80,19 @@ IntQueryCaretBlinkRate(VOID)
|
||||
ULONG Length = 0;
|
||||
ULONG ResLength = 0;
|
||||
ULONG Val = 0;
|
||||
|
||||
|
||||
RtlRosInitUnicodeStringFromLiteral(&KeyName, CARET_REGKEY);
|
||||
RtlRosInitUnicodeStringFromLiteral(&ValueName, CARET_VALUENAME);
|
||||
|
||||
|
||||
InitializeObjectAttributes(&KeyAttributes, &KeyName, OBJ_CASE_INSENSITIVE,
|
||||
NULL, NULL);
|
||||
|
||||
|
||||
Status = ZwOpenKey(&KeyHandle, KEY_READ, &KeyAttributes);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Status = ZwQueryValueKey(KeyHandle, &ValueName, KeyValuePartialInformation,
|
||||
0, 0, &ResLength);
|
||||
if((Status != STATUS_BUFFER_TOO_SMALL))
|
||||
@@ -100,17 +100,17 @@ IntQueryCaretBlinkRate(VOID)
|
||||
NtClose(KeyHandle);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
ResLength += sizeof(KEY_VALUE_PARTIAL_INFORMATION);
|
||||
KeyValuePartialInfo = ExAllocatePoolWithTag(PagedPool, ResLength, TAG_STRING);
|
||||
Length = ResLength;
|
||||
|
||||
|
||||
if(!KeyValuePartialInfo)
|
||||
{
|
||||
NtClose(KeyHandle);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Status = ZwQueryValueKey(KeyHandle, &ValueName, KeyValuePartialInformation,
|
||||
(PVOID)KeyValuePartialInfo, Length, &ResLength);
|
||||
if(!NT_SUCCESS(Status) || (KeyValuePartialInfo->Type != REG_SZ))
|
||||
@@ -119,20 +119,20 @@ IntQueryCaretBlinkRate(VOID)
|
||||
ExFreePool(KeyValuePartialInfo);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
ValueName.Length = KeyValuePartialInfo->DataLength;
|
||||
ValueName.MaximumLength = KeyValuePartialInfo->DataLength;
|
||||
ValueName.Buffer = (PWSTR)KeyValuePartialInfo->Data;
|
||||
|
||||
|
||||
Status = RtlUnicodeStringToInteger(&ValueName, 0, &Val);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
Val = 0;
|
||||
}
|
||||
|
||||
|
||||
ExFreePool(KeyValuePartialInfo);
|
||||
NtClose(KeyHandle);
|
||||
|
||||
|
||||
return (UINT)Val;
|
||||
}
|
||||
|
||||
@@ -141,22 +141,22 @@ IntGetCaretBlinkTime(VOID)
|
||||
{
|
||||
PWINSTATION_OBJECT WinStaObject;
|
||||
UINT Ret;
|
||||
|
||||
|
||||
WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
|
||||
|
||||
|
||||
Ret = WinStaObject->CaretBlinkRate;
|
||||
if(!Ret)
|
||||
{
|
||||
/* load it from the registry the first call only! */
|
||||
Ret = WinStaObject->CaretBlinkRate = IntQueryCaretBlinkRate();
|
||||
}
|
||||
|
||||
|
||||
/* windows doesn't do this check */
|
||||
if((Ret < MIN_CARETBLINKRATE) || (Ret > MAX_CARETBLINKRATE))
|
||||
{
|
||||
Ret = DEFAULT_CARETBLINKRATE;
|
||||
}
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -165,7 +165,7 @@ IntSetCaretPos(int X, int Y)
|
||||
{
|
||||
PUSER_MESSAGE_QUEUE ThreadQueue;
|
||||
ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue;
|
||||
|
||||
|
||||
if(ThreadQueue->CaretInfo->hWnd)
|
||||
{
|
||||
if(ThreadQueue->CaretInfo->Pos.x != X || ThreadQueue->CaretInfo->Pos.y != Y)
|
||||
@@ -188,14 +188,14 @@ IntSwitchCaretShowing(PVOID Info)
|
||||
{
|
||||
PUSER_MESSAGE_QUEUE ThreadQueue;
|
||||
ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue;
|
||||
|
||||
|
||||
if(ThreadQueue->CaretInfo->hWnd)
|
||||
{
|
||||
ThreadQueue->CaretInfo->Showing = (ThreadQueue->CaretInfo->Showing ? 0 : 1);
|
||||
MmCopyToCaller(Info, ThreadQueue->CaretInfo, sizeof(THRDCARETINFO));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -204,8 +204,8 @@ IntDrawCaret(HWND hWnd)
|
||||
{
|
||||
PUSER_MESSAGE_QUEUE ThreadQueue;
|
||||
ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue;
|
||||
|
||||
if(ThreadQueue->CaretInfo->hWnd && ThreadQueue->CaretInfo->Visible &&
|
||||
|
||||
if(ThreadQueue->CaretInfo->hWnd && ThreadQueue->CaretInfo->Visible &&
|
||||
ThreadQueue->CaretInfo->Showing)
|
||||
{
|
||||
IntSendMessage(ThreadQueue->CaretInfo->hWnd, WM_SYSTIMER, IDCARETTIMER, 0);
|
||||
@@ -225,21 +225,21 @@ NtUserCreateCaret(
|
||||
{
|
||||
PWINDOW_OBJECT WindowObject;
|
||||
PUSER_MESSAGE_QUEUE ThreadQueue;
|
||||
|
||||
|
||||
WindowObject = IntGetWindowObject(hWnd);
|
||||
if(!WindowObject)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(WindowObject->OwnerThread != PsGetCurrentThread())
|
||||
{
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
SetLastWin32Error(ERROR_ACCESS_DENIED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue;
|
||||
|
||||
if (ThreadQueue->CaretInfo->Visible)
|
||||
@@ -247,7 +247,7 @@ NtUserCreateCaret(
|
||||
IntKillTimer(hWnd, IDCARETTIMER, TRUE);
|
||||
IntHideCaret(ThreadQueue->CaretInfo);
|
||||
}
|
||||
|
||||
|
||||
ThreadQueue->CaretInfo->hWnd = hWnd;
|
||||
if(hBitmap)
|
||||
{
|
||||
@@ -262,8 +262,8 @@ NtUserCreateCaret(
|
||||
}
|
||||
ThreadQueue->CaretInfo->Visible = 0;
|
||||
ThreadQueue->CaretInfo->Showing = 0;
|
||||
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -281,16 +281,16 @@ NtUserGetCaretPos(
|
||||
{
|
||||
PUSER_MESSAGE_QUEUE ThreadQueue;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue;
|
||||
|
||||
|
||||
Status = MmCopyToCaller(lpPoint, &(ThreadQueue->CaretInfo->Pos), sizeof(POINT));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -301,21 +301,21 @@ NtUserHideCaret(
|
||||
{
|
||||
PWINDOW_OBJECT WindowObject;
|
||||
PUSER_MESSAGE_QUEUE ThreadQueue;
|
||||
|
||||
|
||||
WindowObject = IntGetWindowObject(hWnd);
|
||||
if(!WindowObject)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(WindowObject->OwnerThread != PsGetCurrentThread())
|
||||
{
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
SetLastWin32Error(ERROR_ACCESS_DENIED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue;
|
||||
|
||||
if(ThreadQueue->CaretInfo->hWnd != hWnd)
|
||||
@@ -324,16 +324,16 @@ NtUserHideCaret(
|
||||
SetLastWin32Error(ERROR_ACCESS_DENIED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(ThreadQueue->CaretInfo->Visible)
|
||||
{
|
||||
IntKillTimer(hWnd, IDCARETTIMER, TRUE);
|
||||
|
||||
|
||||
IntHideCaret(ThreadQueue->CaretInfo);
|
||||
ThreadQueue->CaretInfo->Visible = 0;
|
||||
ThreadQueue->CaretInfo->Showing = 0;
|
||||
}
|
||||
|
||||
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -345,30 +345,30 @@ NtUserShowCaret(
|
||||
{
|
||||
PWINDOW_OBJECT WindowObject;
|
||||
PUSER_MESSAGE_QUEUE ThreadQueue;
|
||||
|
||||
|
||||
WindowObject = IntGetWindowObject(hWnd);
|
||||
if(!WindowObject)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(WindowObject->OwnerThread != PsGetCurrentThread())
|
||||
{
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
SetLastWin32Error(ERROR_ACCESS_DENIED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue;
|
||||
|
||||
|
||||
if(ThreadQueue->CaretInfo->hWnd != hWnd)
|
||||
{
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
SetLastWin32Error(ERROR_ACCESS_DENIED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(!ThreadQueue->CaretInfo->Visible)
|
||||
{
|
||||
ThreadQueue->CaretInfo->Visible = 1;
|
||||
@@ -378,7 +378,7 @@ NtUserShowCaret(
|
||||
}
|
||||
IntSetTimer(hWnd, IDCARETTIMER, IntGetCaretBlinkTime(), NULL, TRUE);
|
||||
}
|
||||
|
||||
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -178,7 +178,7 @@ NtUserGetClassInfo(
|
||||
lpWndClassEx->lpszClassName = lpClassName;
|
||||
lpWndClassEx->hIconSm = Class->hIconSm;
|
||||
Atom = Class->Atom;
|
||||
|
||||
|
||||
ObmDereferenceObject(Class);
|
||||
|
||||
return Atom;
|
||||
@@ -199,7 +199,7 @@ IntGetClassName(struct _WINDOW_OBJECT *WindowObject, LPWSTR lpClassName,
|
||||
}
|
||||
|
||||
WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
|
||||
|
||||
|
||||
Length = 0;
|
||||
Status = RtlQueryAtomInAtomTable(WinStaObject->AtomTable,
|
||||
WindowObject->Class->Atom, NULL, NULL, NULL, &Length);
|
||||
@@ -282,17 +282,17 @@ IntCreateClass(
|
||||
ObmDereferenceObject(ClassObject);
|
||||
return(NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
objectSize = sizeof(WNDCLASS_OBJECT) + lpwcx->cbClsExtra;
|
||||
ClassObject = ObmCreateObject(NULL, NULL, otClass, objectSize);
|
||||
if (ClassObject == 0)
|
||||
{
|
||||
{
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
|
||||
ClassObject->cbSize = lpwcx->cbSize;
|
||||
ClassObject->style = lpwcx->style;
|
||||
ClassObject->cbClsExtra = lpwcx->cbClsExtra;
|
||||
@@ -335,7 +335,7 @@ IntCreateClass(
|
||||
ClassObject->lpszMenuName.Buffer = MenuName->Buffer;
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
ClassObject->lpszMenuName.Length =
|
||||
ClassObject->lpszMenuName.MaximumLength = MenuName->MaximumLength;
|
||||
ClassObject->lpszMenuName.Buffer = ExAllocatePoolWithTag(PagedPool, ClassObject->lpszMenuName.MaximumLength, TAG_STRING);
|
||||
@@ -385,7 +385,7 @@ NtUserRegisterClassExWOW(
|
||||
PWNDCLASS_OBJECT ClassObject;
|
||||
NTSTATUS Status;
|
||||
RTL_ATOM Atom;
|
||||
|
||||
|
||||
if (!lpwcx)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
@@ -404,16 +404,16 @@ NtUserRegisterClassExWOW(
|
||||
SetLastNtError(Status);
|
||||
return (RTL_ATOM)0;
|
||||
}
|
||||
|
||||
|
||||
/* Deny negative sizes */
|
||||
if (lpwcx->cbClsExtra < 0 || lpwcx->cbWndExtra < 0)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return (RTL_ATOM)0;
|
||||
}
|
||||
|
||||
|
||||
WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
|
||||
|
||||
|
||||
if (ClassName->Length > 0)
|
||||
{
|
||||
DPRINT("NtUserRegisterClassExWOW(%S)\n", ClassName->Buffer);
|
||||
@@ -425,7 +425,7 @@ NtUserRegisterClassExWOW(
|
||||
{
|
||||
DPRINT1("Failed adding class name (%S) to atom table\n",
|
||||
ClassName->Buffer);
|
||||
SetLastNtError(Status);
|
||||
SetLastNtError(Status);
|
||||
return((RTL_ATOM)0);
|
||||
}
|
||||
}
|
||||
@@ -446,7 +446,7 @@ NtUserRegisterClassExWOW(
|
||||
IntLockProcessClasses(PsGetWin32Process());
|
||||
InsertTailList(&PsGetWin32Process()->ClassListHead, &ClassObject->ListEntry);
|
||||
IntUnLockProcessClasses(PsGetWin32Process());
|
||||
|
||||
|
||||
return(Atom);
|
||||
}
|
||||
|
||||
@@ -547,7 +547,7 @@ IntSetClassLong(PWINDOW_OBJECT WindowObject, ULONG Offset, LONG dwNewLong, BOOL
|
||||
*((LONG *)(WindowObject->Class->ExtraData + Offset)) = dwNewLong;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
switch (Offset)
|
||||
{
|
||||
case GCL_CBWNDEXTRA:
|
||||
@@ -665,15 +665,15 @@ NtUserUnregisterClass(
|
||||
{
|
||||
PWNDCLASS_OBJECT Class;
|
||||
PWINSTATION_OBJECT WinStaObject;
|
||||
|
||||
|
||||
DPRINT("NtUserUnregisterClass(%S)\n", ClassNameOrAtom);
|
||||
|
||||
|
||||
if (!ClassNameOrAtom || !PsGetWin32Thread()->Desktop)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
|
||||
|
||||
if (!ClassReferenceClassByNameOrAtom(&Class, ClassNameOrAtom, hInstance))
|
||||
@@ -681,14 +681,14 @@ NtUserUnregisterClass(
|
||||
SetLastWin32Error(ERROR_CLASS_DOES_NOT_EXIST);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (Class->hInstance && Class->hInstance != hInstance)
|
||||
{
|
||||
ClassDereferenceObject(Class);
|
||||
SetLastWin32Error(ERROR_CLASS_DOES_NOT_EXIST);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
IntLockClassWindows(Class);
|
||||
if (!IsListEmpty(&Class->ClassWindowsListHead))
|
||||
{
|
||||
@@ -699,17 +699,17 @@ NtUserUnregisterClass(
|
||||
return FALSE;
|
||||
}
|
||||
IntUnLockClassWindows(Class);
|
||||
|
||||
|
||||
/* Dereference the ClassReferenceClassByNameOrAtom() call */
|
||||
ClassDereferenceObject(Class);
|
||||
|
||||
|
||||
RemoveEntryList(&Class->ListEntry);
|
||||
|
||||
RtlDeleteAtomFromAtomTable(WinStaObject->AtomTable, Class->Atom);
|
||||
|
||||
|
||||
/* Free the object */
|
||||
ClassDereferenceObject(Class);
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@ CsrCloseHandle(HANDLE Handle)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
PEPROCESS OldProcess;
|
||||
|
||||
|
||||
/* Switch to the process in which the handle is valid */
|
||||
OldProcess = PsGetCurrentProcess();
|
||||
if (CsrProcess != OldProcess)
|
||||
|
||||
@@ -56,15 +56,15 @@ IntGetCursorLocation(PWINSTATION_OBJECT WinStaObject, POINT *loc)
|
||||
|
||||
#if 1
|
||||
/* FIXME - get the screen dc from the window station or desktop */
|
||||
if (!(hDC = IntGetScreenDC()))
|
||||
if (!(hDC = IntGetScreenDC()))
|
||||
return FALSE;
|
||||
#endif
|
||||
|
||||
if (!(dc = DC_LockDc(hDC)))
|
||||
return FALSE;
|
||||
|
||||
|
||||
hBitmap = dc->w.hBitmap;
|
||||
DC_UnlockDc(hDC);
|
||||
DC_UnlockDc(hDC);
|
||||
if (!(BitmapObj = BITMAPOBJ_LockBitmap(hBitmap)))
|
||||
return FALSE;
|
||||
|
||||
@@ -108,14 +108,14 @@ IntSetCursor(PWINSTATION_OBJECT WinStaObject, PCURICON_OBJECT NewCursor,
|
||||
SURFOBJ *soMask = NULL, *soColor = NULL;
|
||||
XLATEOBJ *XlateObj = NULL;
|
||||
HDC Screen;
|
||||
|
||||
|
||||
CurInfo = IntGetSysCursorInfo(WinStaObject);
|
||||
OldCursor = CurInfo->CurrentCursorObject;
|
||||
if (OldCursor)
|
||||
{
|
||||
Ret = (HCURSOR)OldCursor->Self;
|
||||
}
|
||||
|
||||
|
||||
if (!ForceChange && OldCursor == NewCursor)
|
||||
{
|
||||
return Ret;
|
||||
@@ -136,14 +136,14 @@ IntSetCursor(PWINSTATION_OBJECT WinStaObject, PCURICON_OBJECT NewCursor,
|
||||
dcbmp = dc->w.hBitmap;
|
||||
DevInfo = dc->DevInfo;
|
||||
DC_UnlockDc(Screen);
|
||||
|
||||
|
||||
BitmapObj = BITMAPOBJ_LockBitmap(dcbmp);
|
||||
if ( !BitmapObj )
|
||||
return (HCURSOR)0;
|
||||
SurfObj = &BitmapObj->SurfObj;
|
||||
ASSERT(SurfObj);
|
||||
}
|
||||
|
||||
|
||||
if (!NewCursor && (CurInfo->CurrentCursorObject || ForceChange))
|
||||
{
|
||||
if (NULL != CurInfo->CurrentCursorObject && CurInfo->ShowingCursor)
|
||||
@@ -162,7 +162,7 @@ IntSetCursor(PWINSTATION_OBJECT WinStaObject, PCURICON_OBJECT NewCursor,
|
||||
BITMAPOBJ_UnlockBitmap(dcbmp);
|
||||
return Ret;
|
||||
}
|
||||
|
||||
|
||||
if (!NewCursor)
|
||||
{
|
||||
BITMAPOBJ_UnlockBitmap(dcbmp);
|
||||
@@ -183,8 +183,8 @@ IntSetCursor(PWINSTATION_OBJECT WinStaObject, PCURICON_OBJECT NewCursor,
|
||||
BITMAPOBJ_UnlockBitmap(dcbmp);
|
||||
return Ret;
|
||||
}
|
||||
|
||||
if ((DevInfo->flGraphicsCaps2 & GCAPS2_ALPHACURSOR) &&
|
||||
|
||||
if ((DevInfo->flGraphicsCaps2 & GCAPS2_ALPHACURSOR) &&
|
||||
SurfObj->iBitmapFormat >= BMF_16BPP &&
|
||||
SurfObj->iBitmapFormat <= BMF_32BPP &&
|
||||
NewCursor->Shadow && COLORCURSORS_ALLOWED)
|
||||
@@ -243,7 +243,7 @@ IntSetCursor(PWINSTATION_OBJECT WinStaObject, PCURICON_OBJECT NewCursor,
|
||||
CurInfo->ShowingCursor = 0;
|
||||
CurInfo->CurrentCursorObject = NULL;
|
||||
}
|
||||
|
||||
|
||||
if (GDIDEVFUNCS(SurfObj).SetPointerShape)
|
||||
{
|
||||
GDIDEV(SurfObj)->Pointer.Status =
|
||||
@@ -269,8 +269,8 @@ IntSetCursor(PWINSTATION_OBJECT WinStaObject, PCURICON_OBJECT NewCursor,
|
||||
SurfObj, soMask, soColor, XlateObj,
|
||||
NewCursor->IconInfo.xHotspot,
|
||||
NewCursor->IconInfo.yHotspot,
|
||||
GDIDEV(SurfObj)->Pointer.Pos.x,
|
||||
GDIDEV(SurfObj)->Pointer.Pos.y,
|
||||
GDIDEV(SurfObj)->Pointer.Pos.x,
|
||||
GDIDEV(SurfObj)->Pointer.Pos.y,
|
||||
&(GDIDEV(SurfObj)->Pointer.Exclude),
|
||||
SPS_CHANGE);
|
||||
GDIDEV(SurfObj)->Pointer.MovePointer = EngMovePointer;
|
||||
@@ -279,7 +279,7 @@ IntSetCursor(PWINSTATION_OBJECT WinStaObject, PCURICON_OBJECT NewCursor,
|
||||
{
|
||||
GDIDEV(SurfObj)->Pointer.MovePointer = GDIDEVFUNCS(SurfObj).MovePointer;
|
||||
}
|
||||
|
||||
|
||||
BITMAPOBJ_UnlockBitmap(dcbmp);
|
||||
if(hMask)
|
||||
{
|
||||
@@ -294,10 +294,10 @@ IntSetCursor(PWINSTATION_OBJECT WinStaObject, PCURICON_OBJECT NewCursor,
|
||||
{
|
||||
EngDeleteXlate(XlateObj);
|
||||
}
|
||||
|
||||
|
||||
if(GDIDEV(SurfObj)->Pointer.Status == SPS_ERROR)
|
||||
DPRINT1("SetCursor: DrvSetPointerShape() returned SPS_ERROR\n");
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -334,7 +334,7 @@ ReferenceCurIconByProcess(PCURICON_OBJECT Object)
|
||||
PCURICON_PROCESS Current;
|
||||
|
||||
Win32Process = PsGetWin32Process();
|
||||
|
||||
|
||||
ExAcquireFastMutex(&Object->Lock);
|
||||
Search = Object->ProcessList.Flink;
|
||||
while (Search != &Object->ProcessList)
|
||||
@@ -363,13 +363,13 @@ ReferenceCurIconByProcess(PCURICON_OBJECT Object)
|
||||
}
|
||||
|
||||
PCURICON_OBJECT FASTCALL
|
||||
IntFindExistingCurIconObject(PWINSTATION_OBJECT WinStaObject, HMODULE hModule,
|
||||
IntFindExistingCurIconObject(PWINSTATION_OBJECT WinStaObject, HMODULE hModule,
|
||||
HRSRC hRsrc, LONG cx, LONG cy)
|
||||
{
|
||||
PLIST_ENTRY CurrentEntry;
|
||||
PCURICON_OBJECT Object;
|
||||
|
||||
ExAcquireFastMutex(&CurIconListLock);
|
||||
ExAcquireFastMutex(&CurIconListLock);
|
||||
|
||||
CurrentEntry = CurIconList.Flink;
|
||||
while (CurrentEntry != &CurIconList)
|
||||
@@ -396,7 +396,7 @@ IntFindExistingCurIconObject(PWINSTATION_OBJECT WinStaObject, HMODULE hModule,
|
||||
}
|
||||
ObmDereferenceObject(Object);
|
||||
}
|
||||
|
||||
|
||||
ExReleaseFastMutex(&CurIconListLock);
|
||||
|
||||
return NULL;
|
||||
@@ -407,15 +407,15 @@ IntCreateCurIconHandle(PWINSTATION_OBJECT WinStaObject)
|
||||
{
|
||||
PCURICON_OBJECT Object;
|
||||
HANDLE Handle;
|
||||
|
||||
|
||||
Object = ObmCreateObject(WinStaObject->HandleTable, &Handle, otCursorIcon, sizeof(CURICON_OBJECT));
|
||||
|
||||
|
||||
if(!Object)
|
||||
{
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Object->Self = Handle;
|
||||
ExInitializeFastMutex(&Object->Lock);
|
||||
InitializeListHead(&Object->ProcessList);
|
||||
@@ -490,7 +490,7 @@ IntDestroyCurIconObject(PWINSTATION_OBJECT WinStaObject, PCURICON_OBJECT Object,
|
||||
ExReleaseFastMutex(&Object->Lock);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
ExReleaseFastMutex(&Object->Lock);
|
||||
|
||||
if (! ProcessCleanup)
|
||||
@@ -507,12 +507,12 @@ IntDestroyCurIconObject(PWINSTATION_OBJECT WinStaObject, PCURICON_OBJECT Object,
|
||||
/* Hide the cursor if we're destroying the current cursor */
|
||||
IntSetCursor(WinStaObject, NULL, TRUE);
|
||||
}
|
||||
|
||||
|
||||
bmpMask = Object->IconInfo.hbmMask;
|
||||
bmpColor = Object->IconInfo.hbmColor;
|
||||
|
||||
|
||||
Ret = NT_SUCCESS(ObmCloseHandle(WinStaObject->HandleTable, Object->Self));
|
||||
|
||||
|
||||
/* delete bitmaps */
|
||||
if(bmpMask)
|
||||
{
|
||||
@@ -524,7 +524,7 @@ IntDestroyCurIconObject(PWINSTATION_OBJECT WinStaObject, PCURICON_OBJECT Object,
|
||||
GDIOBJ_SetOwnership(bmpColor, PsGetCurrentProcess());
|
||||
NtGdiDeleteObject(bmpColor);
|
||||
}
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -543,7 +543,7 @@ IntCleanupCurIcons(struct _EPROCESS *Process, PW32PROCESS Win32Process)
|
||||
return;
|
||||
}
|
||||
|
||||
ExAcquireFastMutex(&CurIconListLock);
|
||||
ExAcquireFastMutex(&CurIconListLock);
|
||||
|
||||
CurrentEntry = CurIconList.Flink;
|
||||
while (CurrentEntry != &CurIconList)
|
||||
@@ -573,7 +573,7 @@ IntCleanupCurIcons(struct _EPROCESS *Process, PW32PROCESS Win32Process)
|
||||
ObmDereferenceObject(Object);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ExReleaseFastMutex(&CurIconListLock);
|
||||
ObDereferenceObject(WinStaObject);
|
||||
}
|
||||
@@ -590,7 +590,7 @@ NtUserCreateCursorIconHandle(PICONINFO IconInfo, BOOL Indirect)
|
||||
PBITMAPOBJ bmp;
|
||||
NTSTATUS Status;
|
||||
HANDLE Ret;
|
||||
|
||||
|
||||
WinStaObject = IntGetWinStaObj();
|
||||
if(WinStaObject == NULL)
|
||||
{
|
||||
@@ -601,7 +601,7 @@ NtUserCreateCursorIconHandle(PICONINFO IconInfo, BOOL Indirect)
|
||||
if(CurIconObject)
|
||||
{
|
||||
Ret = CurIconObject->Self;
|
||||
|
||||
|
||||
if(IconInfo)
|
||||
{
|
||||
Status = MmCopyFromCaller(&CurIconObject->IconInfo, IconInfo, sizeof(ICONINFO));
|
||||
@@ -612,7 +612,7 @@ NtUserCreateCursorIconHandle(PICONINFO IconInfo, BOOL Indirect)
|
||||
CurIconObject->IconInfo.hbmMask = BITMAPOBJ_CopyBitmap(CurIconObject->IconInfo.hbmMask);
|
||||
CurIconObject->IconInfo.hbmColor = BITMAPOBJ_CopyBitmap(CurIconObject->IconInfo.hbmColor);
|
||||
}
|
||||
if(CurIconObject->IconInfo.hbmColor &&
|
||||
if(CurIconObject->IconInfo.hbmColor &&
|
||||
(bmp = BITMAPOBJ_LockBitmap(CurIconObject->IconInfo.hbmColor)))
|
||||
{
|
||||
CurIconObject->Size.cx = bmp->SurfObj.sizlBitmap.cx;
|
||||
@@ -620,7 +620,7 @@ NtUserCreateCursorIconHandle(PICONINFO IconInfo, BOOL Indirect)
|
||||
BITMAPOBJ_UnlockBitmap(CurIconObject->IconInfo.hbmColor);
|
||||
GDIOBJ_SetOwnership(CurIconObject->IconInfo.hbmColor, NULL);
|
||||
}
|
||||
if(CurIconObject->IconInfo.hbmMask &&
|
||||
if(CurIconObject->IconInfo.hbmMask &&
|
||||
(bmp = BITMAPOBJ_LockBitmap(CurIconObject->IconInfo.hbmMask)))
|
||||
{
|
||||
if (CurIconObject->IconInfo.hbmColor == NULL)
|
||||
@@ -638,7 +638,7 @@ NtUserCreateCursorIconHandle(PICONINFO IconInfo, BOOL Indirect)
|
||||
/* FIXME - Don't exit here */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ObDereferenceObject(WinStaObject);
|
||||
return Ret;
|
||||
}
|
||||
@@ -662,24 +662,24 @@ NtUserGetCursorIconInfo(
|
||||
PWINSTATION_OBJECT WinStaObject;
|
||||
NTSTATUS Status;
|
||||
BOOL Ret = FALSE;
|
||||
|
||||
|
||||
WinStaObject = IntGetWinStaObj();
|
||||
if(WinStaObject == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
CurIconObject = IntGetCurIconObject(WinStaObject, Handle);
|
||||
if(CurIconObject)
|
||||
{
|
||||
if(IconInfo)
|
||||
{
|
||||
RtlCopyMemory(&ii, &CurIconObject->IconInfo, sizeof(ICONINFO));
|
||||
|
||||
|
||||
/* Copy bitmaps */
|
||||
ii.hbmMask = BITMAPOBJ_CopyBitmap(ii.hbmMask);
|
||||
ii.hbmColor = BITMAPOBJ_CopyBitmap(ii.hbmColor);
|
||||
|
||||
ii.hbmColor = BITMAPOBJ_CopyBitmap(ii.hbmColor);
|
||||
|
||||
/* Copy fields */
|
||||
Status = MmCopyToCaller(IconInfo, &ii, sizeof(ICONINFO));
|
||||
if(NT_SUCCESS(Status))
|
||||
@@ -691,7 +691,7 @@ NtUserGetCursorIconInfo(
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
}
|
||||
|
||||
|
||||
IntReleaseCurIconObject(CurIconObject);
|
||||
ObDereferenceObject(WinStaObject);
|
||||
return Ret;
|
||||
@@ -719,13 +719,13 @@ NtUserGetCursorIconSize(
|
||||
NTSTATUS Status;
|
||||
BOOL Ret = FALSE;
|
||||
SIZE SafeSize;
|
||||
|
||||
|
||||
WinStaObject = IntGetWinStaObj();
|
||||
if(WinStaObject == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
CurIconObject = IntGetCurIconObject(WinStaObject, Handle);
|
||||
if(CurIconObject)
|
||||
{
|
||||
@@ -736,7 +736,7 @@ NtUserGetCursorIconSize(
|
||||
SetLastNtError(Status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
||||
bmp = BITMAPOBJ_LockBitmap(CurIconObject->IconInfo.hbmColor);
|
||||
if(!bmp)
|
||||
goto done;
|
||||
@@ -748,9 +748,9 @@ NtUserGetCursorIconSize(
|
||||
Ret = TRUE;
|
||||
else
|
||||
SetLastNtError(Status);
|
||||
|
||||
|
||||
BITMAPOBJ_UnlockBitmap(CurIconObject->IconInfo.hbmColor);
|
||||
|
||||
|
||||
done:
|
||||
IntReleaseCurIconObject(CurIconObject);
|
||||
ObDereferenceObject(WinStaObject);
|
||||
@@ -803,29 +803,29 @@ NtUserGetCursorInfo(
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(&SafeCi.cbSize, pci, sizeof(DWORD));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(SafeCi.cbSize != sizeof(CURSORINFO))
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
WinStaObject = IntGetWinStaObj();
|
||||
if(WinStaObject == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
CurInfo = IntGetSysCursorInfo(WinStaObject);
|
||||
CursorObject = (PCURICON_OBJECT)CurInfo->CurrentCursorObject;
|
||||
|
||||
|
||||
SafeCi.flags = ((CurInfo->ShowingCursor && CursorObject) ? CURSOR_SHOWING : 0);
|
||||
SafeCi.hCursor = (CursorObject ? (HCURSOR)CursorObject->Self : (HCURSOR)0);
|
||||
|
||||
@@ -838,7 +838,7 @@ NtUserGetCursorInfo(
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
ObDereferenceObject(WinStaObject);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -853,7 +853,7 @@ NtUserClipCursor(
|
||||
RECT *UnsafeRect)
|
||||
{
|
||||
/* FIXME - check if process has WINSTA_WRITEATTRIBUTES */
|
||||
|
||||
|
||||
PWINSTATION_OBJECT WinStaObject;
|
||||
PSYSTEM_CURSORINFO CurInfo;
|
||||
RECT Rect;
|
||||
@@ -872,25 +872,25 @@ NtUserClipCursor(
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
CurInfo = IntGetSysCursorInfo(WinStaObject);
|
||||
IntGetCursorLocation(WinStaObject, &MousePos);
|
||||
|
||||
if(WinStaObject->ActiveDesktop)
|
||||
DesktopWindow = IntGetWindowObject(WinStaObject->ActiveDesktop->DesktopWindow);
|
||||
|
||||
|
||||
if((Rect.right > Rect.left) && (Rect.bottom > Rect.top)
|
||||
&& DesktopWindow && UnsafeRect != NULL)
|
||||
{
|
||||
MOUSEINPUT mi;
|
||||
|
||||
|
||||
CurInfo->CursorClipInfo.IsClipped = TRUE;
|
||||
CurInfo->CursorClipInfo.Left = max(Rect.left, DesktopWindow->WindowRect.left);
|
||||
CurInfo->CursorClipInfo.Top = max(Rect.top, DesktopWindow->WindowRect.top);
|
||||
CurInfo->CursorClipInfo.Right = min(Rect.right - 1, DesktopWindow->WindowRect.right - 1);
|
||||
CurInfo->CursorClipInfo.Bottom = min(Rect.bottom - 1, DesktopWindow->WindowRect.bottom - 1);
|
||||
IntReleaseWindowObject(DesktopWindow);
|
||||
|
||||
|
||||
mi.dx = MousePos.x;
|
||||
mi.dy = MousePos.y;
|
||||
mi.mouseData = 0;
|
||||
@@ -898,13 +898,13 @@ NtUserClipCursor(
|
||||
mi.time = 0;
|
||||
mi.dwExtraInfo = 0;
|
||||
IntMouseInput(&mi);
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
CurInfo->CursorClipInfo.IsClipped = FALSE;
|
||||
ObDereferenceObject(WinStaObject);
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -921,13 +921,13 @@ NtUserDestroyCursorIcon(
|
||||
PWINSTATION_OBJECT WinStaObject;
|
||||
PCURICON_OBJECT Object;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
WinStaObject = IntGetWinStaObj();
|
||||
if(WinStaObject == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = ObmReferenceObjectByHandle(WinStaObject->HandleTable, Handle, otCursorIcon, (PVOID*)&Object);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -964,23 +964,23 @@ NtUserFindExistingCursorIcon(
|
||||
PCURICON_OBJECT CurIconObject;
|
||||
PWINSTATION_OBJECT WinStaObject;
|
||||
HANDLE Ret = (HANDLE)0;
|
||||
|
||||
|
||||
WinStaObject = IntGetWinStaObj();
|
||||
if(WinStaObject == NULL)
|
||||
{
|
||||
return Ret;
|
||||
}
|
||||
|
||||
|
||||
CurIconObject = IntFindExistingCurIconObject(WinStaObject, hModule, hRsrc, cx, cy);
|
||||
if(CurIconObject)
|
||||
{
|
||||
Ret = CurIconObject->Self;
|
||||
|
||||
|
||||
IntReleaseCurIconObject(CurIconObject);
|
||||
ObDereferenceObject(WinStaObject);
|
||||
return Ret;
|
||||
}
|
||||
|
||||
|
||||
SetLastWin32Error(ERROR_INVALID_CURSOR_HANDLE);
|
||||
ObDereferenceObject(WinStaObject);
|
||||
return (HANDLE)0;
|
||||
@@ -1000,7 +1000,7 @@ NtUserGetClipCursor(
|
||||
PWINSTATION_OBJECT WinStaObject;
|
||||
RECT Rect;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
if(!lpRect)
|
||||
return FALSE;
|
||||
|
||||
@@ -1009,7 +1009,7 @@ NtUserGetClipCursor(
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
CurInfo = IntGetSysCursorInfo(WinStaObject);
|
||||
if(CurInfo->CursorClipInfo.IsClipped)
|
||||
{
|
||||
@@ -1025,7 +1025,7 @@ NtUserGetClipCursor(
|
||||
Rect.right = NtUserGetSystemMetrics(SM_CXSCREEN);
|
||||
Rect.bottom = NtUserGetSystemMetrics(SM_CYSCREEN);
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyToCaller((PRECT)lpRect, &Rect, sizeof(RECT));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -1033,9 +1033,9 @@ NtUserGetClipCursor(
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
ObDereferenceObject(WinStaObject);
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1051,13 +1051,13 @@ NtUserSetCursor(
|
||||
PCURICON_OBJECT CurIconObject;
|
||||
HICON OldCursor = (HCURSOR)0;
|
||||
PWINSTATION_OBJECT WinStaObject;
|
||||
|
||||
|
||||
WinStaObject = IntGetWinStaObj();
|
||||
if(WinStaObject == NULL)
|
||||
{
|
||||
return (HCURSOR)0;
|
||||
}
|
||||
|
||||
|
||||
CurIconObject = IntGetCurIconObject(WinStaObject, hCursor);
|
||||
if(CurIconObject)
|
||||
{
|
||||
@@ -1066,7 +1066,7 @@ NtUserSetCursor(
|
||||
}
|
||||
else
|
||||
SetLastWin32Error(ERROR_INVALID_CURSOR_HANDLE);
|
||||
|
||||
|
||||
ObDereferenceObject(WinStaObject);
|
||||
return OldCursor;
|
||||
}
|
||||
@@ -1086,13 +1086,13 @@ NtUserSetCursorIconContents(
|
||||
PWINSTATION_OBJECT WinStaObject;
|
||||
NTSTATUS Status;
|
||||
BOOL Ret = FALSE;
|
||||
|
||||
|
||||
WinStaObject = IntGetWinStaObj();
|
||||
if(WinStaObject == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
CurIconObject = IntGetCurIconObject(WinStaObject, Handle);
|
||||
if(CurIconObject)
|
||||
{
|
||||
@@ -1103,7 +1103,7 @@ NtUserSetCursorIconContents(
|
||||
SetLastNtError(Status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
||||
bmp = BITMAPOBJ_LockBitmap(CurIconObject->IconInfo.hbmColor);
|
||||
if(bmp)
|
||||
{
|
||||
@@ -1117,16 +1117,16 @@ NtUserSetCursorIconContents(
|
||||
bmp = BITMAPOBJ_LockBitmap(CurIconObject->IconInfo.hbmMask);
|
||||
if(!bmp)
|
||||
goto done;
|
||||
|
||||
|
||||
CurIconObject->Size.cx = bmp->SurfObj.sizlBitmap.cx;
|
||||
CurIconObject->Size.cy = bmp->SurfObj.sizlBitmap.cy / 2;
|
||||
|
||||
|
||||
BITMAPOBJ_UnlockBitmap(CurIconObject->IconInfo.hbmMask);
|
||||
GDIOBJ_SetOwnership(CurIconObject->IconInfo.hbmMask, NULL);
|
||||
}
|
||||
|
||||
|
||||
Ret = TRUE;
|
||||
|
||||
|
||||
done:
|
||||
IntReleaseCurIconObject(CurIconObject);
|
||||
ObDereferenceObject(WinStaObject);
|
||||
@@ -1157,20 +1157,20 @@ NtUserSetCursorIconData(
|
||||
NTSTATUS Status;
|
||||
POINT SafeHotspot;
|
||||
BOOL Ret = FALSE;
|
||||
|
||||
|
||||
WinStaObject = IntGetWinStaObj();
|
||||
if(WinStaObject == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
CurIconObject = IntGetCurIconObject(WinStaObject, Handle);
|
||||
if(CurIconObject)
|
||||
{
|
||||
CurIconObject->hModule = hModule;
|
||||
CurIconObject->hRsrc = hRsrc;
|
||||
CurIconObject->hGroupRsrc = hGroupRsrc;
|
||||
|
||||
|
||||
/* Copy fields */
|
||||
if(fIcon)
|
||||
{
|
||||
@@ -1186,7 +1186,7 @@ NtUserSetCursorIconData(
|
||||
if(!Hotspot)
|
||||
Ret = TRUE;
|
||||
}
|
||||
|
||||
|
||||
if(Hotspot)
|
||||
{
|
||||
Status = MmCopyFromCaller(&SafeHotspot, Hotspot, sizeof(POINT));
|
||||
@@ -1194,18 +1194,18 @@ NtUserSetCursorIconData(
|
||||
{
|
||||
CurIconObject->IconInfo.xHotspot = SafeHotspot.x;
|
||||
CurIconObject->IconInfo.yHotspot = SafeHotspot.y;
|
||||
|
||||
|
||||
Ret = TRUE;
|
||||
}
|
||||
else
|
||||
SetLastNtError(Status);
|
||||
}
|
||||
|
||||
|
||||
if(!fIcon && !Hotspot)
|
||||
{
|
||||
Ret = TRUE;
|
||||
}
|
||||
|
||||
|
||||
done:
|
||||
IntReleaseCurIconObject(CurIconObject);
|
||||
ObDereferenceObject(WinStaObject);
|
||||
@@ -1264,29 +1264,29 @@ NtUserDrawIconEx(
|
||||
#if CANSTRETCHBLT
|
||||
INT nStretchMode;
|
||||
#endif
|
||||
|
||||
|
||||
WinStaObject = IntGetWinStaObj();
|
||||
if(WinStaObject == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
CurIconObject = IntGetCurIconObject(WinStaObject, hIcon);
|
||||
if(CurIconObject)
|
||||
{
|
||||
hbmMask = CurIconObject->IconInfo.hbmMask;
|
||||
hbmColor = CurIconObject->IconInfo.hbmColor;
|
||||
IntReleaseCurIconObject(CurIconObject);
|
||||
|
||||
|
||||
if(istepIfAniCur)
|
||||
DPRINT1("NtUserDrawIconEx: istepIfAniCur is not supported!\n");
|
||||
|
||||
|
||||
if(!hbmMask || !IntGdiGetObject(hbmMask, sizeof(BITMAP), &bmpMask))
|
||||
goto done;
|
||||
|
||||
|
||||
if(hbmColor && !IntGdiGetObject(hbmColor, sizeof(BITMAP), &bmpColor))
|
||||
goto done;
|
||||
|
||||
|
||||
if(hbmColor)
|
||||
{
|
||||
IconSize.cx = bmpColor.bmWidth;
|
||||
@@ -1297,27 +1297,27 @@ NtUserDrawIconEx(
|
||||
IconSize.cx = bmpMask.bmWidth;
|
||||
IconSize.cy = bmpMask.bmHeight / 2;
|
||||
}
|
||||
|
||||
|
||||
if(!diFlags)
|
||||
diFlags = DI_NORMAL;
|
||||
|
||||
|
||||
if(!cxWidth)
|
||||
cxWidth = ((diFlags & DI_DEFAULTSIZE) ? NtUserGetSystemMetrics(SM_CXICON) : IconSize.cx);
|
||||
if(!cyWidth)
|
||||
cyWidth = ((diFlags & DI_DEFAULTSIZE) ? NtUserGetSystemMetrics(SM_CYICON) : IconSize.cy);
|
||||
|
||||
|
||||
DoFlickerFree = (hbrFlickerFreeDraw && (NtGdiGetObjectType(hbrFlickerFreeDraw) == OBJ_BRUSH));
|
||||
|
||||
|
||||
if(DoFlickerFree)
|
||||
{
|
||||
RECT r;
|
||||
r.right = cxWidth;
|
||||
r.bottom = cyWidth;
|
||||
|
||||
|
||||
hdcOff = NtGdiCreateCompatableDC(hdc);
|
||||
if(!hdcOff)
|
||||
goto done;
|
||||
|
||||
|
||||
hbmOff = NtGdiCreateCompatibleBitmap(hdc, cxWidth, cyWidth);
|
||||
if(!hbmOff)
|
||||
{
|
||||
@@ -1329,26 +1329,26 @@ NtUserDrawIconEx(
|
||||
NtGdiPatBlt(hdcOff, 0, 0, r.right, r.bottom, PATCOPY);
|
||||
NtGdiSelectObject(hdcOff, hbmOff);
|
||||
}
|
||||
|
||||
|
||||
hdcMem = NtGdiCreateCompatableDC(hdc);
|
||||
if(!hdcMem)
|
||||
goto cleanup;
|
||||
|
||||
|
||||
if(!DoFlickerFree)
|
||||
hdcOff = hdc;
|
||||
|
||||
|
||||
#if CANSTRETCHBLT
|
||||
nStretchMode = NtGdiSetStretchBltMode(hdcOff, STRETCH_DELETESCANS);
|
||||
#endif
|
||||
oldFg = NtGdiSetTextColor(hdcOff, RGB(0, 0, 0));
|
||||
oldBg = NtGdiSetBkColor(hdcOff, RGB(255, 255, 255));
|
||||
|
||||
|
||||
if(diFlags & DI_MASK)
|
||||
{
|
||||
hOldMem = NtGdiSelectObject(hdcMem, hbmMask);
|
||||
#if CANSTRETCHBLT
|
||||
NtGdiStretchBlt(hdcOff, (DoFlickerFree ? 0 : xLeft), (DoFlickerFree ? 0 : yTop),
|
||||
cxWidth, cyWidth, hdcMem, 0, 0, IconSize.cx, IconSize.cy,
|
||||
cxWidth, cyWidth, hdcMem, 0, 0, IconSize.cx, IconSize.cy,
|
||||
((diFlags & DI_IMAGE) ? SRCAND : SRCCOPY));
|
||||
#else
|
||||
NtGdiBitBlt(hdcOff, (DoFlickerFree ? 0 : xLeft), (DoFlickerFree ? 0 : yTop),
|
||||
@@ -1367,25 +1367,25 @@ NtUserDrawIconEx(
|
||||
}
|
||||
NtGdiSelectObject(hdcMem, hOldMem);
|
||||
}
|
||||
|
||||
|
||||
if(diFlags & DI_IMAGE)
|
||||
{
|
||||
hOldMem = NtGdiSelectObject(hdcMem, (hbmColor ? hbmColor : hbmMask));
|
||||
#if CANSTRETCHBLT
|
||||
NtGdiStretchBlt(hdcOff, (DoFlickerFree ? 0 : xLeft), (DoFlickerFree ? 0 : yTop),
|
||||
cxWidth, cyWidth, hdcMem, 0, (hbmColor ? 0 : IconSize.cy),
|
||||
cxWidth, cyWidth, hdcMem, 0, (hbmColor ? 0 : IconSize.cy),
|
||||
IconSize.cx, IconSize.cy, ((diFlags & DI_MASK) ? SRCINVERT : SRCCOPY));
|
||||
#else
|
||||
NtGdiBitBlt(hdcOff, (DoFlickerFree ? 0 : xLeft), (DoFlickerFree ? 0 : yTop),
|
||||
cxWidth, cyWidth, hdcMem, 0, (hbmColor ? 0 : IconSize.cy),
|
||||
cxWidth, cyWidth, hdcMem, 0, (hbmColor ? 0 : IconSize.cy),
|
||||
((diFlags & DI_MASK) ? SRCINVERT : SRCCOPY));
|
||||
#endif
|
||||
NtGdiSelectObject(hdcMem, hOldMem);
|
||||
}
|
||||
|
||||
|
||||
if(DoFlickerFree)
|
||||
NtGdiBitBlt(hdc, xLeft, yTop, cxWidth, cyWidth, hdcOff, 0, 0, SRCCOPY);
|
||||
|
||||
|
||||
NtGdiSetTextColor(hdcOff, oldFg);
|
||||
NtGdiSetBkColor(hdcOff, oldBg);
|
||||
#if CANSTRETCHBLT
|
||||
@@ -1393,11 +1393,11 @@ NtUserDrawIconEx(
|
||||
#endif
|
||||
|
||||
Ret = TRUE;
|
||||
|
||||
|
||||
cleanup:
|
||||
if(DoFlickerFree)
|
||||
{
|
||||
|
||||
|
||||
NtGdiSelectObject(hdcOff, hOldOffBmp);
|
||||
NtGdiSelectObject(hdcOff, hOldOffBrush);
|
||||
NtGdiDeleteObject(hbmOff);
|
||||
@@ -1405,13 +1405,13 @@ NtUserDrawIconEx(
|
||||
}
|
||||
if(hdcMem)
|
||||
NtGdiDeleteDC(hdcMem);
|
||||
|
||||
|
||||
done:
|
||||
ObDereferenceObject(WinStaObject);
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
|
||||
SetLastWin32Error(ERROR_INVALID_CURSOR_HANDLE);
|
||||
ObDereferenceObject(WinStaObject);
|
||||
return FALSE;
|
||||
|
||||
@@ -47,7 +47,7 @@ ObFindHandleForObject(IN PEPROCESS Process,
|
||||
|
||||
/* Currently active desktop */
|
||||
PDESKTOP_OBJECT InputDesktop = NULL;
|
||||
HDESK InputDesktopHandle = NULL;
|
||||
HDESK InputDesktopHandle = NULL;
|
||||
HDC ScreenDeviceContext = NULL;
|
||||
|
||||
BOOL g_PaintDesktopVersion = FALSE;
|
||||
@@ -134,19 +134,19 @@ IntParseDesktopPath(PEPROCESS Process,
|
||||
BOOL DesktopPresent = FALSE;
|
||||
BOOL WinStaPresent = FALSE;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
ASSERT(hWinSta);
|
||||
|
||||
|
||||
*hWinSta = NULL;
|
||||
|
||||
|
||||
if(hDesktop != NULL)
|
||||
{
|
||||
*hDesktop = NULL;
|
||||
}
|
||||
|
||||
|
||||
RtlInitUnicodeString(&WinSta, NULL);
|
||||
RtlInitUnicodeString(&Desktop, NULL);
|
||||
|
||||
|
||||
if(DesktopPath != NULL && DesktopPath->Buffer != NULL && DesktopPath->Length > sizeof(WCHAR))
|
||||
{
|
||||
PWCHAR c = DesktopPath->Buffer;
|
||||
@@ -168,17 +168,17 @@ IntParseDesktopPath(PEPROCESS Process,
|
||||
l -= sizeof(WCHAR);
|
||||
c++;
|
||||
}
|
||||
|
||||
|
||||
if(wl > 0)
|
||||
{
|
||||
WinSta.Length = wl;
|
||||
WinSta.MaximumLength = wl + sizeof(WCHAR);
|
||||
WinSta.Buffer = DesktopPath->Buffer;
|
||||
|
||||
|
||||
WinStaPresent = TRUE;
|
||||
c++;
|
||||
}
|
||||
|
||||
|
||||
Desktop.Length = DesktopPath->Length - wl;
|
||||
if(wl > 0)
|
||||
{
|
||||
@@ -191,7 +191,7 @@ IntParseDesktopPath(PEPROCESS Process,
|
||||
DesktopPresent = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(!WinStaPresent)
|
||||
{
|
||||
/* search the process handle table for (inherited) window station
|
||||
@@ -207,7 +207,7 @@ IntParseDesktopPath(PEPROCESS Process,
|
||||
RtlInitUnicodeString(&WinSta, L"WinSta0");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(!DesktopPresent && hDesktop != NULL)
|
||||
{
|
||||
/* search the process handle table for (inherited) desktop
|
||||
@@ -223,7 +223,7 @@ IntParseDesktopPath(PEPROCESS Process,
|
||||
RtlInitUnicodeString(&Desktop, L"Default");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(*hWinSta == NULL)
|
||||
{
|
||||
if(!IntGetFullWindowStationName(&FullName, &WinSta, NULL))
|
||||
@@ -255,7 +255,7 @@ IntParseDesktopPath(PEPROCESS Process,
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(hDesktop != NULL && *hDesktop == NULL)
|
||||
{
|
||||
if(!IntGetFullWindowStationName(&FullName, &WinSta, &Desktop))
|
||||
@@ -264,7 +264,7 @@ IntParseDesktopPath(PEPROCESS Process,
|
||||
*hWinSta = NULL;
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
|
||||
/* open the desktop object */
|
||||
InitializeObjectAttributes(&ObjectAttributes,
|
||||
&FullName,
|
||||
@@ -281,7 +281,7 @@ IntParseDesktopPath(PEPROCESS Process,
|
||||
(HANDLE*)hDesktop);
|
||||
|
||||
RtlFreeUnicodeString(&FullName);
|
||||
|
||||
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
*hDesktop = NULL;
|
||||
@@ -292,7 +292,7 @@ IntParseDesktopPath(PEPROCESS Process,
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -333,9 +333,9 @@ VOID FASTCALL
|
||||
IntGetDesktopWorkArea(PDESKTOP_OBJECT Desktop, PRECT Rect)
|
||||
{
|
||||
PRECT Ret;
|
||||
|
||||
|
||||
ASSERT(Desktop);
|
||||
|
||||
|
||||
Ret = &Desktop->WorkArea;
|
||||
if((Ret->right == -1) && ScreenDeviceContext)
|
||||
{
|
||||
@@ -352,7 +352,7 @@ IntGetDesktopWorkArea(PDESKTOP_OBJECT Desktop, PRECT Rect)
|
||||
}
|
||||
DC_UnlockDc(ScreenDeviceContext);
|
||||
}
|
||||
|
||||
|
||||
if(Rect)
|
||||
{
|
||||
*Rect = *Ret;
|
||||
@@ -373,15 +373,15 @@ IntGetDesktopObjectHandle(PDESKTOP_OBJECT DesktopObject)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
HDESK Ret;
|
||||
|
||||
|
||||
ASSERT(DesktopObject);
|
||||
|
||||
|
||||
Status = ObFindHandleForObject(PsGetCurrentProcess(),
|
||||
DesktopObject,
|
||||
ExDesktopObjectType,
|
||||
NULL,
|
||||
(PHANDLE)&Ret);
|
||||
|
||||
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
Status = ObOpenObjectByPointer(DesktopObject,
|
||||
@@ -394,11 +394,11 @@ IntGetDesktopObjectHandle(PDESKTOP_OBJECT DesktopObject)
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
/* unable to create a handle */
|
||||
DPRINT1("Unable to create a desktop handle\n");
|
||||
DPRINT1("Unable to create a desktop handle\n");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -478,7 +478,7 @@ BOOL FASTCALL IntDesktopUpdatePerUserSettings(BOOL bEnable)
|
||||
QueryTable[0].EntryContext = &g_PaintDesktopVersion;
|
||||
|
||||
/* Query the "PaintDesktopVersion" flag in the "Control Panel\Desktop" key */
|
||||
Status = RtlQueryRegistryValues(RTL_REGISTRY_USER,
|
||||
Status = RtlQueryRegistryValues(RTL_REGISTRY_USER,
|
||||
L"Control Panel\\Desktop",
|
||||
QueryTable, NULL, NULL);
|
||||
if (!NT_SUCCESS(Status))
|
||||
@@ -488,7 +488,7 @@ BOOL FASTCALL IntDesktopUpdatePerUserSettings(BOOL bEnable)
|
||||
g_PaintDesktopVersion = FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
DPRINT("PaintDesktopVersion = %d\n", g_PaintDesktopVersion);
|
||||
|
||||
return TRUE;
|
||||
@@ -611,7 +611,7 @@ VOID IntShellHookNotify(WPARAM Message, LPARAM lParam)
|
||||
}
|
||||
KeReleaseSpinLock(&Desktop->Lock, OldLevel);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Add the window to the ShellHookWindows list. The windows
|
||||
* on that list get notifications that are important to shell
|
||||
@@ -730,7 +730,7 @@ NtUserCreateDesktop(
|
||||
HDESK Desktop;
|
||||
CSRSS_API_REQUEST Request;
|
||||
CSRSS_API_REPLY Reply;
|
||||
|
||||
|
||||
DPRINT("CreateDesktop: %wZ\n", lpszDesktopName);
|
||||
|
||||
Status = IntValidateWindowStationHandle(
|
||||
@@ -746,7 +746,7 @@ NtUserCreateDesktop(
|
||||
SetLastNtError(Status);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
if (! IntGetFullWindowStationName(&DesktopName, &WinStaObject->Name,
|
||||
lpszDesktopName))
|
||||
{
|
||||
@@ -809,7 +809,7 @@ NtUserCreateDesktop(
|
||||
SetLastNtError(STATUS_UNSUCCESSFUL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
// init desktop area
|
||||
DesktopObject->WorkArea.left = 0;
|
||||
DesktopObject->WorkArea.top = 0;
|
||||
@@ -827,7 +827,7 @@ NtUserCreateDesktop(
|
||||
0,
|
||||
NULL,
|
||||
(HANDLE*)&Desktop);
|
||||
|
||||
|
||||
ObDereferenceObject(DesktopObject);
|
||||
ExFreePool(DesktopName.Buffer);
|
||||
|
||||
@@ -929,7 +929,7 @@ NtUserOpenDesktop(
|
||||
ObDereferenceObject(WinStaObject);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
ObDereferenceObject(WinStaObject);
|
||||
|
||||
DPRINT1("Trying to open desktop (%wZ)\n", &DesktopName);
|
||||
@@ -978,7 +978,7 @@ NtUserOpenDesktop(
|
||||
*
|
||||
* dwDesiredAccess
|
||||
* Requested type of access.
|
||||
*
|
||||
*
|
||||
* Return Value
|
||||
* Handle to the input desktop or zero on failure.
|
||||
*
|
||||
@@ -1123,8 +1123,8 @@ static int GetSystemVersionString(LPWSTR buffer)
|
||||
* function is provided primarily for shell desktops.
|
||||
*
|
||||
* Parameters
|
||||
* hDC
|
||||
* Handle to the device context.
|
||||
* hDC
|
||||
* Handle to the device context.
|
||||
*
|
||||
* Status
|
||||
* @implemented
|
||||
@@ -1159,14 +1159,14 @@ NtUserPaintDesktop(HDC hDC)
|
||||
SIZE sz;
|
||||
int x, y;
|
||||
HDC hWallpaperDC;
|
||||
|
||||
|
||||
sz.cx = DeskWin->WindowRect.right - DeskWin->WindowRect.left;
|
||||
sz.cy = DeskWin->WindowRect.bottom - DeskWin->WindowRect.top;
|
||||
IntReleaseWindowObject(DeskWin);
|
||||
|
||||
x = (sz.cx / 2) - (WinSta->cxWallpaper / 2);
|
||||
y = (sz.cy / 2) - (WinSta->cyWallpaper / 2);
|
||||
|
||||
|
||||
hWallpaperDC = NtGdiCreateCompatableDC(hDC);
|
||||
if(hWallpaperDC != NULL)
|
||||
{
|
||||
@@ -1185,7 +1185,7 @@ NtUserPaintDesktop(HDC hDC)
|
||||
hOldBitmap = NtGdiSelectObject(hWallpaperDC, WinSta->hbmWallpaper);
|
||||
NtGdiBitBlt(hDC, x, y, WinSta->cxWallpaper, WinSta->cyWallpaper, hWallpaperDC, 0, 0, SRCCOPY);
|
||||
NtGdiSelectObject(hWallpaperDC, hOldBitmap);
|
||||
|
||||
|
||||
NtGdiDeleteDC(hWallpaperDC);
|
||||
}
|
||||
}
|
||||
@@ -1262,12 +1262,12 @@ NtUserSwitchDesktop(HDESK hDesktop)
|
||||
0,
|
||||
&DesktopObject);
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("Validation of desktop handle (0x%X) failed\n", hDesktop);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Don't allow applications switch the desktop if it's locked, unless the caller
|
||||
* is the logon application itself
|
||||
@@ -1279,7 +1279,7 @@ NtUserSwitchDesktop(HDESK hDesktop)
|
||||
DPRINT1("Switching desktop 0x%x denied because the work station is locked!\n", hDesktop);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/* FIXME: Fail if the desktop belong to an invisible window station */
|
||||
/* FIXME: Fail if the process is associated with a secured
|
||||
desktop such as Winlogon or Screen-Saver */
|
||||
@@ -1327,20 +1327,20 @@ NtUserGetThreadDesktop(DWORD dwThreadId, DWORD Unknown1)
|
||||
PDESKTOP_OBJECT DesktopObject;
|
||||
HDESK Ret, hThreadDesktop;
|
||||
OBJECT_HANDLE_INFORMATION HandleInformation;
|
||||
|
||||
|
||||
if(!dwThreadId)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Status = PsLookupThreadByThreadId((HANDLE)dwThreadId, &Thread);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
if(Thread->ThreadsProcess == PsGetCurrentProcess())
|
||||
{
|
||||
/* just return the handle, we queried the desktop handle of a thread running
|
||||
@@ -1349,7 +1349,7 @@ NtUserGetThreadDesktop(DWORD dwThreadId, DWORD Unknown1)
|
||||
ObDereferenceObject(Thread);
|
||||
return Ret;
|
||||
}
|
||||
|
||||
|
||||
/* get the desktop handle and the desktop of the thread */
|
||||
if(!(hThreadDesktop = Thread->Tcb.Win32Thread->hDesktop) ||
|
||||
!(DesktopObject = Thread->Tcb.Win32Thread->Desktop))
|
||||
@@ -1358,7 +1358,7 @@ NtUserGetThreadDesktop(DWORD dwThreadId, DWORD Unknown1)
|
||||
DPRINT1("Desktop information of thread 0x%x broken!?\n", dwThreadId);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/* we could just use DesktopObject instead of looking up the handle, but latter
|
||||
may be a bit safer (e.g. when the desktop is being destroyed */
|
||||
/* switch into the context of the thread we're trying to get the desktop from,
|
||||
@@ -1371,18 +1371,18 @@ NtUserGetThreadDesktop(DWORD dwThreadId, DWORD Unknown1)
|
||||
(PVOID*)&DesktopObject,
|
||||
&HandleInformation);
|
||||
KeDetachProcess();
|
||||
|
||||
|
||||
/* the handle couldn't be found, there's nothing to get... */
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
ObDereferenceObject(Thread);
|
||||
return NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/* lookup our handle table if we can find a handle to the desktop object,
|
||||
if not, create one */
|
||||
Ret = IntGetDesktopObjectHandle(DesktopObject);
|
||||
|
||||
|
||||
/* all done, we got a valid handle to the desktop */
|
||||
ObDereferenceObject(DesktopObject);
|
||||
ObDereferenceObject(Thread);
|
||||
@@ -1410,7 +1410,7 @@ NtUserSetThreadDesktop(HDESK hDesktop)
|
||||
0,
|
||||
&DesktopObject);
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("Validation of desktop handle (0x%X) failed\n", hDesktop);
|
||||
return FALSE;
|
||||
|
||||
@@ -128,7 +128,7 @@ IntFindChildWindowToOwner(PWINDOW_OBJECT Root, PWINDOW_OBJECT Owner)
|
||||
HWND Ret;
|
||||
PWINDOW_OBJECT Child, OwnerWnd;
|
||||
IntLockRelatives(Root);
|
||||
|
||||
|
||||
for(Child = Root->FirstChild; Child; Child = Child->NextSibling)
|
||||
{
|
||||
IntLockRelatives(Child);
|
||||
@@ -136,7 +136,7 @@ IntFindChildWindowToOwner(PWINDOW_OBJECT Root, PWINDOW_OBJECT Owner)
|
||||
IntUnLockRelatives(Child);
|
||||
if(!OwnerWnd)
|
||||
continue;
|
||||
|
||||
|
||||
if(OwnerWnd == Owner)
|
||||
{
|
||||
IntUnLockRelatives(Root);
|
||||
@@ -146,7 +146,7 @@ IntFindChildWindowToOwner(PWINDOW_OBJECT Root, PWINDOW_OBJECT Owner)
|
||||
}
|
||||
IntReleaseWindowObject(OwnerWnd);
|
||||
}
|
||||
|
||||
|
||||
IntUnLockRelatives(Root);
|
||||
return NULL;
|
||||
}
|
||||
@@ -216,7 +216,7 @@ IntSetForegroundAndFocusWindow(PWINDOW_OBJECT Window, PWINDOW_OBJECT FocusWindow
|
||||
|
||||
IntSendSetFocusMessages(hWndFocusPrev, hWndFocus);
|
||||
IntSendActivateMessages(hWndPrev, hWnd, MouseActivate);
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -231,7 +231,7 @@ IntMouseActivateWindow(PWINDOW_OBJECT Window)
|
||||
{
|
||||
HWND Top;
|
||||
PWINDOW_OBJECT TopWindow;
|
||||
|
||||
|
||||
if(Window->Style & WS_DISABLED)
|
||||
{
|
||||
BOOL Ret;
|
||||
@@ -251,7 +251,7 @@ IntMouseActivateWindow(PWINDOW_OBJECT Window)
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Top = NtUserGetAncestor(Window->Self, GA_ROOT);
|
||||
if (Top != Window->Self)
|
||||
{
|
||||
@@ -436,14 +436,14 @@ NtUserSetCapture(HWND hWnd)
|
||||
}
|
||||
}
|
||||
hWndPrev = MsqSetStateWindow(ThreadQueue, MSQ_STATE_CAPTURE, hWnd);
|
||||
|
||||
|
||||
/* also remove other windows if not capturing anymore */
|
||||
if(hWnd == NULL)
|
||||
{
|
||||
MsqSetStateWindow(ThreadQueue, MSQ_STATE_MENUOWNER, NULL);
|
||||
MsqSetStateWindow(ThreadQueue, MSQ_STATE_MOVESIZE, NULL);
|
||||
}
|
||||
|
||||
|
||||
IntPostOrSendMessage(hWndPrev, WM_CAPTURECHANGED, 0, (LPARAM)hWnd);
|
||||
IntLockMessageQueue(ThreadQueue);
|
||||
ThreadQueue->CaptureWindow = hWnd;
|
||||
|
||||
@@ -52,11 +52,11 @@ AddGuiApp(PW32PROCESS W32Data)
|
||||
if (InterlockedIncrement(&NrGuiAppsRunning) == 1)
|
||||
{
|
||||
BOOL Initialized;
|
||||
|
||||
|
||||
ExAcquireFastMutex(&GuiSwitchLock);
|
||||
Initialized = IntInitializeDesktopGraphics();
|
||||
ExReleaseFastMutex(&GuiSwitchLock);
|
||||
|
||||
|
||||
if (!Initialized)
|
||||
{
|
||||
W32Data->Flags &= ~W32PF_CREATEDWINORDC;
|
||||
|
||||
@@ -141,7 +141,7 @@ IntGetFirstValidHook(PHOOKTABLE Table, int HookId)
|
||||
? NULL : CONTAINING_RECORD(Elem, HOOK, Chain));
|
||||
}
|
||||
IntUnLockHookTable(Table);
|
||||
|
||||
|
||||
return Hook;
|
||||
}
|
||||
|
||||
@@ -180,11 +180,11 @@ IntFreeHook(PHOOKTABLE Table, PHOOK Hook, PWINSTATION_OBJECT WinStaObj)
|
||||
{
|
||||
RemoveEntryList(&Hook->Chain);
|
||||
RtlFreeUnicodeString(&Hook->ModuleName);
|
||||
|
||||
|
||||
/* Dereference thread if required */
|
||||
if(Hook->Flags & HOOK_THREAD_REFERENCED)
|
||||
ObDereferenceObject(Hook->Thread);
|
||||
|
||||
|
||||
/* Close handle */
|
||||
ObmCloseHandle(WinStaObj->HandleTable, Hook->Self);
|
||||
}
|
||||
@@ -293,7 +293,7 @@ HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam)
|
||||
KernelMode,
|
||||
0,
|
||||
&WinStaObj);
|
||||
|
||||
|
||||
if(! NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("Invalid window station????\n");
|
||||
@@ -508,12 +508,12 @@ NtUserSetWindowsHookEx(
|
||||
SetLastWin32Error(ERROR_NOT_SUPPORTED);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
Status = IntValidateWindowStationHandle(PsGetCurrentProcess()->Win32WindowStation,
|
||||
KernelMode,
|
||||
0,
|
||||
&WinStaObj);
|
||||
|
||||
|
||||
if(! NT_SUCCESS(Status))
|
||||
{
|
||||
if(ReleaseThread && Thread)
|
||||
@@ -530,10 +530,10 @@ NtUserSetWindowsHookEx(
|
||||
ObDereferenceObject(WinStaObj);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
if(ReleaseThread)
|
||||
Hook->Flags |= HOOK_THREAD_REFERENCED;
|
||||
|
||||
|
||||
if (NULL != Mod)
|
||||
{
|
||||
Status = MmCopyFromCaller(&ModuleName, UnsafeModuleName, sizeof(UNICODE_STRING));
|
||||
@@ -617,7 +617,7 @@ NtUserUnhookWindowsHookEx(
|
||||
KernelMode,
|
||||
0,
|
||||
&WinStaObj);
|
||||
|
||||
|
||||
if(! NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
|
||||
@@ -67,7 +67,7 @@ GetHotKey (PWINSTATION_OBJECT WinStaObject,
|
||||
{
|
||||
PLIST_ENTRY Entry;
|
||||
PHOT_KEY_ITEM HotKeyItem;
|
||||
|
||||
|
||||
if(!WinStaObject)
|
||||
{
|
||||
return FALSE;
|
||||
@@ -113,7 +113,7 @@ UnregisterWindowHotKeys(PWINDOW_OBJECT Window)
|
||||
PLIST_ENTRY Entry;
|
||||
PHOT_KEY_ITEM HotKeyItem;
|
||||
PWINSTATION_OBJECT WinStaObject = NULL;
|
||||
|
||||
|
||||
if(Window->OwnerThread && Window->OwnerThread->ThreadsProcess)
|
||||
WinStaObject = Window->OwnerThread->Tcb.Win32Thread->Desktop->WindowStation;
|
||||
|
||||
@@ -146,13 +146,13 @@ UnregisterThreadHotKeys(struct _ETHREAD *Thread)
|
||||
PLIST_ENTRY Entry;
|
||||
PHOT_KEY_ITEM HotKeyItem;
|
||||
PWINSTATION_OBJECT WinStaObject = NULL;
|
||||
|
||||
|
||||
if(Thread->Tcb.Win32Thread && Thread->Tcb.Win32Thread->Desktop)
|
||||
WinStaObject = Thread->Tcb.Win32Thread->Desktop->WindowStation;
|
||||
|
||||
|
||||
if(!WinStaObject)
|
||||
return;
|
||||
|
||||
|
||||
IntLockHotKeys(WinStaObject);
|
||||
|
||||
Entry = WinStaObject->HotKeyListHead.Flink;
|
||||
@@ -210,7 +210,7 @@ NtUserRegisterHotKey(HWND hWnd,
|
||||
PWINDOW_OBJECT Window;
|
||||
PWINSTATION_OBJECT WinStaObject = NULL;
|
||||
PETHREAD HotKeyThread;
|
||||
|
||||
|
||||
if (hWnd == NULL)
|
||||
{
|
||||
HotKeyThread = PsGetCurrentThread();
|
||||
@@ -227,10 +227,10 @@ NtUserRegisterHotKey(HWND hWnd,
|
||||
IntReleaseWindowObject(Window);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(HotKeyThread->ThreadsProcess && HotKeyThread->ThreadsProcess->Win32Process)
|
||||
WinStaObject = HotKeyThread->Tcb.Win32Thread->Desktop->WindowStation;
|
||||
|
||||
|
||||
if(!WinStaObject)
|
||||
{
|
||||
return FALSE;
|
||||
@@ -262,7 +262,7 @@ NtUserRegisterHotKey(HWND hWnd,
|
||||
&HotKeyItem->ListEntry);
|
||||
|
||||
IntUnLockHotKeys(WinStaObject);
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -275,17 +275,17 @@ NtUserUnregisterHotKey(HWND hWnd,
|
||||
PHOT_KEY_ITEM HotKeyItem;
|
||||
PWINDOW_OBJECT Window;
|
||||
PWINSTATION_OBJECT WinStaObject = NULL;
|
||||
|
||||
|
||||
Window = IntGetWindowObject(hWnd);
|
||||
if(!Window)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(Window->OwnerThread->ThreadsProcess && Window->OwnerThread->ThreadsProcess->Win32Process)
|
||||
WinStaObject = Window->OwnerThread->Tcb.Win32Thread->Desktop->WindowStation;
|
||||
|
||||
|
||||
if(!WinStaObject)
|
||||
{
|
||||
IntReleaseWindowObject(Window);
|
||||
@@ -306,7 +306,7 @@ NtUserUnregisterHotKey(HWND hWnd,
|
||||
RemoveEntryList (&HotKeyItem->ListEntry);
|
||||
ExFreePool (HotKeyItem);
|
||||
IntUnLockHotKeys(WinStaObject);
|
||||
|
||||
|
||||
IntReleaseWindowObject(Window);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -315,7 +315,7 @@ NtUserUnregisterHotKey(HWND hWnd,
|
||||
}
|
||||
|
||||
IntUnLockHotKeys(WinStaObject);
|
||||
|
||||
|
||||
IntReleaseWindowObject(Window);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -151,7 +151,7 @@ MouseThreadMain(PVOID StartContext)
|
||||
OBJECT_ATTRIBUTES MouseObjectAttributes;
|
||||
IO_STATUS_BLOCK Iosb;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
RtlRosInitUnicodeStringFromLiteral(&MouseDeviceName, L"\\??\\Mouse"); /* FIXME - does win use the same? */
|
||||
InitializeObjectAttributes(&MouseObjectAttributes,
|
||||
&MouseDeviceName,
|
||||
@@ -169,7 +169,7 @@ MouseThreadMain(PVOID StartContext)
|
||||
DPRINT1("Win32K: Failed to open mouse.\n");
|
||||
return; //(Status);
|
||||
}
|
||||
|
||||
|
||||
for(;;)
|
||||
{
|
||||
/*
|
||||
@@ -182,7 +182,7 @@ MouseThreadMain(PVOID StartContext)
|
||||
TRUE,
|
||||
NULL);
|
||||
DPRINT("Mouse Input Thread Starting...\n");
|
||||
|
||||
|
||||
/*
|
||||
* Receive and process keyboard input.
|
||||
*/
|
||||
@@ -213,7 +213,7 @@ MouseThreadMain(PVOID StartContext)
|
||||
return; //(Status);
|
||||
}
|
||||
DPRINT("MouseEvent\n");
|
||||
|
||||
|
||||
ProcessMouseInputData(&MouseInput, Iosb.Information / sizeof(MOUSE_INPUT_DATA));
|
||||
}
|
||||
DPRINT("Mouse Input Thread Stopped...\n");
|
||||
@@ -284,7 +284,7 @@ IntKeyboardGetIndicatorTrans(HANDLE KeyboardDeviceHandle,
|
||||
Ret = ExAllocatePoolWithTag(PagedPool,
|
||||
Size,
|
||||
TAG_KEYBOARD);
|
||||
|
||||
|
||||
while (Ret)
|
||||
{
|
||||
Status = NtDeviceIoControlFile(KeyboardDeviceHandle,
|
||||
@@ -343,7 +343,7 @@ IntKeyboardUpdateLeds(HANDLE KeyboardDeviceHandle,
|
||||
{
|
||||
if (KeyInput->MakeCode == IndicatorTrans->IndicatorList[Count].MakeCode)
|
||||
{
|
||||
Indicators.LedFlags ^=
|
||||
Indicators.LedFlags ^=
|
||||
IndicatorTrans->IndicatorList[Count].IndicatorFlags;
|
||||
|
||||
/* Update the lights on the hardware */
|
||||
@@ -415,7 +415,7 @@ KeyboardThreadMain(PVOID StartContext)
|
||||
USHORT LastMakeCode = 0;
|
||||
USHORT LastFlags = 0;
|
||||
UINT RepeatCount = 0;
|
||||
|
||||
|
||||
RtlRosInitUnicodeStringFromLiteral(&KeyboardDeviceName, L"\\??\\Keyboard");
|
||||
InitializeObjectAttributes(&KeyboardObjectAttributes,
|
||||
&KeyboardDeviceName,
|
||||
@@ -503,7 +503,7 @@ KeyboardThreadMain(PVOID StartContext)
|
||||
if (ModifierState == fsModifiers &&
|
||||
(fsModifiers == MOD_ALT || fsModifiers == MOD_WIN))
|
||||
{
|
||||
/* First send out special notifications
|
||||
/* First send out special notifications
|
||||
* (For alt, the message that turns on accelerator
|
||||
* display, not sure what for win. Both TODO though.)
|
||||
*/
|
||||
@@ -669,17 +669,17 @@ KeyboardThreadMain(PVOID StartContext)
|
||||
MsqPostHotKeyMessage (Thread,
|
||||
hWnd,
|
||||
(WPARAM)id,
|
||||
MAKELPARAM((WORD)ModifierState,
|
||||
MAKELPARAM((WORD)ModifierState,
|
||||
(WORD)msg.wParam));
|
||||
}
|
||||
continue; /* Eat key up motion too */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Post a keyboard message.
|
||||
*/
|
||||
MsqPostKeyboardMessage(msg.message,msg.wParam,msg.lParam);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
KeyboardEscape:
|
||||
@@ -695,7 +695,7 @@ NtUserAcquireOrReleaseInputOwnership(BOOLEAN Release)
|
||||
DPRINT( "Releasing input: PM = %08x\n", pmPrimitiveMessageQueue );
|
||||
KeClearEvent(&InputThreadsStart);
|
||||
InputThreadsRunning = FALSE;
|
||||
|
||||
|
||||
NtAlertThread(KeyboardThreadHandle);
|
||||
}
|
||||
else if (!Release && !InputThreadsRunning)
|
||||
@@ -728,7 +728,7 @@ InitInputImpl(VOID)
|
||||
|
||||
/* Initialize the default keyboard layout */
|
||||
(VOID)W32kGetDefaultKeyLayout();
|
||||
|
||||
|
||||
|
||||
Status = PsCreateSystemThread(&MouseThreadHandle,
|
||||
THREAD_ALL_ACCESS,
|
||||
@@ -741,7 +741,7 @@ InitInputImpl(VOID)
|
||||
{
|
||||
DPRINT1("Win32K: Failed to create mouse thread.\n");
|
||||
}
|
||||
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -767,16 +767,16 @@ IntBlockInput(PW32THREAD W32Thread, BOOL BlockIt)
|
||||
{
|
||||
PW32THREAD OldBlock;
|
||||
ASSERT(W32Thread);
|
||||
|
||||
|
||||
if(!W32Thread->Desktop || (W32Thread->IsExiting && BlockIt))
|
||||
{
|
||||
/*
|
||||
* fail blocking if exiting the thread
|
||||
*/
|
||||
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* FIXME - check access rights of the window station
|
||||
* e.g. services running in the service window station cannot block input
|
||||
@@ -787,7 +787,7 @@ IntBlockInput(PW32THREAD W32Thread, BOOL BlockIt)
|
||||
SetLastWin32Error(ERROR_ACCESS_DENIED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
ASSERT(W32Thread->Desktop);
|
||||
OldBlock = W32Thread->Desktop->BlockInputThread;
|
||||
if(OldBlock)
|
||||
@@ -800,7 +800,7 @@ IntBlockInput(PW32THREAD W32Thread, BOOL BlockIt)
|
||||
W32Thread->Desktop->BlockInputThread = (BlockIt ? W32Thread : NULL);
|
||||
return OldBlock == NULL;
|
||||
}
|
||||
|
||||
|
||||
W32Thread->Desktop->BlockInputThread = (BlockIt ? W32Thread : NULL);
|
||||
return OldBlock == NULL;
|
||||
}
|
||||
@@ -818,7 +818,7 @@ IntSwapMouseButton(PWINSTATION_OBJECT WinStaObject, BOOL Swap)
|
||||
{
|
||||
PSYSTEM_CURSORINFO CurInfo;
|
||||
BOOL res;
|
||||
|
||||
|
||||
CurInfo = IntGetSysCursorInfo(WinStaObject);
|
||||
res = CurInfo->SwapButtons;
|
||||
CurInfo->SwapButtons = Swap;
|
||||
@@ -842,17 +842,17 @@ IntMouseInput(MOUSEINPUT *mi)
|
||||
PDC dc;
|
||||
PWINDOW_OBJECT DesktopWindow;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
#if 1
|
||||
HDC hDC;
|
||||
|
||||
|
||||
/* FIXME - get the screen dc from the window station or desktop */
|
||||
if(!(hDC = IntGetScreenDC()))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
ASSERT(mi);
|
||||
#if 0
|
||||
WinSta = PsGetWin32Process()->WindowStation;
|
||||
@@ -863,16 +863,16 @@ IntMouseInput(MOUSEINPUT *mi)
|
||||
WinSta = InputWindowStation;
|
||||
#endif
|
||||
ASSERT(WinSta);
|
||||
|
||||
|
||||
CurInfo = IntGetSysCursorInfo(WinSta);
|
||||
|
||||
|
||||
if(!mi->time)
|
||||
{
|
||||
LARGE_INTEGER LargeTickCount;
|
||||
KeQueryTickCount(&LargeTickCount);
|
||||
mi->time = LargeTickCount.u.LowPart;
|
||||
}
|
||||
|
||||
|
||||
SwapButtons = CurInfo->SwapButtons;
|
||||
DoMove = FALSE;
|
||||
|
||||
@@ -893,7 +893,7 @@ IntMouseInput(MOUSEINPUT *mi)
|
||||
MousePos.x += mi->dx;
|
||||
MousePos.y += mi->dy;
|
||||
}
|
||||
|
||||
|
||||
Status = ObmReferenceObjectByHandle(WinSta->HandleTable,
|
||||
WinSta->ActiveDesktop->DesktopWindow, otWindow, (PVOID*)&DesktopWindow);
|
||||
if (NT_SUCCESS(Status))
|
||||
@@ -909,11 +909,11 @@ IntMouseInput(MOUSEINPUT *mi)
|
||||
MousePos.x = 0;
|
||||
if(MousePos.y < 0)
|
||||
MousePos.y = 0;
|
||||
|
||||
|
||||
if(CurInfo->CursorClipInfo.IsClipped)
|
||||
{
|
||||
/* The mouse cursor needs to be clipped */
|
||||
|
||||
|
||||
if(MousePos.x >= (LONG)CurInfo->CursorClipInfo.Right)
|
||||
MousePos.x = (LONG)CurInfo->CursorClipInfo.Right;
|
||||
if(MousePos.x < (LONG)CurInfo->CursorClipInfo.Left)
|
||||
@@ -923,12 +923,12 @@ IntMouseInput(MOUSEINPUT *mi)
|
||||
if(MousePos.y < (LONG)CurInfo->CursorClipInfo.Top)
|
||||
MousePos.y = (LONG)CurInfo->CursorClipInfo.Top;
|
||||
}
|
||||
|
||||
|
||||
DoMove = (MousePos.x != OrgPos.x || MousePos.y != OrgPos.y);
|
||||
}
|
||||
|
||||
ExReleaseFastMutex(&CurInfo->CursorMutex);
|
||||
|
||||
|
||||
if (DoMove)
|
||||
{
|
||||
dc = DC_LockDc(hDC);
|
||||
@@ -961,7 +961,7 @@ IntMouseInput(MOUSEINPUT *mi)
|
||||
/*
|
||||
* Insert the messages into the system queue
|
||||
*/
|
||||
|
||||
|
||||
Msg.wParam = CurInfo->ButtonsDown;
|
||||
Msg.lParam = MAKELPARAM(MousePos.x, MousePos.y);
|
||||
Msg.pt = MousePos;
|
||||
@@ -970,7 +970,7 @@ IntMouseInput(MOUSEINPUT *mi)
|
||||
Msg.message = WM_MOUSEMOVE;
|
||||
MsqInsertSystemMessage(&Msg);
|
||||
}
|
||||
|
||||
|
||||
Msg.message = 0;
|
||||
if(mi->dwFlags & MOUSEEVENTF_LEFTDOWN)
|
||||
{
|
||||
@@ -1008,14 +1008,14 @@ IntMouseInput(MOUSEINPUT *mi)
|
||||
CurInfo->ButtonsDown &= ~SwapBtn[!SwapButtons];
|
||||
MsqInsertSystemMessage(&Msg);
|
||||
}
|
||||
|
||||
|
||||
if((mi->dwFlags & (MOUSEEVENTF_XDOWN | MOUSEEVENTF_XUP)) &&
|
||||
(mi->dwFlags & MOUSEEVENTF_WHEEL))
|
||||
{
|
||||
/* fail because both types of events use the mouseData field */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(mi->dwFlags & MOUSEEVENTF_XDOWN)
|
||||
{
|
||||
Msg.message = WM_XBUTTONDOWN;
|
||||
@@ -1054,7 +1054,7 @@ IntMouseInput(MOUSEINPUT *mi)
|
||||
Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, mi->mouseData);
|
||||
MsqInsertSystemMessage(&Msg);
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1073,21 +1073,21 @@ NtUserSendInput(
|
||||
{
|
||||
PW32THREAD W32Thread;
|
||||
UINT cnt;
|
||||
|
||||
|
||||
W32Thread = PsGetWin32Thread();
|
||||
ASSERT(W32Thread);
|
||||
|
||||
|
||||
if(!W32Thread->Desktop)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
if(!nInputs || !pInput || (cbSize != sizeof(INPUT)))
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* FIXME - check access rights of the window station
|
||||
* e.g. services running in the service window station cannot block input
|
||||
@@ -1098,20 +1098,20 @@ NtUserSendInput(
|
||||
SetLastWin32Error(ERROR_ACCESS_DENIED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
cnt = 0;
|
||||
while(nInputs--)
|
||||
{
|
||||
INPUT SafeInput;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(&SafeInput, pInput++, sizeof(INPUT));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
return cnt;
|
||||
}
|
||||
|
||||
|
||||
switch(SafeInput.type)
|
||||
{
|
||||
case INPUT_MOUSE:
|
||||
@@ -1135,7 +1135,7 @@ NtUserSendInput(
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return cnt;
|
||||
}
|
||||
|
||||
|
||||
@@ -47,9 +47,9 @@
|
||||
/* lParam bits */
|
||||
#define LP_EXT_BIT (1<<24)
|
||||
/* From kbdxx.c -- Key changes with numlock */
|
||||
#define KNUMP 0x400
|
||||
#define KNUMP 0x400
|
||||
|
||||
/* Lock the keyboard state to prevent unusual concurrent access */
|
||||
/* Lock the keyboard state to prevent unusual concurrent access */
|
||||
FAST_MUTEX QueueStateLock;
|
||||
|
||||
BYTE QueueKeyStateTable[256];
|
||||
@@ -86,7 +86,7 @@ static VOID STDCALL SetKeyState(DWORD key, DWORD vk, DWORD ext, BOOL down) {
|
||||
/* Special handling for toggles like numpad and caps lock */
|
||||
if (vk == VK_CAPITAL || vk == VK_NUMLOCK) {
|
||||
if (down) QueueKeyStateTable[vk] ^= KS_LOCK_BIT;
|
||||
}
|
||||
}
|
||||
|
||||
if (ext && vk == VK_LSHIFT)
|
||||
vk = VK_RSHIFT;
|
||||
@@ -138,7 +138,7 @@ VOID DumpKeyState( PBYTE KeyState ) {
|
||||
DbgPrint( "};\n" );
|
||||
}
|
||||
|
||||
static BYTE KeysSet( PKBDTABLES pkKT, PBYTE KeyState,
|
||||
static BYTE KeysSet( PKBDTABLES pkKT, PBYTE KeyState,
|
||||
int FakeModLeft, int FakeModRight ) {
|
||||
if( !KeyState || !pkKT ) return 0;
|
||||
|
||||
@@ -158,8 +158,8 @@ static BYTE KeysSet( PKBDTABLES pkKT, PBYTE KeyState,
|
||||
static DWORD FASTCALL GetShiftBit( PKBDTABLES pkKT, DWORD Vk ) {
|
||||
int i;
|
||||
|
||||
for( i = 0; pkKT->pCharModifiers->pVkToBit[i].Vk; i++ )
|
||||
if( pkKT->pCharModifiers->pVkToBit[i].Vk == Vk )
|
||||
for( i = 0; pkKT->pCharModifiers->pVkToBit[i].Vk; i++ )
|
||||
if( pkKT->pCharModifiers->pVkToBit[i].Vk == Vk )
|
||||
return pkKT->pCharModifiers->pVkToBit[i].ModBits;
|
||||
|
||||
return 0;
|
||||
@@ -172,11 +172,11 @@ static DWORD ModBits( PKBDTABLES pkKT, PBYTE KeyState ) {
|
||||
|
||||
/* DumpKeyState( KeyState ); */
|
||||
|
||||
if (KeysSet( pkKT, KeyState, VK_LSHIFT, VK_RSHIFT ) &
|
||||
if (KeysSet( pkKT, KeyState, VK_LSHIFT, VK_RSHIFT ) &
|
||||
KS_DOWN_BIT)
|
||||
ModBits |= GetShiftBit( pkKT, VK_SHIFT );
|
||||
|
||||
if (KeysSet( pkKT, KeyState, VK_LCONTROL, VK_RCONTROL ) &
|
||||
|
||||
if (KeysSet( pkKT, KeyState, VK_LCONTROL, VK_RCONTROL ) &
|
||||
KS_DOWN_BIT )
|
||||
ModBits |= GetShiftBit( pkKT, VK_CONTROL );
|
||||
|
||||
@@ -188,15 +188,15 @@ static DWORD ModBits( PKBDTABLES pkKT, PBYTE KeyState ) {
|
||||
if (KeysSet( pkKT, KeyState, VK_RMENU, 0 ) &
|
||||
KS_DOWN_BIT )
|
||||
ModBits |= GetShiftBit( pkKT, VK_CONTROL );
|
||||
|
||||
|
||||
/* Deal with VK_CAPITAL */
|
||||
if (KeysSet( pkKT, KeyState, VK_CAPITAL, 0 ) & KS_LOCK_BIT)
|
||||
if (KeysSet( pkKT, KeyState, VK_CAPITAL, 0 ) & KS_LOCK_BIT)
|
||||
{
|
||||
ModBits |= CAPITAL_BIT;
|
||||
}
|
||||
|
||||
/* Deal with VK_NUMLOCK */
|
||||
if (KeysSet( pkKT, KeyState, VK_NUMLOCK, 0 ) & KS_LOCK_BIT)
|
||||
if (KeysSet( pkKT, KeyState, VK_NUMLOCK, 0 ) & KS_LOCK_BIT)
|
||||
{
|
||||
ModBits |= NUMLOCK_BIT;
|
||||
}
|
||||
@@ -211,7 +211,7 @@ static BOOL TryToTranslateChar(WORD wVirtKey,
|
||||
PBOOL pbDead,
|
||||
PBOOL pbLigature,
|
||||
PWCHAR pwcTranslatedChar,
|
||||
PKBDTABLES keyLayout )
|
||||
PKBDTABLES keyLayout )
|
||||
{
|
||||
PVK_TO_WCHAR_TABLE vtwTbl;
|
||||
PVK_TO_WCHARS10 vkPtr;
|
||||
@@ -222,7 +222,7 @@ static BOOL TryToTranslateChar(WORD wVirtKey,
|
||||
CapsState = ModBits & ~MOD_BITS_MASK;
|
||||
ModBits = ModBits & MOD_BITS_MASK;
|
||||
|
||||
DPRINT ( "TryToTranslate: %04x %x\n", wVirtKey, ModBits );
|
||||
DPRINT ( "TryToTranslate: %04x %x\n", wVirtKey, ModBits );
|
||||
|
||||
if (ModBits > keyLayout->pCharModifiers->wMaxModBits)
|
||||
{
|
||||
@@ -238,31 +238,31 @@ static BOOL TryToTranslateChar(WORD wVirtKey,
|
||||
if( wVirtKey == (vkPtr->VirtualKey & 0xff) )
|
||||
{
|
||||
CapsMod = keyLayout->pCharModifiers->ModNumber
|
||||
[ModBits ^
|
||||
[ModBits ^
|
||||
((CapsState & CAPITAL_BIT) ? vkPtr->Attributes : 0)];
|
||||
|
||||
|
||||
if( CapsMod > keyLayout->pVkToWcharTable[nMod].nModifications ) {
|
||||
DWORD MaxBit = 1;
|
||||
while( MaxBit <
|
||||
while( MaxBit <
|
||||
keyLayout->pVkToWcharTable[nMod].nModifications )
|
||||
MaxBit <<= 1;
|
||||
|
||||
CapsMod &= MaxBit - 1; /* Guarantee that CapsMod lies
|
||||
in bounds. */
|
||||
}
|
||||
|
||||
|
||||
*pbDead = vkPtr->wch[CapsMod] == WCH_DEAD;
|
||||
*pbLigature = vkPtr->wch[CapsMod] == WCH_LGTR;
|
||||
*pwcTranslatedChar = vkPtr->wch[CapsMod];
|
||||
|
||||
|
||||
DPRINT("%d %04x: CapsMod %08x CapsState %08x Char %04x\n",
|
||||
nMod, wVirtKey,
|
||||
CapsMod, CapsState, *pwcTranslatedChar);
|
||||
|
||||
if( *pbDead )
|
||||
if( *pbDead )
|
||||
{
|
||||
vkPtr = (PVK_TO_WCHARS10)(((BYTE *)vkPtr) + size_this_entry);
|
||||
if( vkPtr->VirtualKey != 0xff )
|
||||
if( vkPtr->VirtualKey != 0xff )
|
||||
{
|
||||
DPRINT( "Found dead key with no trailer in the table.\n" );
|
||||
DPRINT( "VK: %04x, ADDR: %08x\n", wVirtKey, (int)vkPtr );
|
||||
@@ -298,10 +298,10 @@ ToUnicodeInner(UINT wVirtKey,
|
||||
ModBits( pkKT, lpKeyState ),
|
||||
&bDead,
|
||||
&bLigature,
|
||||
&wcTranslatedChar,
|
||||
pkKT ) )
|
||||
&wcTranslatedChar,
|
||||
pkKT ) )
|
||||
{
|
||||
if( bLigature )
|
||||
if( bLigature )
|
||||
{
|
||||
DPRINT("Not handling ligature (yet)\n" );
|
||||
return 0;
|
||||
@@ -353,7 +353,7 @@ int STDCALL ToUnicodeEx( UINT wVirtKey,
|
||||
pwszBuff,
|
||||
cchBuff,
|
||||
wFlags,
|
||||
PsGetWin32Thread() ?
|
||||
PsGetWin32Thread() ?
|
||||
PsGetWin32Thread()->KeyboardLayout : 0 );
|
||||
IntUnLockQueueState;
|
||||
}
|
||||
@@ -376,7 +376,7 @@ int STDCALL ToUnicode( UINT wVirtKey,
|
||||
0 );
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* Utility to copy and append two unicode strings.
|
||||
*
|
||||
* IN OUT PUNICODE_STRING ResultFirst -> First string and result
|
||||
@@ -391,14 +391,14 @@ NTSTATUS NTAPI AppendUnicodeString(PUNICODE_STRING ResultFirst,
|
||||
PUNICODE_STRING Second,
|
||||
BOOL Deallocate) {
|
||||
NTSTATUS Status;
|
||||
PWSTR new_string =
|
||||
PWSTR new_string =
|
||||
ExAllocatePoolWithTag(PagedPool,
|
||||
(ResultFirst->Length + Second->Length + sizeof(WCHAR)),
|
||||
TAG_STRING);
|
||||
if( !new_string ) {
|
||||
return STATUS_NO_MEMORY;
|
||||
}
|
||||
memcpy( new_string, ResultFirst->Buffer,
|
||||
memcpy( new_string, ResultFirst->Buffer,
|
||||
ResultFirst->Length );
|
||||
memcpy( new_string + ResultFirst->Length / sizeof(WCHAR),
|
||||
Second->Buffer,
|
||||
@@ -407,7 +407,7 @@ NTSTATUS NTAPI AppendUnicodeString(PUNICODE_STRING ResultFirst,
|
||||
ResultFirst->Length += Second->Length;
|
||||
ResultFirst->MaximumLength = ResultFirst->Length;
|
||||
new_string[ResultFirst->Length / sizeof(WCHAR)] = 0;
|
||||
Status = RtlCreateUnicodeString(ResultFirst,new_string) ?
|
||||
Status = RtlCreateUnicodeString(ResultFirst,new_string) ?
|
||||
STATUS_SUCCESS : STATUS_NO_MEMORY;
|
||||
ExFreePool(new_string);
|
||||
return Status;
|
||||
@@ -433,55 +433,55 @@ static NTSTATUS NTAPI ReadRegistryValue( PUNICODE_STRING KeyName,
|
||||
ULONG Length = 0;
|
||||
ULONG ResLength = 0;
|
||||
UNICODE_STRING Temp;
|
||||
|
||||
|
||||
InitializeObjectAttributes(&KeyAttributes, KeyName, OBJ_CASE_INSENSITIVE,
|
||||
NULL, NULL);
|
||||
Status = ZwOpenKey(&KeyHandle, KEY_ALL_ACCESS, &KeyAttributes);
|
||||
if( !NT_SUCCESS(Status) ) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
Status = ZwQueryValueKey(KeyHandle, ValueName, KeyValuePartialInformation,
|
||||
0,
|
||||
0,
|
||||
&ResLength);
|
||||
|
||||
|
||||
if( Status != STATUS_BUFFER_TOO_SMALL ) {
|
||||
NtClose(KeyHandle);
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
ResLength += sizeof( *KeyValuePartialInfo );
|
||||
KeyValuePartialInfo =
|
||||
KeyValuePartialInfo =
|
||||
ExAllocatePoolWithTag(PagedPool, ResLength, TAG_STRING);
|
||||
Length = ResLength;
|
||||
|
||||
|
||||
if( !KeyValuePartialInfo ) {
|
||||
NtClose(KeyHandle);
|
||||
return STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
|
||||
Status = ZwQueryValueKey(KeyHandle, ValueName, KeyValuePartialInformation,
|
||||
(PVOID)KeyValuePartialInfo,
|
||||
Length,
|
||||
&ResLength);
|
||||
|
||||
|
||||
if( !NT_SUCCESS(Status) ) {
|
||||
NtClose(KeyHandle);
|
||||
ExFreePool(KeyValuePartialInfo);
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
Temp.Length = Temp.MaximumLength = KeyValuePartialInfo->DataLength;
|
||||
Temp.Buffer = (PWCHAR)KeyValuePartialInfo->Data;
|
||||
|
||||
|
||||
/* At this point, KeyValuePartialInfo->Data contains the key data */
|
||||
RtlInitUnicodeString(ReturnedValue,L"");
|
||||
AppendUnicodeString(ReturnedValue,&Temp,FALSE);
|
||||
|
||||
|
||||
ExFreePool(KeyValuePartialInfo);
|
||||
NtClose(KeyHandle);
|
||||
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
@@ -537,7 +537,7 @@ void InitKbdLayout( PVOID *pkKeyboardLayout )
|
||||
Status);
|
||||
} else {
|
||||
DPRINT("Read registry and got %wZ\n", &LayoutFile);
|
||||
|
||||
|
||||
RtlFreeUnicodeString(&LayoutKeyName);
|
||||
|
||||
AppendUnicodeString(&FullLayoutPath,&LayoutFile,FALSE);
|
||||
@@ -546,9 +546,9 @@ void InitKbdLayout( PVOID *pkKeyboardLayout )
|
||||
|
||||
RtlFreeUnicodeString(&LayoutFile);
|
||||
|
||||
KeyboardLayoutWSTR =
|
||||
KeyboardLayoutWSTR =
|
||||
ExAllocatePoolWithTag(PagedPool,
|
||||
FullLayoutPath.Length + sizeof(WCHAR),
|
||||
FullLayoutPath.Length + sizeof(WCHAR),
|
||||
TAG_STRING);
|
||||
|
||||
if( !KeyboardLayoutWSTR ) {
|
||||
@@ -565,7 +565,7 @@ void InitKbdLayout( PVOID *pkKeyboardLayout )
|
||||
|
||||
if( !kbModule )
|
||||
DPRINT1( "Load Keyboard Layout: No %wZ\n", &FullLayoutPath );
|
||||
|
||||
|
||||
RtlFreeUnicodeString(&FullLayoutPath);
|
||||
}
|
||||
}
|
||||
@@ -574,7 +574,7 @@ void InitKbdLayout( PVOID *pkKeyboardLayout )
|
||||
{
|
||||
DPRINT1("Trying to load US Keyboard Layout\n");
|
||||
kbModule = EngLoadImage(L"\\SystemRoot\\system32\\kbdus.dll");
|
||||
|
||||
|
||||
if (!kbModule)
|
||||
{
|
||||
DPRINT1("Failed to load any Keyboard Layout\n");
|
||||
@@ -588,7 +588,7 @@ void InitKbdLayout( PVOID *pkKeyboardLayout )
|
||||
&kbdProcedureName,
|
||||
0,
|
||||
(PVOID*)&layerDescGetFn);
|
||||
|
||||
|
||||
if( layerDescGetFn ) {
|
||||
*pkKeyboardLayout = layerDescGetFn();
|
||||
}
|
||||
@@ -636,7 +636,7 @@ IntTranslateKbdMessage(LPMSG lpMsg,
|
||||
&NewMsg.pt);
|
||||
|
||||
UState = ToUnicodeInner(lpMsg->wParam, HIWORD(lpMsg->lParam) & 0xff,
|
||||
QueueKeyStateTable, wp, 2, 0,
|
||||
QueueKeyStateTable, wp, 2, 0,
|
||||
keyLayout );
|
||||
|
||||
if (UState == 1)
|
||||
@@ -652,7 +652,7 @@ IntTranslateKbdMessage(LPMSG lpMsg,
|
||||
{
|
||||
first = keyLayout->pDeadKey[i].dwBoth >> 16;
|
||||
second = keyLayout->pDeadKey[i].dwBoth;
|
||||
if (first == dead_char && second == wp[0])
|
||||
if (first == dead_char && second == wp[0])
|
||||
{
|
||||
wp[0] = keyLayout->pDeadKey[i].wchComposed;
|
||||
dead_char = 0;
|
||||
@@ -662,8 +662,8 @@ IntTranslateKbdMessage(LPMSG lpMsg,
|
||||
|
||||
DPRINT("FINAL CHAR: %c\n", wp[0]);
|
||||
}
|
||||
|
||||
if (dead_char)
|
||||
|
||||
if (dead_char)
|
||||
{
|
||||
NewMsg.hwnd = lpMsg->hwnd;
|
||||
NewMsg.wParam = dead_char;
|
||||
@@ -671,7 +671,7 @@ IntTranslateKbdMessage(LPMSG lpMsg,
|
||||
dead_char = 0;
|
||||
MsqPostMessage(PsGetWin32Thread()->MessageQueue, &NewMsg, FALSE, QS_KEY);
|
||||
}
|
||||
|
||||
|
||||
NewMsg.hwnd = lpMsg->hwnd;
|
||||
NewMsg.wParam = wp[0];
|
||||
NewMsg.lParam = lpMsg->lParam;
|
||||
@@ -681,7 +681,7 @@ IntTranslateKbdMessage(LPMSG lpMsg,
|
||||
}
|
||||
else if (UState == -1)
|
||||
{
|
||||
NewMsg.message =
|
||||
NewMsg.message =
|
||||
(lpMsg->message == WM_KEYDOWN) ? WM_DEADCHAR : WM_SYSDEADCHAR;
|
||||
NewMsg.hwnd = lpMsg->hwnd;
|
||||
NewMsg.wParam = wp[0];
|
||||
@@ -724,7 +724,7 @@ NtUserSetKeyboardState(
|
||||
Result = FALSE;
|
||||
}
|
||||
IntUnLockQueueState;
|
||||
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
@@ -748,11 +748,11 @@ UINT ScanToVk( UINT Code, BOOL ExtKey, PKBDTABLES pkKT ) {
|
||||
int i;
|
||||
|
||||
for( i = 0; pkKT->pVSCtoVK_E0[i].Vsc; i++ ) {
|
||||
if( pkKT->pVSCtoVK_E0[i].Vsc == Code )
|
||||
if( pkKT->pVSCtoVK_E0[i].Vsc == Code )
|
||||
return pkKT->pVSCtoVK_E0[i].Vk & 0xff;
|
||||
}
|
||||
for( i = 0; pkKT->pVSCtoVK_E1[i].Vsc; i++ ) {
|
||||
if( pkKT->pVSCtoVK_E1[i].Vsc == Code )
|
||||
if( pkKT->pVSCtoVK_E1[i].Vsc == Code )
|
||||
return pkKT->pVSCtoVK_E1[i].Vk & 0xff;
|
||||
}
|
||||
|
||||
@@ -794,7 +794,7 @@ static UINT IntMapVirtualKeyEx( UINT Code, UINT Type, PKBDTABLES keyLayout ) {
|
||||
break;
|
||||
|
||||
case 1:
|
||||
ret =
|
||||
ret =
|
||||
DontDistinguishShifts
|
||||
(IntMapVirtualKeyEx( Code, 3, keyLayout ) );
|
||||
break;
|
||||
@@ -808,7 +808,7 @@ static UINT IntMapVirtualKeyEx( UINT Code, UINT Type, PKBDTABLES keyLayout ) {
|
||||
} break;
|
||||
|
||||
case 3:
|
||||
|
||||
|
||||
ret = ScanToVk( Code, FALSE, keyLayout );
|
||||
break;
|
||||
}
|
||||
@@ -819,7 +819,7 @@ static UINT IntMapVirtualKeyEx( UINT Code, UINT Type, PKBDTABLES keyLayout ) {
|
||||
UINT
|
||||
STDCALL
|
||||
NtUserMapVirtualKeyEx( UINT Code, UINT Type, DWORD keyboardId, HKL dwhkl ) {
|
||||
PKBDTABLES keyLayout = PsGetWin32Thread() ?
|
||||
PKBDTABLES keyLayout = PsGetWin32Thread() ?
|
||||
PsGetWin32Thread()->KeyboardLayout : 0;
|
||||
|
||||
if( !keyLayout ) return 0;
|
||||
@@ -841,7 +841,7 @@ NtUserToUnicodeEx(
|
||||
BYTE KeyStateBuf[0x100];
|
||||
PWCHAR OutPwszBuff = 0;
|
||||
int ret = 0;
|
||||
|
||||
|
||||
|
||||
if( !NT_SUCCESS(MmCopyFromCaller(KeyStateBuf,
|
||||
lpKeyState,
|
||||
@@ -862,7 +862,7 @@ NtUserToUnicodeEx(
|
||||
OutPwszBuff,
|
||||
cchBuff,
|
||||
wFlags,
|
||||
dwhkl );
|
||||
dwhkl );
|
||||
|
||||
MmCopyToCaller(pwszBuff,OutPwszBuff,sizeof(WCHAR)*cchBuff);
|
||||
ExFreePool(OutPwszBuff);
|
||||
@@ -884,8 +884,8 @@ NtUserGetKeyNameText( LONG lParam, LPWSTR lpString, int nSize ) {
|
||||
UINT VkCode = 0;
|
||||
UINT ScanCode = (lParam >> 16) & 0xff;
|
||||
BOOL ExtKey = lParam & (1<<24) ? TRUE : FALSE;
|
||||
PKBDTABLES keyLayout =
|
||||
PsGetWin32Thread() ?
|
||||
PKBDTABLES keyLayout =
|
||||
PsGetWin32Thread() ?
|
||||
PsGetWin32Thread()->KeyboardLayout : 0;
|
||||
|
||||
if( !keyLayout || nSize < 1 ) return 0;
|
||||
@@ -904,12 +904,12 @@ NtUserGetKeyNameText( LONG lParam, LPWSTR lpString, int nSize ) {
|
||||
|
||||
VSC_LPWSTR *KeyNames = 0;
|
||||
|
||||
if( CareVk != VkCode )
|
||||
if( CareVk != VkCode )
|
||||
ScanCode = VkToScan( VkCode, ExtKey, keyLayout );
|
||||
|
||||
if( ExtKey )
|
||||
|
||||
if( ExtKey )
|
||||
KeyNames = keyLayout->pKeyNamesExt;
|
||||
else
|
||||
else
|
||||
KeyNames = keyLayout->pKeyNames;
|
||||
|
||||
for( i = 0; KeyNames[i].pwsz; i++ ) {
|
||||
@@ -917,8 +917,8 @@ NtUserGetKeyNameText( LONG lParam, LPWSTR lpString, int nSize ) {
|
||||
UINT StrLen = wcslen(KeyNames[i].pwsz);
|
||||
UINT StrMax = StrLen > (nSize - 1) ? (nSize - 1) : StrLen;
|
||||
WCHAR null_wc = 0;
|
||||
if( NT_SUCCESS( MmCopyToCaller( lpString,
|
||||
KeyNames[i].pwsz,
|
||||
if( NT_SUCCESS( MmCopyToCaller( lpString,
|
||||
KeyNames[i].pwsz,
|
||||
StrMax * sizeof(WCHAR) ) ) &&
|
||||
NT_SUCCESS( MmCopyToCaller( lpString + StrMax,
|
||||
&null_wc,
|
||||
@@ -953,7 +953,7 @@ VOID FASTCALL W32kKeyProcessMessage(LPMSG Msg, PKBDTABLES KeyboardLayout) {
|
||||
DWORD i = 0;
|
||||
DWORD BaseMapping = 0;
|
||||
DWORD RawVk = 0;
|
||||
static WORD NumpadConversion[][2] =
|
||||
static WORD NumpadConversion[][2] =
|
||||
{ { VK_DELETE, VK_DECIMAL },
|
||||
{ VK_INSERT, VK_NUMPAD0 },
|
||||
{ VK_END, VK_NUMPAD1 },
|
||||
@@ -967,16 +967,16 @@ VOID FASTCALL W32kKeyProcessMessage(LPMSG Msg, PKBDTABLES KeyboardLayout) {
|
||||
{ VK_PRIOR, VK_NUMPAD9 },
|
||||
{ 0,0 } };
|
||||
|
||||
if( !KeyboardLayout || !Msg ||
|
||||
if( !KeyboardLayout || !Msg ||
|
||||
(Msg->message != WM_KEYDOWN && Msg->message != WM_SYSKEYDOWN &&
|
||||
Msg->message != WM_KEYUP && Msg->message != WM_SYSKEYUP) )
|
||||
Msg->message != WM_KEYUP && Msg->message != WM_SYSKEYUP) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
IntLockQueueState;
|
||||
|
||||
/* arty -- handle numpad -- On real windows, the actual key produced
|
||||
/* arty -- handle numpad -- On real windows, the actual key produced
|
||||
* by the messaging layer is different based on the state of numlock. */
|
||||
ModifierBits = ModBits(KeyboardLayout,QueueKeyStateTable);
|
||||
|
||||
@@ -985,20 +985,20 @@ VOID FASTCALL W32kKeyProcessMessage(LPMSG Msg, PKBDTABLES KeyboardLayout) {
|
||||
*
|
||||
* Shift and the LP_EXT_BIT cancel. */
|
||||
ScanCode = (Msg->lParam >> 16) & 0xff;
|
||||
BaseMapping = Msg->wParam =
|
||||
BaseMapping = Msg->wParam =
|
||||
IntMapVirtualKeyEx( ScanCode, 1, KeyboardLayout );
|
||||
if( ScanCode >= KeyboardLayout->bMaxVSCtoVK )
|
||||
RawVk = 0;
|
||||
else
|
||||
RawVk = KeyboardLayout->pusVSCtoVK[ScanCode];
|
||||
|
||||
if ((ModifierBits & NUMLOCK_BIT) &&
|
||||
!(ModifierBits & GetShiftBit(KeyboardLayout, VK_SHIFT)) &&
|
||||
if ((ModifierBits & NUMLOCK_BIT) &&
|
||||
!(ModifierBits & GetShiftBit(KeyboardLayout, VK_SHIFT)) &&
|
||||
(RawVk & KNUMP) &&
|
||||
!(Msg->lParam & LP_EXT_BIT))
|
||||
{
|
||||
/* The key in question is a numpad key. Search for a translation. */
|
||||
for (i = 0; NumpadConversion[i][0]; i++)
|
||||
for (i = 0; NumpadConversion[i][0]; i++)
|
||||
{
|
||||
if ((BaseMapping & 0xff) == NumpadConversion[i][0]) /* RawVk? */
|
||||
{
|
||||
|
||||
@@ -136,12 +136,12 @@ IntGetMenuObject(HMENU hMenu)
|
||||
{
|
||||
PMENU_OBJECT MenuObject;
|
||||
PW32THREAD W32Thread = PsGetWin32Thread();
|
||||
|
||||
|
||||
if(!W32Thread)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
NTSTATUS Status = ObmReferenceObjectByHandle(W32Thread->Desktop->WindowStation->HandleTable,
|
||||
hMenu, otMenu, (PVOID*)&MenuObject);
|
||||
if (!NT_SUCCESS(Status))
|
||||
@@ -171,19 +171,19 @@ IntFreeMenuItem(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem,
|
||||
IntReleaseMenuObject(SubMenuObject);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Free memory */
|
||||
ExFreePool(MenuItem);
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL FASTCALL
|
||||
IntRemoveMenuItem(PMENU_OBJECT MenuObject, UINT uPosition, UINT uFlags,
|
||||
IntRemoveMenuItem(PMENU_OBJECT MenuObject, UINT uPosition, UINT uFlags,
|
||||
BOOL bRecurse)
|
||||
{
|
||||
PMENU_ITEM PrevMenuItem, MenuItem;
|
||||
if(IntGetMenuItemByFlag(MenuObject, uPosition, uFlags, &MenuItem,
|
||||
if(IntGetMenuItemByFlag(MenuObject, uPosition, uFlags, &MenuItem,
|
||||
&PrevMenuItem) > -1)
|
||||
{
|
||||
if(MenuItem)
|
||||
@@ -219,26 +219,26 @@ IntDeleteMenuItems(PMENU_OBJECT MenuObject, BOOL bRecurse)
|
||||
}
|
||||
|
||||
BOOL FASTCALL
|
||||
IntDestroyMenuObject(PMENU_OBJECT MenuObject,
|
||||
IntDestroyMenuObject(PMENU_OBJECT MenuObject,
|
||||
BOOL bRecurse, BOOL RemoveFromProcess)
|
||||
{
|
||||
if(MenuObject)
|
||||
{
|
||||
PWINSTATION_OBJECT WindowStation;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
/* remove all menu items */
|
||||
IntLockMenuItems(MenuObject);
|
||||
IntDeleteMenuItems(MenuObject, bRecurse); /* do not destroy submenus */
|
||||
IntUnLockMenuItems(MenuObject);
|
||||
|
||||
|
||||
if(RemoveFromProcess)
|
||||
{
|
||||
IntLockProcessMenus((PW32PROCESS)MenuObject->Process->Win32Process);
|
||||
RemoveEntryList(&MenuObject->ListEntry);
|
||||
IntUnLockProcessMenus((PW32PROCESS)MenuObject->Process->Win32Process);
|
||||
}
|
||||
|
||||
|
||||
Status = ObReferenceObjectByHandle(MenuObject->Process->Win32WindowStation,
|
||||
0,
|
||||
ExWindowStationObjectType,
|
||||
@@ -270,7 +270,7 @@ IntCreateMenu(PHANDLE Handle, BOOL IsMenuBar)
|
||||
*Handle = 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
MenuObject->Process = PsGetCurrentProcess();
|
||||
MenuObject->RtoL = FALSE; /* default */
|
||||
MenuObject->MenuInfo.cbSize = sizeof(MENUINFO); /* not used */
|
||||
@@ -279,7 +279,7 @@ IntCreateMenu(PHANDLE Handle, BOOL IsMenuBar)
|
||||
MenuObject->MenuInfo.cyMax = 0; /* default */
|
||||
MenuObject->MenuInfo.hbrBack =
|
||||
NtGdiCreateSolidBrush(RGB(192, 192, 192)); /* FIXME: default background color */
|
||||
MenuObject->MenuInfo.dwContextHelpID = 0; /* default */
|
||||
MenuObject->MenuInfo.dwContextHelpID = 0; /* default */
|
||||
MenuObject->MenuInfo.dwMenuData = 0; /* default */
|
||||
MenuObject->MenuInfo.Self = *Handle;
|
||||
MenuObject->MenuInfo.FocusedItem = NO_SELECTED_ITEM;
|
||||
@@ -289,7 +289,7 @@ IntCreateMenu(PHANDLE Handle, BOOL IsMenuBar)
|
||||
MenuObject->MenuInfo.Height = 0;
|
||||
MenuObject->MenuInfo.Width = 0;
|
||||
MenuObject->MenuInfo.TimeToHide = FALSE;
|
||||
|
||||
|
||||
MenuObject->MenuInfo.MenuItemCount = 0;
|
||||
MenuObject->MenuItemList = NULL;
|
||||
ExInitializeFastMutex(&MenuObject->MenuItemsLock);
|
||||
@@ -374,16 +374,16 @@ IntCloneMenu(PMENU_OBJECT Source)
|
||||
{
|
||||
HANDLE Handle;
|
||||
PMENU_OBJECT MenuObject;
|
||||
|
||||
|
||||
if(!Source)
|
||||
return NULL;
|
||||
|
||||
|
||||
MenuObject = (PMENU_OBJECT)ObmCreateObject(
|
||||
PsGetWin32Thread()->Desktop->WindowStation->HandleTable, &Handle,
|
||||
otMenu, sizeof(MENU_OBJECT));
|
||||
otMenu, sizeof(MENU_OBJECT));
|
||||
if(!MenuObject)
|
||||
return NULL;
|
||||
|
||||
|
||||
MenuObject->Process = PsGetCurrentProcess();
|
||||
MenuObject->RtoL = Source->RtoL;
|
||||
MenuObject->MenuInfo.cbSize = sizeof(MENUINFO); /* not used */
|
||||
@@ -391,7 +391,7 @@ IntCloneMenu(PMENU_OBJECT Source)
|
||||
MenuObject->MenuInfo.dwStyle = Source->MenuInfo.dwStyle;
|
||||
MenuObject->MenuInfo.cyMax = Source->MenuInfo.cyMax;
|
||||
MenuObject->MenuInfo.hbrBack = Source->MenuInfo.hbrBack;
|
||||
MenuObject->MenuInfo.dwContextHelpID = Source->MenuInfo.dwContextHelpID;
|
||||
MenuObject->MenuInfo.dwContextHelpID = Source->MenuInfo.dwContextHelpID;
|
||||
MenuObject->MenuInfo.dwMenuData = Source->MenuInfo.dwMenuData;
|
||||
MenuObject->MenuInfo.Self = Handle;
|
||||
MenuObject->MenuInfo.FocusedItem = NO_SELECTED_ITEM;
|
||||
@@ -400,11 +400,11 @@ IntCloneMenu(PMENU_OBJECT Source)
|
||||
MenuObject->MenuInfo.Height = 0;
|
||||
MenuObject->MenuInfo.Width = 0;
|
||||
MenuObject->MenuInfo.TimeToHide = FALSE;
|
||||
|
||||
|
||||
MenuObject->MenuInfo.MenuItemCount = 0;
|
||||
MenuObject->MenuItemList = NULL;
|
||||
MenuObject->MenuItemList = NULL;
|
||||
ExInitializeFastMutex(&MenuObject->MenuItemsLock);
|
||||
|
||||
|
||||
/* Insert menu item into process menu handle list */
|
||||
IntLockProcessMenus(PsGetWin32Process());
|
||||
InsertTailList(&PsGetWin32Process()->MenuListHead, &MenuObject->ListEntry);
|
||||
@@ -457,7 +457,7 @@ BOOL FASTCALL
|
||||
IntIsMenu(HMENU hMenu)
|
||||
{
|
||||
PMENU_OBJECT Menu;
|
||||
|
||||
|
||||
if((Menu = IntGetMenuObject(hMenu)))
|
||||
{
|
||||
IntReleaseMenuObject(Menu);
|
||||
@@ -499,7 +499,7 @@ IntSetMenuInfo(PMENU_OBJECT MenuObject, PROSMENUINFO lpmi)
|
||||
|
||||
|
||||
int FASTCALL
|
||||
IntGetMenuItemByFlag(PMENU_OBJECT MenuObject, UINT uSearchBy, UINT fFlag,
|
||||
IntGetMenuItemByFlag(PMENU_OBJECT MenuObject, UINT uSearchBy, UINT fFlag,
|
||||
PMENU_ITEM *MenuItem, PMENU_ITEM *PrevMenuItem)
|
||||
{
|
||||
PMENU_ITEM PrevItem = NULL;
|
||||
@@ -552,7 +552,7 @@ IntGetMenuItemByFlag(PMENU_OBJECT MenuObject, UINT uSearchBy, UINT fFlag,
|
||||
{
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
}
|
||||
@@ -686,7 +686,7 @@ IntGetMenuItemInfo(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem, PROSMENUITEMINF
|
||||
lpmii->Rect = MenuItem->Rect;
|
||||
lpmii->XTab = MenuItem->XTab;
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -694,14 +694,14 @@ BOOL FASTCALL
|
||||
IntSetMenuItemInfo(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem, PROSMENUITEMINFO lpmii)
|
||||
{
|
||||
PMENU_OBJECT SubMenuObject;
|
||||
|
||||
|
||||
if(!MenuItem || !MenuObject || !lpmii)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
MenuItem->fType = lpmii->fType;
|
||||
|
||||
|
||||
if(lpmii->fMask & MIIM_BITMAP)
|
||||
{
|
||||
MenuItem->hbmpItem = lpmii->hbmpItem;
|
||||
@@ -721,7 +721,7 @@ IntSetMenuItemInfo(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem, PROSMENUITEMINF
|
||||
* Delete the menu item type when changing type from
|
||||
* MF_STRING.
|
||||
*/
|
||||
if (MenuItem->fType != lpmii->fType &&
|
||||
if (MenuItem->fType != lpmii->fType &&
|
||||
MENU_ITEM_TYPE(MenuItem->fType) == MF_STRING)
|
||||
{
|
||||
FreeMenuText(MenuItem);
|
||||
@@ -742,7 +742,7 @@ IntSetMenuItemInfo(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem, PROSMENUITEMINF
|
||||
/* update the menu item state flags */
|
||||
UpdateMenuItemState(MenuItem->fState, lpmii->fState);
|
||||
}
|
||||
|
||||
|
||||
if(lpmii->fMask & MIIM_SUBMENU)
|
||||
{
|
||||
MenuItem->hSubMenu = lpmii->hSubMenu;
|
||||
@@ -766,7 +766,7 @@ IntSetMenuItemInfo(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem, PROSMENUITEMINF
|
||||
MenuItem->fType &= ~MF_POPUP;
|
||||
}
|
||||
}
|
||||
if ((lpmii->fMask & (MIIM_TYPE | MIIM_STRING)) &&
|
||||
if ((lpmii->fMask & (MIIM_TYPE | MIIM_STRING)) &&
|
||||
(MENU_ITEM_TYPE(lpmii->fType) == MF_STRING))
|
||||
{
|
||||
FreeMenuText(MenuItem);
|
||||
@@ -775,7 +775,7 @@ IntSetMenuItemInfo(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem, PROSMENUITEMINF
|
||||
{
|
||||
UNICODE_STRING Source;
|
||||
|
||||
Source.Length =
|
||||
Source.Length =
|
||||
Source.MaximumLength = lpmii->cch * sizeof(WCHAR);
|
||||
Source.Buffer = lpmii->dwTypeData;
|
||||
|
||||
@@ -805,7 +805,7 @@ IntSetMenuItemInfo(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem, PROSMENUITEMINF
|
||||
MenuItem->Rect = lpmii->Rect;
|
||||
MenuItem->XTab = lpmii->XTab;
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -815,13 +815,13 @@ IntInsertMenuItem(PMENU_OBJECT MenuObject, UINT uItem, BOOL fByPosition,
|
||||
{
|
||||
int pos = (int)uItem;
|
||||
PMENU_ITEM MenuItem;
|
||||
|
||||
|
||||
if (MAX_MENU_ITEMS <= MenuObject->MenuInfo.MenuItemCount)
|
||||
{
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (fByPosition)
|
||||
{
|
||||
/* calculate position */
|
||||
@@ -838,14 +838,14 @@ IntInsertMenuItem(PMENU_OBJECT MenuObject, UINT uItem, BOOL fByPosition,
|
||||
{
|
||||
pos = -1;
|
||||
}
|
||||
|
||||
|
||||
MenuItem = ExAllocatePoolWithTag(PagedPool, sizeof(MENU_ITEM), TAG_MENUITEM);
|
||||
if (NULL == MenuItem)
|
||||
{
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
MenuItem->fType = MFT_STRING;
|
||||
MenuItem->fState = MFS_ENABLED | MFS_UNCHECKED;
|
||||
MenuItem->wID = 0;
|
||||
@@ -854,14 +854,14 @@ IntInsertMenuItem(PMENU_OBJECT MenuObject, UINT uItem, BOOL fByPosition,
|
||||
MenuItem->hbmpUnchecked = (HBITMAP)0;
|
||||
MenuItem->dwItemData = 0;
|
||||
RtlInitUnicodeString(&MenuItem->Text, NULL);
|
||||
MenuItem->hbmpItem = (HBITMAP)0;
|
||||
MenuItem->hbmpItem = (HBITMAP)0;
|
||||
|
||||
if (! IntSetMenuItemInfo(MenuObject, MenuItem, ItemInfo))
|
||||
{
|
||||
ExFreePool(MenuItem);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/* Force size recalculation! */
|
||||
MenuObject->MenuInfo.Height = 0;
|
||||
|
||||
@@ -879,9 +879,9 @@ IntEnableMenuItem(PMENU_OBJECT MenuObject, UINT uIDEnableItem, UINT uEnable)
|
||||
{
|
||||
return (UINT)-1;
|
||||
}
|
||||
|
||||
|
||||
res = MenuItem->fState & (MF_GRAYED | MF_DISABLED);
|
||||
|
||||
|
||||
if(uEnable & MF_DISABLED)
|
||||
{
|
||||
if(!(MenuItem->fState & MF_DISABLED))
|
||||
@@ -909,7 +909,7 @@ IntEnableMenuItem(PMENU_OBJECT MenuObject, UINT uIDEnableItem, UINT uEnable)
|
||||
MenuItem->fState ^= MF_GRAYED;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -969,7 +969,7 @@ IntBuildMenuItemList(PMENU_OBJECT MenuObject, PVOID Buffer, ULONG nMax)
|
||||
return 0;
|
||||
}
|
||||
Buf += sizeof(ROSMENUITEMINFO);
|
||||
|
||||
|
||||
if (0 != CurItem->Text.Length
|
||||
&& (nMax >= CurItem->Text.Length + sizeof(WCHAR)))
|
||||
{
|
||||
@@ -1049,7 +1049,7 @@ IntHiliteMenuItem(PWINDOW_OBJECT WindowObject, PMENU_OBJECT MenuObject,
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(uHilite & MF_HILITE)
|
||||
{
|
||||
if(!(MenuItem->fState & MF_HILITE))
|
||||
@@ -1060,9 +1060,9 @@ IntHiliteMenuItem(PWINDOW_OBJECT WindowObject, PMENU_OBJECT MenuObject,
|
||||
if(MenuItem->fState & MF_HILITE)
|
||||
MenuItem->fState ^= MF_HILITE;
|
||||
}
|
||||
|
||||
|
||||
/* FIXME - update the window's menu */
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1071,7 +1071,7 @@ IntSetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT uItem, UINT fByPos)
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
PMENU_ITEM MenuItem = MenuObject->MenuItemList;
|
||||
|
||||
|
||||
if(uItem == (UINT)-1)
|
||||
{
|
||||
while(MenuItem)
|
||||
@@ -1082,7 +1082,7 @@ IntSetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT uItem, UINT fByPos)
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
if(fByPos)
|
||||
{
|
||||
UINT pos = 0;
|
||||
@@ -1134,7 +1134,7 @@ IntGetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT fByPos, UINT gmdiFlags,
|
||||
UINT sres;
|
||||
PMENU_OBJECT SubMenuObject;
|
||||
PMENU_ITEM MenuItem = MenuObject->MenuItemList;
|
||||
|
||||
|
||||
while(MenuItem)
|
||||
{
|
||||
if(MenuItem->fState & MFS_DEFAULT)
|
||||
@@ -1142,42 +1142,42 @@ IntGetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT fByPos, UINT gmdiFlags,
|
||||
|
||||
if(!(gmdiFlags & GMDI_USEDISABLED) && (MenuItem->fState & MFS_DISABLED))
|
||||
break;
|
||||
|
||||
|
||||
if(fByPos & MF_BYPOSITION)
|
||||
res = x;
|
||||
else
|
||||
res = MenuItem->wID;
|
||||
|
||||
if((*gismc < MAX_GOINTOSUBMENU) && (gmdiFlags & GMDI_GOINTOPOPUPS) &&
|
||||
|
||||
if((*gismc < MAX_GOINTOSUBMENU) && (gmdiFlags & GMDI_GOINTOPOPUPS) &&
|
||||
MenuItem->hSubMenu)
|
||||
{
|
||||
|
||||
|
||||
SubMenuObject = IntGetMenuObject(MenuItem->hSubMenu);
|
||||
if(!SubMenuObject || (SubMenuObject == MenuObject))
|
||||
break;
|
||||
|
||||
|
||||
IntLockMenuItems(SubMenuObject);
|
||||
IntUnLockMenuItems(MenuObject);
|
||||
|
||||
|
||||
(*gismc)++;
|
||||
sres = IntGetMenuDefaultItem(SubMenuObject, fByPos, gmdiFlags, gismc);
|
||||
(*gismc)--;
|
||||
|
||||
|
||||
IntUnLockMenuItems(SubMenuObject);
|
||||
IntLockMenuItems(MenuObject);
|
||||
IntReleaseMenuObject(SubMenuObject);
|
||||
|
||||
|
||||
if(sres > (UINT)-1)
|
||||
res = sres;
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
MenuItem = MenuItem->Next;
|
||||
x++;
|
||||
}
|
||||
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -1186,12 +1186,12 @@ IntInitTracking(PWINDOW_OBJECT WindowObject, PMENU_OBJECT MenuObject, BOOL Popup
|
||||
UINT Flags)
|
||||
{
|
||||
/* FIXME - hide caret */
|
||||
|
||||
|
||||
if(!(Flags & TPM_NONOTIFY))
|
||||
IntSendMessage(WindowObject->Self, WM_SETCURSOR, (WPARAM)WindowObject->Self, HTCAPTION);
|
||||
|
||||
|
||||
/* FIXME - send WM_SETCURSOR message */
|
||||
|
||||
|
||||
if(!(Flags & TPM_NONOTIFY))
|
||||
IntSendMessage(WindowObject->Self, WM_INITMENU, (WPARAM)MenuObject->MenuInfo.Self, 0);
|
||||
}
|
||||
@@ -1202,7 +1202,7 @@ IntExitTracking(PWINDOW_OBJECT WindowObject, PMENU_OBJECT MenuObject, BOOL Popup
|
||||
{
|
||||
if(!(Flags & TPM_NONOTIFY))
|
||||
IntSendMessage(WindowObject->Self, WM_EXITMENULOOP, 0 /* FIXME */, 0);
|
||||
|
||||
|
||||
/* FIXME - Show caret again */
|
||||
}
|
||||
|
||||
@@ -1218,7 +1218,7 @@ IntTrackPopupMenu(PMENU_OBJECT MenuObject, PWINDOW_OBJECT WindowObject,
|
||||
UINT Flags, POINT *Pos, UINT MenuPos, RECT *ExcludeRect)
|
||||
{
|
||||
IntInitTracking(WindowObject, MenuObject, TRUE, Flags);
|
||||
|
||||
|
||||
IntExitTracking(WindowObject, MenuObject, TRUE, Flags);
|
||||
return FALSE;
|
||||
}
|
||||
@@ -1227,7 +1227,7 @@ BOOL FASTCALL
|
||||
IntSetMenuItemRect(PMENU_OBJECT MenuObject, UINT Item, BOOL fByPos, RECT *rcRect)
|
||||
{
|
||||
PMENU_ITEM mi;
|
||||
if(IntGetMenuItemByFlag(MenuObject, Item, (fByPos ? MF_BYPOSITION : MF_BYCOMMAND),
|
||||
if(IntGetMenuItemByFlag(MenuObject, Item, (fByPos ? MF_BYPOSITION : MF_BYCOMMAND),
|
||||
&mi, NULL) > -1)
|
||||
{
|
||||
mi->Rect = *rcRect;
|
||||
@@ -1246,26 +1246,26 @@ IntCleanupMenus(struct _EPROCESS *Process, PW32PROCESS Win32Process)
|
||||
PEPROCESS CurrentProcess;
|
||||
PLIST_ENTRY LastHead = NULL;
|
||||
PMENU_OBJECT MenuObject;
|
||||
|
||||
|
||||
CurrentProcess = PsGetCurrentProcess();
|
||||
if (CurrentProcess != Process)
|
||||
{
|
||||
KeAttachProcess(Process);
|
||||
}
|
||||
|
||||
IntLockProcessMenus(Win32Process);
|
||||
|
||||
IntLockProcessMenus(Win32Process);
|
||||
while (Win32Process->MenuListHead.Flink != &(Win32Process->MenuListHead) &&
|
||||
Win32Process->MenuListHead.Flink != LastHead)
|
||||
{
|
||||
LastHead = Win32Process->MenuListHead.Flink;
|
||||
MenuObject = CONTAINING_RECORD(Win32Process->MenuListHead.Flink, MENU_OBJECT, ListEntry);
|
||||
|
||||
|
||||
IntUnLockProcessMenus(Win32Process);
|
||||
IntDestroyMenuObject(MenuObject, FALSE, TRUE);
|
||||
IntLockProcessMenus(Win32Process);
|
||||
IntLockProcessMenus(Win32Process);
|
||||
}
|
||||
IntUnLockProcessMenus(Win32Process);
|
||||
|
||||
|
||||
if (CurrentProcess != Process)
|
||||
{
|
||||
KeDetachProcess();
|
||||
@@ -1294,7 +1294,7 @@ NtUserBuildMenuItemList(
|
||||
SetLastWin32Error(ERROR_INVALID_MENU_HANDLE);
|
||||
return (DWORD)-1;
|
||||
}
|
||||
|
||||
|
||||
if(Buffer)
|
||||
{
|
||||
IntLockMenuItems(MenuObject);
|
||||
@@ -1305,7 +1305,7 @@ NtUserBuildMenuItemList(
|
||||
{
|
||||
res = MenuObject->MenuInfo.MenuItemCount;
|
||||
}
|
||||
|
||||
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
|
||||
return res;
|
||||
@@ -1349,7 +1349,7 @@ NtUserCreateMenu(BOOL PopupMenu)
|
||||
KernelMode,
|
||||
0,
|
||||
&WinStaObject);
|
||||
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("Validation of window station handle (0x%X) failed\n",
|
||||
@@ -1384,7 +1384,7 @@ NtUserDeleteMenu(
|
||||
|
||||
res = IntRemoveMenuItem(MenuObject, uPosition, uFlags, TRUE);
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -1397,7 +1397,7 @@ NtUserDestroyMenu(
|
||||
HMENU hMenu)
|
||||
{
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
PMENU_OBJECT MenuObject = IntGetMenuObject(hMenu);
|
||||
if(!MenuObject)
|
||||
{
|
||||
@@ -1412,7 +1412,7 @@ NtUserDestroyMenu(
|
||||
}
|
||||
|
||||
Ret = IntDestroyMenuObject(MenuObject, FALSE, TRUE);
|
||||
|
||||
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
return Ret;
|
||||
}
|
||||
@@ -1496,7 +1496,7 @@ BOOL STDCALL
|
||||
NtUserEndMenu(VOID)
|
||||
{
|
||||
UNIMPLEMENTED
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1708,7 +1708,7 @@ NtUserMenuItemFromPoint(
|
||||
X -= WindowObject->WindowRect.left;
|
||||
Y -= WindowObject->WindowRect.top;
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
|
||||
|
||||
IntLockMenuItems(MenuObject);
|
||||
mi = MenuObject->MenuItemList;
|
||||
for (i = 0; NULL != mi; i++)
|
||||
@@ -1720,9 +1720,9 @@ NtUserMenuItemFromPoint(
|
||||
mi = mi->Next;
|
||||
}
|
||||
IntUnLockMenuItems(MenuObject);
|
||||
|
||||
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
|
||||
|
||||
return (mi ? i : NO_SELECTED_ITEM);
|
||||
}
|
||||
|
||||
@@ -1745,7 +1745,7 @@ NtUserMenuItemInfo(
|
||||
NTSTATUS Status;
|
||||
UINT Size;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
MenuObject = IntGetMenuObject(Menu);
|
||||
if (NULL == MenuObject)
|
||||
{
|
||||
@@ -1785,7 +1785,7 @@ NtUserMenuItemInfo(
|
||||
}
|
||||
|
||||
if (IntGetMenuItemByFlag(MenuObject, Item,
|
||||
(ByPosition ? MF_BYPOSITION : MF_BYCOMMAND),
|
||||
(ByPosition ? MF_BYPOSITION : MF_BYCOMMAND),
|
||||
&MenuItem, NULL) < 0)
|
||||
{
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
@@ -1811,7 +1811,7 @@ NtUserMenuItemInfo(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
|
||||
return Ret;
|
||||
@@ -1837,7 +1837,7 @@ NtUserRemoveMenu(
|
||||
|
||||
res = IntRemoveMenuItem(MenuObject, uPosition, uFlags, FALSE);
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -1963,14 +1963,14 @@ NtUserTrackPopupMenuEx(
|
||||
NTSTATUS Status;
|
||||
POINT Pos;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
MenuObject = IntGetMenuObject(hmenu);
|
||||
if(!MenuObject)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_MENU_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
WindowObject = IntGetWindowObject(hwnd);
|
||||
if(!WindowObject)
|
||||
{
|
||||
@@ -1978,7 +1978,7 @@ NtUserTrackPopupMenuEx(
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(lptpm)
|
||||
{
|
||||
Status = MmCopyFromCaller(&Safetpm, lptpm, sizeof(TPMPARAMS));
|
||||
@@ -1997,16 +1997,16 @@ NtUserTrackPopupMenuEx(
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Pos.x = x;
|
||||
Pos.y = y;
|
||||
|
||||
Ret = IntTrackPopupMenu(MenuObject, WindowObject, fuFlags, &Pos, 0,
|
||||
|
||||
Ret = IntTrackPopupMenu(MenuObject, WindowObject, fuFlags, &Pos, 0,
|
||||
(lptpm ? &Safetpm.rcExclude : NULL));
|
||||
|
||||
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -166,7 +166,7 @@ MsgMemorySize(PMSGMEMORY MsgMemoryEntry, WPARAM wParam, LPARAM lParam)
|
||||
return MsgMemoryEntry->Size;
|
||||
}
|
||||
} _SEH_HANDLE {
|
||||
|
||||
|
||||
DPRINT1("Exception caught in MsgMemorySize()! Status: 0x%x\n", _SEH_GetExceptionCode());
|
||||
} _SEH_END;
|
||||
return 0;
|
||||
@@ -382,7 +382,7 @@ NtUserDispatchMessage(PNTUSERDISPATCHMESSAGEINFO UnsafeMsgInfo)
|
||||
SetLastNtError(Status);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
@@ -412,7 +412,7 @@ IntSendHitTestMessages(PUSER_MESSAGE_QUEUE ThreadQueue, LPMSG Msg)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
switch(Msg->message)
|
||||
{
|
||||
case WM_MOUSEMOVE:
|
||||
@@ -436,7 +436,7 @@ IntSendHitTestMessages(PUSER_MESSAGE_QUEUE ThreadQueue, LPMSG Msg)
|
||||
{
|
||||
WPARAM wParam;
|
||||
PSYSTEM_CURSORINFO CurInfo;
|
||||
|
||||
|
||||
if(!IntGetWindowStationObject(InputWindowStation))
|
||||
{
|
||||
break;
|
||||
@@ -444,7 +444,7 @@ IntSendHitTestMessages(PUSER_MESSAGE_QUEUE ThreadQueue, LPMSG Msg)
|
||||
CurInfo = IntGetSysCursorInfo(InputWindowStation);
|
||||
wParam = (WPARAM)(CurInfo->ButtonsDown);
|
||||
ObDereferenceObject(InputWindowStation);
|
||||
|
||||
|
||||
IntSendMessage(Msg->hwnd, WM_MOUSEMOVE, wParam, Msg->lParam);
|
||||
IntSendMessage(Msg->hwnd, WM_SETCURSOR, (WPARAM)Msg->hwnd, MAKELPARAM(HTCLIENT, Msg->message));
|
||||
break;
|
||||
@@ -466,17 +466,17 @@ IntSendHitTestMessages(PUSER_MESSAGE_QUEUE ThreadQueue, LPMSG Msg)
|
||||
}
|
||||
|
||||
BOOL FASTCALL
|
||||
IntActivateWindowMouse(PUSER_MESSAGE_QUEUE ThreadQueue, LPMSG Msg, PWINDOW_OBJECT MsgWindow,
|
||||
IntActivateWindowMouse(PUSER_MESSAGE_QUEUE ThreadQueue, LPMSG Msg, PWINDOW_OBJECT MsgWindow,
|
||||
USHORT *HitTest)
|
||||
{
|
||||
ULONG Result;
|
||||
|
||||
|
||||
if(*HitTest == (USHORT)HTTRANSPARENT)
|
||||
{
|
||||
/* eat the message, search again! */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
Result = IntSendMessage(MsgWindow->Self, WM_MOUSEACTIVATE, (WPARAM)NtUserGetParent(MsgWindow->Self), (LPARAM)MAKELONG(*HitTest, Msg->message));
|
||||
switch (Result)
|
||||
{
|
||||
@@ -492,7 +492,7 @@ IntActivateWindowMouse(PUSER_MESSAGE_QUEUE ThreadQueue, LPMSG Msg, PWINDOW_OBJEC
|
||||
IntMouseActivateWindow(MsgWindow);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -500,29 +500,29 @@ BOOL FASTCALL
|
||||
IntTranslateMouseMessage(PUSER_MESSAGE_QUEUE ThreadQueue, LPMSG Msg, USHORT *HitTest, BOOL Remove)
|
||||
{
|
||||
PWINDOW_OBJECT Window;
|
||||
|
||||
|
||||
if(!(Window = IntGetWindowObject(Msg->hwnd)))
|
||||
{
|
||||
/* let's just eat the message?! */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
if(ThreadQueue == Window->MessageQueue &&
|
||||
ThreadQueue->CaptureWindow != Window->Self)
|
||||
{
|
||||
/* only send WM_NCHITTEST messages if we're not capturing the window! */
|
||||
*HitTest = IntSendMessage(Window->Self, WM_NCHITTEST, 0,
|
||||
*HitTest = IntSendMessage(Window->Self, WM_NCHITTEST, 0,
|
||||
MAKELONG(Msg->pt.x, Msg->pt.y));
|
||||
|
||||
|
||||
if(*HitTest == (USHORT)HTTRANSPARENT)
|
||||
{
|
||||
PWINDOW_OBJECT DesktopWindow;
|
||||
HWND hDesktop = IntGetDesktopWindow();
|
||||
|
||||
|
||||
if((DesktopWindow = IntGetWindowObject(hDesktop)))
|
||||
{
|
||||
PWINDOW_OBJECT Wnd;
|
||||
|
||||
|
||||
WinPosWindowFromPoint(DesktopWindow, Window->MessageQueue, &Msg->pt, &Wnd);
|
||||
if(Wnd)
|
||||
{
|
||||
@@ -536,16 +536,16 @@ IntTranslateMouseMessage(PUSER_MESSAGE_QUEUE ThreadQueue, LPMSG Msg, USHORT *Hit
|
||||
Msg->message == WM_MOUSEMOVE ? QS_MOUSEMOVE :
|
||||
QS_MOUSEBUTTON);
|
||||
}
|
||||
|
||||
|
||||
/* eat the message */
|
||||
IntReleaseWindowObject(Wnd);
|
||||
IntReleaseWindowObject(Window);
|
||||
IntReleaseWindowObject(DesktopWindow);
|
||||
return TRUE;
|
||||
}
|
||||
IntReleaseWindowObject(Wnd);
|
||||
IntReleaseWindowObject(Wnd);
|
||||
}
|
||||
|
||||
|
||||
IntReleaseWindowObject(DesktopWindow);
|
||||
}
|
||||
}
|
||||
@@ -554,25 +554,25 @@ IntTranslateMouseMessage(PUSER_MESSAGE_QUEUE ThreadQueue, LPMSG Msg, USHORT *Hit
|
||||
{
|
||||
*HitTest = HTCLIENT;
|
||||
}
|
||||
|
||||
|
||||
if(IS_BTN_MESSAGE(Msg->message, DOWN))
|
||||
{
|
||||
/* generate double click messages, if necessary */
|
||||
if ((((*HitTest) != HTCLIENT) ||
|
||||
if ((((*HitTest) != HTCLIENT) ||
|
||||
(IntGetClassLong(Window, GCL_STYLE, FALSE) & CS_DBLCLKS)) &&
|
||||
MsqIsDblClk(Msg, Remove))
|
||||
{
|
||||
Msg->message += WM_LBUTTONDBLCLK - WM_LBUTTONDOWN;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(Msg->message != WM_MOUSEWHEEL)
|
||||
{
|
||||
|
||||
|
||||
if ((*HitTest) != HTCLIENT)
|
||||
{
|
||||
Msg->message += WM_NCMOUSEMOVE - WM_MOUSEMOVE;
|
||||
if((Msg->message == WM_NCRBUTTONUP) &&
|
||||
if((Msg->message == WM_NCRBUTTONUP) &&
|
||||
(((*HitTest) == HTCAPTION) || ((*HitTest) == HTSYSMENU)))
|
||||
{
|
||||
Msg->message = WM_CONTEXTMENU;
|
||||
@@ -593,7 +593,7 @@ IntTranslateMouseMessage(PUSER_MESSAGE_QUEUE ThreadQueue, LPMSG Msg, USHORT *Hit
|
||||
Msg->pt.y - (WORD)Window->ClientRect.top);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
IntReleaseWindowObject(Window);
|
||||
return FALSE;
|
||||
}
|
||||
@@ -622,19 +622,19 @@ IntPeekMessage(PUSER_MESSAGE Msg,
|
||||
/* Inspect RemoveMsg flags */
|
||||
/* FIXME: The only flag we process is PM_REMOVE - processing of others must still be implemented */
|
||||
RemoveMessages = RemoveMsg & PM_REMOVE;
|
||||
|
||||
|
||||
CheckMessages:
|
||||
|
||||
|
||||
Present = FALSE;
|
||||
|
||||
|
||||
KeQueryTickCount(&LargeTickCount);
|
||||
ThreadQueue->LastMsgRead = LargeTickCount.u.LowPart;
|
||||
|
||||
/* Dispatch sent messages here. */
|
||||
while (MsqDispatchOneSentMessage(ThreadQueue));
|
||||
|
||||
|
||||
/* Now look for a quit message. */
|
||||
|
||||
|
||||
if (ThreadQueue->QuitPosted)
|
||||
{
|
||||
/* According to the PSDK, WM_QUIT messages are always returned, regardless
|
||||
@@ -668,7 +668,7 @@ IntPeekMessage(PUSER_MESSAGE Msg,
|
||||
}
|
||||
goto MessageFound;
|
||||
}
|
||||
|
||||
|
||||
/* Check for hardware events. */
|
||||
Present = MsqFindMessage(ThreadQueue,
|
||||
TRUE,
|
||||
@@ -686,7 +686,7 @@ IntPeekMessage(PUSER_MESSAGE Msg,
|
||||
}
|
||||
goto MessageFound;
|
||||
}
|
||||
|
||||
|
||||
/* Check for sent messages again. */
|
||||
while (MsqDispatchOneSentMessage(ThreadQueue));
|
||||
|
||||
@@ -696,7 +696,7 @@ IntPeekMessage(PUSER_MESSAGE Msg,
|
||||
Msg->FreeLParam = FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/* Check for WM_(SYS)TIMER messages */
|
||||
Present = MsqGetTimerMessage(ThreadQueue, Wnd, MsgFilterMin, MsgFilterMax,
|
||||
&Msg->Msg, RemoveMessages);
|
||||
@@ -705,20 +705,20 @@ IntPeekMessage(PUSER_MESSAGE Msg,
|
||||
Msg->FreeLParam = FALSE;
|
||||
goto MessageFound;
|
||||
}
|
||||
|
||||
|
||||
if(Present)
|
||||
{
|
||||
MessageFound:
|
||||
|
||||
|
||||
if(RemoveMessages)
|
||||
{
|
||||
PWINDOW_OBJECT MsgWindow = NULL;;
|
||||
|
||||
PWINDOW_OBJECT MsgWindow = NULL;
|
||||
|
||||
if(Msg->Msg.hwnd && (MsgWindow = IntGetWindowObject(Msg->Msg.hwnd)) &&
|
||||
Msg->Msg.message >= WM_MOUSEFIRST && Msg->Msg.message <= WM_MOUSELAST)
|
||||
{
|
||||
USHORT HitTest;
|
||||
|
||||
|
||||
if(IntTranslateMouseMessage(ThreadQueue, &Msg->Msg, &HitTest, TRUE))
|
||||
/* FIXME - check message filter again, if the message doesn't match anymore,
|
||||
search again */
|
||||
@@ -744,15 +744,15 @@ IntPeekMessage(PUSER_MESSAGE Msg,
|
||||
{
|
||||
IntSendHitTestMessages(ThreadQueue, &Msg->Msg);
|
||||
}
|
||||
|
||||
|
||||
if(MsgWindow)
|
||||
{
|
||||
IntReleaseWindowObject(MsgWindow);
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
USHORT HitTest;
|
||||
if((Msg->Msg.hwnd && Msg->Msg.message >= WM_MOUSEFIRST && Msg->Msg.message <= WM_MOUSELAST) &&
|
||||
IntTranslateMouseMessage(ThreadQueue, &Msg->Msg, &HitTest, FALSE))
|
||||
@@ -762,7 +762,7 @@ IntPeekMessage(PUSER_MESSAGE Msg,
|
||||
/* eat the message, search again */
|
||||
goto CheckMessages;
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1006,7 +1006,7 @@ static NTSTATUS FASTCALL
|
||||
CopyMsgToKernelMem(MSG *KernelModeMsg, MSG *UserModeMsg, PMSGMEMORY MsgMemoryEntry)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
PVOID KernelMem;
|
||||
UINT Size;
|
||||
|
||||
@@ -1126,7 +1126,7 @@ NtUserPostMessage(HWND Wnd,
|
||||
for (i = 0; List[i]; i++)
|
||||
NtUserPostMessage(List[i], Msg, wParam, lParam);
|
||||
ExFreePool(List);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1181,7 +1181,7 @@ NtUserPostThreadMessage(DWORD idThread,
|
||||
PMSGMEMORY MsgMemoryEntry;
|
||||
|
||||
Status = PsLookupThreadByThreadId((HANDLE)idThread,&peThread);
|
||||
|
||||
|
||||
if( Status == STATUS_SUCCESS ) {
|
||||
pThread = peThread->Tcb.Win32Thread;
|
||||
if( !pThread || !pThread->MessageQueue )
|
||||
@@ -1299,12 +1299,12 @@ IntSendMessageTimeoutSingle(HWND hWnd,
|
||||
Result = (ULONG_PTR)IntCallWindowProc(Window->WndProcA, TRUE, hWnd, Msg, wParam,
|
||||
lParamPacked,lParamBufferSize);
|
||||
}
|
||||
|
||||
|
||||
if(uResult)
|
||||
{
|
||||
*uResult = Result;
|
||||
}
|
||||
|
||||
|
||||
if (! NT_SUCCESS(UnpackParam(lParamPacked, Msg, wParam, lParam)))
|
||||
{
|
||||
IntReleaseWindowObject(Window);
|
||||
@@ -1315,14 +1315,14 @@ IntSendMessageTimeoutSingle(HWND hWnd,
|
||||
IntReleaseWindowObject(Window);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
if(uFlags & SMTO_ABORTIFHUNG && MsqIsHung(Window->MessageQueue))
|
||||
{
|
||||
IntReleaseWindowObject(Window);
|
||||
/* FIXME - Set a LastError? */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(Window->Status & WINDOWSTATUS_DESTROYING)
|
||||
{
|
||||
IntReleaseWindowObject(Window);
|
||||
@@ -1330,8 +1330,8 @@ IntSendMessageTimeoutSingle(HWND hWnd,
|
||||
DPRINT1("Attempted to send message to window 0x%x that is being destroyed!\n", hWnd);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
Status = MsqSendMessage(Window->MessageQueue, hWnd, Msg, wParam, lParam,
|
||||
|
||||
Status = MsqSendMessage(Window->MessageQueue, hWnd, Msg, wParam, lParam,
|
||||
uTimeout, (uFlags & SMTO_BLOCK), uResult);
|
||||
IntReleaseWindowObject(Window);
|
||||
if (STATUS_TIMEOUT == Status)
|
||||
@@ -1402,19 +1402,19 @@ IntPostOrSendMessage(HWND hWnd,
|
||||
{
|
||||
ULONG_PTR Result;
|
||||
PWINDOW_OBJECT Window;
|
||||
|
||||
|
||||
if(hWnd == HWND_BROADCAST)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Window = IntGetWindowObject(hWnd);
|
||||
if(!Window)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
if(Window->MessageQueue != PsGetWin32Thread()->MessageQueue)
|
||||
{
|
||||
Result = NtUserPostMessage(hWnd, Msg, wParam, lParam);
|
||||
@@ -1426,9 +1426,9 @@ IntPostOrSendMessage(HWND hWnd,
|
||||
Result = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
IntReleaseWindowObject(Window);
|
||||
|
||||
|
||||
return (LRESULT)Result;
|
||||
}
|
||||
|
||||
@@ -1568,7 +1568,7 @@ NtUserSendMessageTimeout(HWND hWnd,
|
||||
if(uResult != NULL && Result != 0)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
Status = MmCopyToCaller(uResult, &dsm.Result, sizeof(ULONG_PTR));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
|
||||
+134
-134
@@ -27,7 +27,7 @@ VOID W32kRegisterPrimitiveMessageQueue(VOID)
|
||||
pmPrimitiveMessageQueue = pThread->MessageQueue;
|
||||
IntReferenceMessageQueue(pmPrimitiveMessageQueue);
|
||||
DPRINT( "Installed primitive input queue.\n" );
|
||||
}
|
||||
}
|
||||
} else {
|
||||
DPRINT1( "Alert! Someone is trying to steal the primitive queue.\n" );
|
||||
}
|
||||
@@ -116,11 +116,11 @@ NtUserCallNoParam(DWORD Routine)
|
||||
W32kRegisterPrimitiveMessageQueue();
|
||||
Result = (DWORD)TRUE;
|
||||
break;
|
||||
|
||||
|
||||
case NOPARAM_ROUTINE_DESTROY_CARET:
|
||||
Result = (DWORD)IntDestroyCaret(PsGetCurrentThread()->Tcb.Win32Thread);
|
||||
break;
|
||||
|
||||
|
||||
case NOPARAM_ROUTINE_INIT_MESSAGE_PUMP:
|
||||
Result = (DWORD)IntInitMessagePumpHook();
|
||||
break;
|
||||
@@ -128,11 +128,11 @@ NtUserCallNoParam(DWORD Routine)
|
||||
case NOPARAM_ROUTINE_UNINIT_MESSAGE_PUMP:
|
||||
Result = (DWORD)IntUninitMessagePumpHook();
|
||||
break;
|
||||
|
||||
|
||||
case NOPARAM_ROUTINE_GETMESSAGEEXTRAINFO:
|
||||
Result = (DWORD)MsqGetMessageExtraInfo();
|
||||
break;
|
||||
|
||||
|
||||
case NOPARAM_ROUTINE_ANYPOPUP:
|
||||
Result = (DWORD)IntAnyPopup();
|
||||
break;
|
||||
@@ -140,7 +140,7 @@ NtUserCallNoParam(DWORD Routine)
|
||||
case NOPARAM_ROUTINE_CSRSS_INITIALIZED:
|
||||
Result = (DWORD)CsrInit();
|
||||
break;
|
||||
|
||||
|
||||
case NOPARAM_ROUTINE_MSQCLEARWAKEMASK:
|
||||
return (DWORD)IntMsqClearWakeMask();
|
||||
|
||||
@@ -167,25 +167,25 @@ NtUserCallOneParam(
|
||||
{
|
||||
PWINDOW_OBJECT WindowObject;
|
||||
DWORD Result;
|
||||
|
||||
|
||||
WindowObject = IntGetWindowObject((HWND)Param);
|
||||
if(!WindowObject)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Result = (DWORD)WindowObject->IDMenu;
|
||||
|
||||
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
||||
case ONEPARAM_ROUTINE_ISWINDOWUNICODE:
|
||||
{
|
||||
PWINDOW_OBJECT WindowObject;
|
||||
DWORD Result;
|
||||
|
||||
|
||||
WindowObject = IntGetWindowObject((HWND)Param);
|
||||
if(!WindowObject)
|
||||
{
|
||||
@@ -196,34 +196,34 @@ NtUserCallOneParam(
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
||||
case ONEPARAM_ROUTINE_WINDOWFROMDC:
|
||||
return (DWORD)IntWindowFromDC((HDC)Param);
|
||||
|
||||
|
||||
case ONEPARAM_ROUTINE_GETWNDCONTEXTHLPID:
|
||||
{
|
||||
PWINDOW_OBJECT WindowObject;
|
||||
DWORD Result;
|
||||
|
||||
|
||||
WindowObject = IntGetWindowObject((HWND)Param);
|
||||
if(!WindowObject)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Result = WindowObject->ContextHelpId;
|
||||
|
||||
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
||||
case ONEPARAM_ROUTINE_SWAPMOUSEBUTTON:
|
||||
{
|
||||
PWINSTATION_OBJECT WinStaObject;
|
||||
NTSTATUS Status;
|
||||
DWORD Result;
|
||||
|
||||
|
||||
Status = IntValidateWindowStationHandle(PsGetCurrentProcess()->Win32WindowStation,
|
||||
KernelMode,
|
||||
0,
|
||||
@@ -238,41 +238,41 @@ NtUserCallOneParam(
|
||||
ObDereferenceObject(WinStaObject);
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
||||
case ONEPARAM_ROUTINE_SWITCHCARETSHOWING:
|
||||
return (DWORD)IntSwitchCaretShowing((PVOID)Param);
|
||||
|
||||
|
||||
case ONEPARAM_ROUTINE_SETCARETBLINKTIME:
|
||||
return (DWORD)IntSetCaretBlinkTime((UINT)Param);
|
||||
|
||||
case ONEPARAM_ROUTINE_ENUMCLIPBOARDFORMATS:
|
||||
return (DWORD)IntEnumClipboardFormats((UINT)Param);
|
||||
|
||||
|
||||
case ONEPARAM_ROUTINE_GETWINDOWINSTANCE:
|
||||
{
|
||||
PWINDOW_OBJECT WindowObject;
|
||||
DWORD Result;
|
||||
|
||||
|
||||
if(!(WindowObject = IntGetWindowObject((HWND)Param)))
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Result = (DWORD)WindowObject->Instance;
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
||||
case ONEPARAM_ROUTINE_SETMESSAGEEXTRAINFO:
|
||||
return (DWORD)MsqSetMessageExtraInfo((LPARAM)Param);
|
||||
|
||||
|
||||
case ONEPARAM_ROUTINE_GETCURSORPOSITION:
|
||||
{
|
||||
PWINSTATION_OBJECT WinStaObject;
|
||||
NTSTATUS Status;
|
||||
POINT Pos;
|
||||
|
||||
|
||||
if(!Param)
|
||||
return (DWORD)FALSE;
|
||||
Status = IntValidateWindowStationHandle(PsGetCurrentProcess()->Win32WindowStation,
|
||||
@@ -281,10 +281,10 @@ NtUserCallOneParam(
|
||||
&WinStaObject);
|
||||
if (!NT_SUCCESS(Status))
|
||||
return (DWORD)FALSE;
|
||||
|
||||
|
||||
/* FIXME - check if process has WINSTA_READATTRIBUTES */
|
||||
IntGetCursorLocation(WinStaObject, &Pos);
|
||||
|
||||
|
||||
Status = MmCopyToCaller((PPOINT)Param, &Pos, sizeof(POINT));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -292,58 +292,58 @@ NtUserCallOneParam(
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
ObDereferenceObject(WinStaObject);
|
||||
|
||||
|
||||
return (DWORD)TRUE;
|
||||
}
|
||||
|
||||
|
||||
case ONEPARAM_ROUTINE_ISWINDOWINDESTROY:
|
||||
{
|
||||
PWINDOW_OBJECT WindowObject;
|
||||
DWORD Result;
|
||||
|
||||
|
||||
WindowObject = IntGetWindowObject((HWND)Param);
|
||||
if(!WindowObject)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Result = (DWORD)IntIsWindowInDestroy(WindowObject);
|
||||
|
||||
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
||||
case ONEPARAM_ROUTINE_ENABLEPROCWNDGHSTING:
|
||||
{
|
||||
BOOL Enable;
|
||||
PW32PROCESS Process = PsGetWin32Process();
|
||||
|
||||
|
||||
if(Process != NULL)
|
||||
{
|
||||
Enable = (BOOL)(Param != 0);
|
||||
|
||||
|
||||
if(Enable)
|
||||
{
|
||||
Process->Flags &= ~W32PF_NOWINDOWGHOSTING;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Process->Flags |= W32PF_NOWINDOWGHOSTING;
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
case ONEPARAM_ROUTINE_MSQSETWAKEMASK:
|
||||
return (DWORD)IntMsqSetWakeMask(Param);
|
||||
}
|
||||
DPRINT1("Calling invalid routine number 0x%x in NtUserCallOneParam(), Param=0x%x\n",
|
||||
DPRINT1("Calling invalid routine number 0x%x in NtUserCallOneParam(), Param=0x%x\n",
|
||||
Routine, Param);
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return 0;
|
||||
@@ -362,7 +362,7 @@ NtUserCallTwoParam(
|
||||
{
|
||||
NTSTATUS Status;
|
||||
PWINDOW_OBJECT WindowObject;
|
||||
|
||||
|
||||
switch(Routine)
|
||||
{
|
||||
case TWOPARAM_ROUTINE_SETDCPENCOLOR:
|
||||
@@ -400,7 +400,7 @@ NtUserCallTwoParam(
|
||||
PMENU_OBJECT MenuObject = IntGetMenuObject((HMENU)Param1);
|
||||
if(!MenuObject)
|
||||
return 0;
|
||||
|
||||
|
||||
if(Param2 > 0)
|
||||
{
|
||||
Ret = (MenuObject->MenuInfo.Height == (int)Param2);
|
||||
@@ -418,27 +418,27 @@ NtUserCallTwoParam(
|
||||
PMENU_OBJECT MenuObject = IntGetMenuObject((HMENU)Param1);
|
||||
if(!MenuObject)
|
||||
return 0;
|
||||
|
||||
|
||||
if(!NT_SUCCESS(MmCopyFromCaller(&smir, (PVOID)Param2, sizeof(SETMENUITEMRECT))))
|
||||
{
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Ret = IntSetMenuItemRect(MenuObject, smir.uItem, smir.fByPosition, &smir.rcRect);
|
||||
|
||||
|
||||
IntReleaseMenuObject(MenuObject);
|
||||
return (DWORD)Ret;
|
||||
}
|
||||
|
||||
|
||||
case TWOPARAM_ROUTINE_SETGUITHRDHANDLE:
|
||||
{
|
||||
PUSER_MESSAGE_QUEUE MsgQueue = PsGetCurrentThread()->Tcb.Win32Thread->MessageQueue;
|
||||
|
||||
|
||||
ASSERT(MsgQueue);
|
||||
return (DWORD)MsqSetStateWindow(MsgQueue, (ULONG)Param1, (HWND)Param2);
|
||||
}
|
||||
|
||||
|
||||
case TWOPARAM_ROUTINE_ENABLEWINDOW:
|
||||
UNIMPLEMENTED
|
||||
return 0;
|
||||
@@ -457,7 +457,7 @@ NtUserCallTwoParam(
|
||||
|
||||
case TWOPARAM_ROUTINE_VALIDATERGN:
|
||||
return (DWORD)NtUserValidateRgn((HWND) Param1, (HRGN) Param2);
|
||||
|
||||
|
||||
case TWOPARAM_ROUTINE_SETWNDCONTEXTHLPID:
|
||||
WindowObject = IntGetWindowObject((HWND)Param1);
|
||||
if(!WindowObject)
|
||||
@@ -465,31 +465,31 @@ NtUserCallTwoParam(
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return (DWORD)FALSE;
|
||||
}
|
||||
|
||||
|
||||
WindowObject->ContextHelpId = Param2;
|
||||
|
||||
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
return (DWORD)TRUE;
|
||||
|
||||
|
||||
case TWOPARAM_ROUTINE_SETCARETPOS:
|
||||
return (DWORD)IntSetCaretPos((int)Param1, (int)Param2);
|
||||
|
||||
|
||||
case TWOPARAM_ROUTINE_GETWINDOWINFO:
|
||||
{
|
||||
WINDOWINFO wi;
|
||||
DWORD Ret;
|
||||
|
||||
|
||||
if(!(WindowObject = IntGetWindowObject((HWND)Param1)))
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* According to WINE, Windows' doesn't check the cbSize field
|
||||
*/
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(&wi.cbSize, (PVOID)Param2, sizeof(wi.cbSize));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -497,7 +497,7 @@ NtUserCallTwoParam(
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(wi.cbSize != sizeof(WINDOWINFO))
|
||||
{
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
@@ -505,7 +505,7 @@ NtUserCallTwoParam(
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
if((Ret = (DWORD)IntGetWindowInfo(WindowObject, &wi)))
|
||||
{
|
||||
Status = MmCopyToCaller((PVOID)Param2, &wi, sizeof(WINDOWINFO));
|
||||
@@ -516,11 +516,11 @@ NtUserCallTwoParam(
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
return Ret;
|
||||
}
|
||||
|
||||
|
||||
case TWOPARAM_ROUTINE_REGISTERLOGONPROC:
|
||||
return (DWORD)IntRegisterLogonProcess((HANDLE)Param1, (BOOL)Param2);
|
||||
|
||||
@@ -535,20 +535,20 @@ NtUserCallTwoParam(
|
||||
} ChangeSysColors;
|
||||
|
||||
/* FIXME - we should make use of SEH here... */
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(&ChangeSysColors, (PVOID)Param1, sizeof(ChangeSysColors));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Buffer = ExAllocatePool(PagedPool, (Param2 * sizeof(INT)) + (Param2 * sizeof(COLORREF)));
|
||||
if(Buffer != NULL)
|
||||
{
|
||||
INT *Elements = (INT*)Buffer;
|
||||
COLORREF *Colors = (COLORREF*)Buffer + Param2;
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(Elements, ChangeSysColors.Elements, Param2 * sizeof(INT));
|
||||
if(NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -582,7 +582,7 @@ NtUserCallTwoParam(
|
||||
} Buffer;
|
||||
|
||||
/* FIXME - we should make use of SEH here... */
|
||||
|
||||
|
||||
Buffer.Pointer = ExAllocatePool(PagedPool, Param2 * sizeof(HANDLE));
|
||||
if(Buffer.Pointer != NULL)
|
||||
{
|
||||
@@ -601,7 +601,7 @@ NtUserCallTwoParam(
|
||||
Ret = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if(Ret > 0)
|
||||
{
|
||||
Status = MmCopyToCaller((PVOID)Param1, Buffer.Pointer, Param2 * sizeof(HANDLE));
|
||||
@@ -617,7 +617,7 @@ NtUserCallTwoParam(
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
DPRINT1("Calling invalid routine number 0x%x in NtUserCallTwoParam(), Param1=0x%x Parm2=0x%x\n",
|
||||
Routine, Param1, Param2);
|
||||
@@ -709,8 +709,8 @@ NtUserGetThreadState(
|
||||
}
|
||||
|
||||
VOID FASTCALL
|
||||
IntGetFontMetricSetting(LPWSTR lpValueName, PLOGFONTW font)
|
||||
{
|
||||
IntGetFontMetricSetting(LPWSTR lpValueName, PLOGFONTW font)
|
||||
{
|
||||
RTL_QUERY_REGISTRY_TABLE QueryTable[2];
|
||||
NTSTATUS Status;
|
||||
static LOGFONTW DefaultFont = {
|
||||
@@ -754,19 +754,19 @@ IntSystemParametersInfo(
|
||||
static BOOL GradientCaptions = TRUE;
|
||||
static UINT FocusBorderHeight = 1;
|
||||
static UINT FocusBorderWidth = 1;
|
||||
|
||||
|
||||
if (!bInitialized)
|
||||
{
|
||||
ZeroMemory(&IconFont, sizeof(LOGFONTW));
|
||||
ZeroMemory(&IconFont, sizeof(LOGFONTW));
|
||||
ZeroMemory(&pMetrics, sizeof(NONCLIENTMETRICSW));
|
||||
|
||||
|
||||
IntGetFontMetricSetting(L"CaptionFont", &pMetrics.lfCaptionFont);
|
||||
IntGetFontMetricSetting(L"SmCaptionFont", &pMetrics.lfSmCaptionFont);
|
||||
IntGetFontMetricSetting(L"MenuFont", &pMetrics.lfMenuFont);
|
||||
IntGetFontMetricSetting(L"StatusFont", &pMetrics.lfStatusFont);
|
||||
IntGetFontMetricSetting(L"MessageFont", &pMetrics.lfMessageFont);
|
||||
IntGetFontMetricSetting(L"IconFont", &IconFont);
|
||||
|
||||
|
||||
pMetrics.iBorderWidth = 1;
|
||||
pMetrics.iScrollWidth = NtUserGetSystemMetrics(SM_CXVSCROLL);
|
||||
pMetrics.iScrollHeight = NtUserGetSystemMetrics(SM_CYHSCROLL);
|
||||
@@ -777,10 +777,10 @@ IntSystemParametersInfo(
|
||||
pMetrics.iMenuWidth = NtUserGetSystemMetrics(SM_CXMENUSIZE);
|
||||
pMetrics.iMenuHeight = NtUserGetSystemMetrics(SM_CYMENUSIZE);
|
||||
pMetrics.cbSize = sizeof(NONCLIENTMETRICSW);
|
||||
|
||||
|
||||
bInitialized = TRUE;
|
||||
}
|
||||
|
||||
|
||||
switch(uiAction)
|
||||
{
|
||||
case SPI_SETDOUBLECLKWIDTH:
|
||||
@@ -790,7 +790,7 @@ IntSystemParametersInfo(
|
||||
case SPI_GETDESKWALLPAPER:
|
||||
{
|
||||
PSYSTEM_CURSORINFO CurInfo;
|
||||
|
||||
|
||||
Status = IntValidateWindowStationHandle(PsGetCurrentProcess()->Win32WindowStation,
|
||||
KernelMode,
|
||||
0,
|
||||
@@ -800,7 +800,7 @@ IntSystemParametersInfo(
|
||||
SetLastNtError(Status);
|
||||
return (DWORD)FALSE;
|
||||
}
|
||||
|
||||
|
||||
switch(uiAction)
|
||||
{
|
||||
case SPI_SETDOUBLECLKWIDTH:
|
||||
@@ -842,7 +842,7 @@ IntSystemParametersInfo(
|
||||
WinStaObject->cyWallpaper = bmp->SurfObj.sizlBitmap.cy;
|
||||
|
||||
BITMAPOBJ_UnlockBitmap(hNewBitmap);
|
||||
|
||||
|
||||
/* change the bitmap's ownership */
|
||||
GDIOBJ_SetOwnership(hNewBitmap, NULL);
|
||||
}
|
||||
@@ -864,9 +864,9 @@ IntSystemParametersInfo(
|
||||
*(HBITMAP*)pvParam = (HBITMAP)WinStaObject->hbmWallpaper;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* FIXME save the value to the registry */
|
||||
|
||||
|
||||
ObDereferenceObject(WinStaObject);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -874,32 +874,32 @@ IntSystemParametersInfo(
|
||||
{
|
||||
RECT *rc;
|
||||
PDESKTOP_OBJECT Desktop = PsGetWin32Thread()->Desktop;
|
||||
|
||||
|
||||
if(!Desktop)
|
||||
{
|
||||
/* FIXME - Set last error */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
ASSERT(pvParam);
|
||||
rc = (RECT*)pvParam;
|
||||
Desktop->WorkArea = *rc;
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
case SPI_GETWORKAREA:
|
||||
{
|
||||
PDESKTOP_OBJECT Desktop = PsGetWin32Thread()->Desktop;
|
||||
|
||||
|
||||
if(!Desktop)
|
||||
{
|
||||
/* FIXME - Set last error */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
ASSERT(pvParam);
|
||||
IntGetDesktopWorkArea(Desktop, (PRECT)pvParam);
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
case SPI_SETGRADIENTCAPTIONS:
|
||||
@@ -912,12 +912,12 @@ IntSystemParametersInfo(
|
||||
{
|
||||
HDC hDC;
|
||||
BOOL Ret = GradientCaptions;
|
||||
|
||||
|
||||
hDC = IntGetScreenDC();
|
||||
if(hDC)
|
||||
{
|
||||
Ret = (NtGdiGetDeviceCaps(hDC, BITSPIXEL) > 8) && Ret;
|
||||
|
||||
|
||||
ASSERT(pvParam);
|
||||
*((PBOOL)pvParam) = Ret;
|
||||
return TRUE;
|
||||
@@ -969,7 +969,7 @@ IntSystemParametersInfo(
|
||||
FocusBorderWidth = (UINT)pvParam;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
default:
|
||||
{
|
||||
DPRINT1("SystemParametersInfo: Unsupported Action 0x%x (uiParam: 0x%x, pvParam: 0x%x, fWinIni: 0x%x)\n",
|
||||
@@ -1019,12 +1019,12 @@ NtUserSystemParametersInfo(
|
||||
case SPI_GETWORKAREA:
|
||||
{
|
||||
RECT rc;
|
||||
|
||||
|
||||
if(!IntSystemParametersInfo(uiAction, uiParam, &rc, fWinIni))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyToCaller((PRECT)pvParam, &rc, sizeof(RECT));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -1039,12 +1039,12 @@ NtUserSystemParametersInfo(
|
||||
case SPI_GETFOCUSBORDERWIDTH:
|
||||
{
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
if(!IntSystemParametersInfo(uiAction, uiParam, &Ret, fWinIni))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyToCaller(pvParam, &Ret, sizeof(BOOL));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -1058,7 +1058,7 @@ NtUserSystemParametersInfo(
|
||||
/* !!! As opposed to the user mode version this version accepts a handle
|
||||
to the bitmap! */
|
||||
HBITMAP hbmWallpaper;
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(&hbmWallpaper, pvParam, sizeof(HBITMAP));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -1073,7 +1073,7 @@ NtUserSystemParametersInfo(
|
||||
to the bitmap! */
|
||||
HBITMAP hbmWallpaper;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
Ret = IntSystemParametersInfo(SPI_GETDESKWALLPAPER, 0, &hbmWallpaper, fWinIni);
|
||||
|
||||
Status = MmCopyToCaller(pvParam, &hbmWallpaper, sizeof(HBITMAP));
|
||||
@@ -1087,12 +1087,12 @@ NtUserSystemParametersInfo(
|
||||
case SPI_GETICONTITLELOGFONT:
|
||||
{
|
||||
LOGFONTW IconFont;
|
||||
|
||||
|
||||
if(!IntSystemParametersInfo(uiAction, uiParam, &IconFont, fWinIni))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyToCaller(pvParam, &IconFont, sizeof(LOGFONTW));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -1104,7 +1104,7 @@ NtUserSystemParametersInfo(
|
||||
case SPI_GETNONCLIENTMETRICS:
|
||||
{
|
||||
NONCLIENTMETRICSW metrics;
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(&metrics.cbSize, pvParam, sizeof(UINT));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -1116,12 +1116,12 @@ NtUserSystemParametersInfo(
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(!IntSystemParametersInfo(uiAction, uiParam, &metrics, fWinIni))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyToCaller(pvParam, &metrics.cbSize, sizeof(NONCLIENTMETRICSW));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -1142,7 +1142,7 @@ NtUserGetDoubleClickTime(VOID)
|
||||
NTSTATUS Status;
|
||||
PWINSTATION_OBJECT WinStaObject;
|
||||
PSYSTEM_CURSORINFO CurInfo;
|
||||
|
||||
|
||||
Status = IntValidateWindowStationHandle(PsGetCurrentProcess()->Win32WindowStation,
|
||||
KernelMode,
|
||||
0,
|
||||
@@ -1152,7 +1152,7 @@ NtUserGetDoubleClickTime(VOID)
|
||||
|
||||
CurInfo = IntGetSysCursorInfo(WinStaObject);
|
||||
Result = CurInfo->DblClickSpeed;
|
||||
|
||||
|
||||
ObDereferenceObject(WinStaObject);
|
||||
return Result;
|
||||
}
|
||||
@@ -1169,20 +1169,20 @@ NtUserGetGUIThreadInfo(
|
||||
PDESKTOP_OBJECT Desktop;
|
||||
PUSER_MESSAGE_QUEUE MsgQueue;
|
||||
PETHREAD Thread = NULL;
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(&SafeGui, lpgui, sizeof(DWORD));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(SafeGui.cbSize != sizeof(GUITHREADINFO))
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(idThread)
|
||||
{
|
||||
Status = PsLookupThreadByThreadId((HANDLE)idThread, &Thread);
|
||||
@@ -1207,7 +1207,7 @@ NtUserGetGUIThreadInfo(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(!Thread || !Desktop)
|
||||
{
|
||||
if(idThread && Thread)
|
||||
@@ -1215,33 +1215,33 @@ NtUserGetGUIThreadInfo(
|
||||
SetLastWin32Error(ERROR_ACCESS_DENIED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
MsgQueue = (PUSER_MESSAGE_QUEUE)Desktop->ActiveMessageQueue;
|
||||
CaretInfo = MsgQueue->CaretInfo;
|
||||
|
||||
|
||||
SafeGui.flags = (CaretInfo->Visible ? GUI_CARETBLINKING : 0);
|
||||
if(MsgQueue->MenuOwner)
|
||||
SafeGui.flags |= GUI_INMENUMODE | MsgQueue->MenuState;
|
||||
if(MsgQueue->MoveSize)
|
||||
SafeGui.flags |= GUI_INMOVESIZE;
|
||||
|
||||
|
||||
/* FIXME add flag GUI_16BITTASK */
|
||||
|
||||
|
||||
SafeGui.hwndActive = MsgQueue->ActiveWindow;
|
||||
SafeGui.hwndFocus = MsgQueue->FocusWindow;
|
||||
SafeGui.hwndCapture = MsgQueue->CaptureWindow;
|
||||
SafeGui.hwndMenuOwner = MsgQueue->MenuOwner;
|
||||
SafeGui.hwndMoveSize = MsgQueue->MoveSize;
|
||||
SafeGui.hwndCaret = CaretInfo->hWnd;
|
||||
|
||||
|
||||
SafeGui.rcCaret.left = CaretInfo->Pos.x;
|
||||
SafeGui.rcCaret.top = CaretInfo->Pos.y;
|
||||
SafeGui.rcCaret.right = SafeGui.rcCaret.left + CaretInfo->Size.cx;
|
||||
SafeGui.rcCaret.bottom = SafeGui.rcCaret.top + CaretInfo->Size.cy;
|
||||
|
||||
|
||||
if(idThread)
|
||||
ObDereferenceObject(Thread);
|
||||
|
||||
|
||||
Status = MmCopyToCaller(lpgui, &SafeGui, sizeof(GUITHREADINFO));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -1263,20 +1263,20 @@ NtUserGetGuiResources(
|
||||
PW32PROCESS W32Process;
|
||||
NTSTATUS Status;
|
||||
DWORD Ret = 0;
|
||||
|
||||
|
||||
Status = ObReferenceObjectByHandle(hProcess,
|
||||
PROCESS_QUERY_INFORMATION,
|
||||
PsProcessType,
|
||||
ExGetPreviousMode(),
|
||||
(PVOID*)&Process,
|
||||
NULL);
|
||||
|
||||
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
W32Process = (PW32PROCESS)Process->Win32Process;
|
||||
if(!W32Process)
|
||||
{
|
||||
@@ -1284,7 +1284,7 @@ NtUserGetGuiResources(
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
switch(uiFlags)
|
||||
{
|
||||
case GR_GDIOBJECTS:
|
||||
@@ -1303,7 +1303,7 @@ NtUserGetGuiResources(
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ObDereferenceObject(Process);
|
||||
|
||||
return Ret;
|
||||
@@ -1315,21 +1315,21 @@ IntSafeCopyUnicodeString(PUNICODE_STRING Dest,
|
||||
{
|
||||
NTSTATUS Status;
|
||||
PWSTR Src;
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(Dest, Source, sizeof(UNICODE_STRING));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
if(Dest->Length > 0x4000)
|
||||
{
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
|
||||
Src = Dest->Buffer;
|
||||
Dest->Buffer = NULL;
|
||||
|
||||
|
||||
if(Dest->Length > 0 && Src)
|
||||
{
|
||||
Dest->MaximumLength = Dest->Length;
|
||||
@@ -1338,7 +1338,7 @@ IntSafeCopyUnicodeString(PUNICODE_STRING Dest,
|
||||
{
|
||||
return STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(Dest->Buffer, Src, Dest->Length);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -1346,11 +1346,11 @@ IntSafeCopyUnicodeString(PUNICODE_STRING Dest,
|
||||
Dest->Buffer = NULL;
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* string is empty */
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
@@ -1361,21 +1361,21 @@ IntSafeCopyUnicodeStringTerminateNULL(PUNICODE_STRING Dest,
|
||||
{
|
||||
NTSTATUS Status;
|
||||
PWSTR Src;
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(Dest, Source, sizeof(UNICODE_STRING));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
if(Dest->Length > 0x4000)
|
||||
{
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
|
||||
Src = Dest->Buffer;
|
||||
Dest->Buffer = NULL;
|
||||
|
||||
|
||||
if(Dest->Length > 0 && Src)
|
||||
{
|
||||
Dest->MaximumLength = Dest->Length + sizeof(WCHAR);
|
||||
@@ -1384,7 +1384,7 @@ IntSafeCopyUnicodeStringTerminateNULL(PUNICODE_STRING Dest,
|
||||
{
|
||||
return STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(Dest->Buffer, Src, Dest->Length);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -1392,14 +1392,14 @@ IntSafeCopyUnicodeStringTerminateNULL(PUNICODE_STRING Dest,
|
||||
Dest->Buffer = NULL;
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/* make sure the string is null-terminated */
|
||||
Src = (PWSTR)((PBYTE)Dest->Buffer + Dest->Length);
|
||||
*Src = L'\0';
|
||||
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* string is empty */
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -684,7 +684,7 @@ NtUserGetMonitorInfo(
|
||||
INT len = Monitor->DeviceName.Length;
|
||||
if (len >= CCHDEVICENAME * sizeof (WCHAR))
|
||||
len = (CCHDEVICENAME - 1) * sizeof (WCHAR);
|
||||
|
||||
|
||||
memcpy(MonitorInfo.szDevice, Monitor->DeviceName.Buffer, len);
|
||||
memcpy(MonitorInfo.szDevice + (len / sizeof (WCHAR)), &nul, sizeof (WCHAR));
|
||||
}
|
||||
@@ -881,7 +881,7 @@ NtUserMonitorFromWindow(
|
||||
PWINDOW_OBJECT Window;
|
||||
HMONITOR hMonitor = NULL;
|
||||
RECT Rect;
|
||||
|
||||
|
||||
Window = IntGetWindowObject(hWnd);
|
||||
if (Window == NULL)
|
||||
{
|
||||
|
||||
@@ -163,7 +163,7 @@ MsqInsertSystemMessage(MSG* Msg)
|
||||
LARGE_INTEGER LargeTickCount;
|
||||
KIRQL OldIrql;
|
||||
ULONG mmov = (ULONG)-1;
|
||||
|
||||
|
||||
KeQueryTickCount(&LargeTickCount);
|
||||
Msg->time = LargeTickCount.u.LowPart;
|
||||
|
||||
@@ -211,24 +211,24 @@ MsqIsDblClk(LPMSG Msg, BOOL Remove)
|
||||
PSYSTEM_CURSORINFO CurInfo;
|
||||
LONG dX, dY;
|
||||
BOOL Res;
|
||||
|
||||
|
||||
if (PsGetWin32Thread()->Desktop == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
|
||||
|
||||
|
||||
CurInfo = IntGetSysCursorInfo(WinStaObject);
|
||||
Res = (Msg->hwnd == (HWND)CurInfo->LastClkWnd) &&
|
||||
Res = (Msg->hwnd == (HWND)CurInfo->LastClkWnd) &&
|
||||
((Msg->time - CurInfo->LastBtnDown) < CurInfo->DblClickSpeed);
|
||||
if(Res)
|
||||
{
|
||||
|
||||
|
||||
dX = CurInfo->LastBtnDownX - Msg->pt.x;
|
||||
dY = CurInfo->LastBtnDownY - Msg->pt.y;
|
||||
if(dX < 0) dX = -dX;
|
||||
if(dY < 0) dY = -dY;
|
||||
|
||||
|
||||
Res = (dX <= CurInfo->DblClickWidth) &&
|
||||
(dY <= CurInfo->DblClickHeight);
|
||||
}
|
||||
@@ -250,19 +250,19 @@ MsqIsDblClk(LPMSG Msg, BOOL Remove)
|
||||
CurInfo->LastBtnDown = Msg->time;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return Res;
|
||||
}
|
||||
|
||||
BOOL STATIC STDCALL
|
||||
MsqTranslateMouseMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND hWnd, UINT FilterLow, UINT FilterHigh,
|
||||
PUSER_MESSAGE Message, BOOL Remove, PBOOL Freed,
|
||||
PUSER_MESSAGE Message, BOOL Remove, PBOOL Freed,
|
||||
PWINDOW_OBJECT ScopeWin, PPOINT ScreenPoint, BOOL FromGlobalQueue)
|
||||
{
|
||||
USHORT Msg = Message->Msg.message;
|
||||
PWINDOW_OBJECT Window = NULL;
|
||||
HWND CaptureWin;
|
||||
|
||||
|
||||
CaptureWin = IntGetCaptureWindow();
|
||||
if (CaptureWin == NULL)
|
||||
{
|
||||
@@ -301,7 +301,7 @@ MsqTranslateMouseMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND hWnd, UINT Filte
|
||||
*Freed = TRUE;
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
|
||||
if (Window->MessageQueue != MessageQueue)
|
||||
{
|
||||
if (! FromGlobalQueue)
|
||||
@@ -314,7 +314,7 @@ MsqTranslateMouseMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND hWnd, UINT Filte
|
||||
* old queue. Note that we're already holding the lock mutexes of the
|
||||
* old queue */
|
||||
RemoveEntryList(&Message->ListEntry);
|
||||
|
||||
|
||||
/* remove the pointer for the current WM_MOUSEMOVE message in case we
|
||||
just removed it */
|
||||
if(MessageQueue->MouseMoveMsg == Message)
|
||||
@@ -322,7 +322,7 @@ MsqTranslateMouseMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND hWnd, UINT Filte
|
||||
MessageQueue->MouseMoveMsg = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* lock the destination message queue, so we don't get in trouble with other
|
||||
threads, messing with it at the same time */
|
||||
IntLockHardwareMessageQueue(Window->MessageQueue);
|
||||
@@ -353,21 +353,21 @@ MsqTranslateMouseMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND hWnd, UINT Filte
|
||||
KeSetEvent(Window->MessageQueue->NewMessages, IO_NO_INCREMENT, FALSE);
|
||||
}
|
||||
IntUnLockHardwareMessageQueue(Window->MessageQueue);
|
||||
|
||||
|
||||
*Freed = FALSE;
|
||||
IntReleaseWindowObject(Window);
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
|
||||
/* From here on, we're in the same message queue as the caller! */
|
||||
|
||||
|
||||
*ScreenPoint = Message->Msg.pt;
|
||||
|
||||
|
||||
if((hWnd != NULL && Window->Self != hWnd) ||
|
||||
((FilterLow != 0 || FilterLow != 0) && (Msg < FilterLow || Msg > FilterHigh)))
|
||||
{
|
||||
/* Reject the message because it doesn't match the filter */
|
||||
|
||||
|
||||
if(FromGlobalQueue)
|
||||
{
|
||||
/* Lock the message queue so no other thread can mess with it.
|
||||
@@ -379,7 +379,7 @@ MsqTranslateMouseMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND hWnd, UINT Filte
|
||||
InsertTailList(&Window->MessageQueue->HardwareMessagesListHead,
|
||||
&Message->ListEntry);
|
||||
}
|
||||
|
||||
|
||||
if (Message->Msg.message == WM_MOUSEMOVE)
|
||||
{
|
||||
if(Window->MessageQueue->MouseMoveMsg &&
|
||||
@@ -397,17 +397,17 @@ MsqTranslateMouseMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND hWnd, UINT Filte
|
||||
{
|
||||
IntUnLockHardwareMessageQueue(Window->MessageQueue);
|
||||
}
|
||||
|
||||
|
||||
IntReleaseWindowObject(Window);
|
||||
*Freed = FALSE;
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
|
||||
/* FIXME - only assign if removing? */
|
||||
Message->Msg.hwnd = Window->Self;
|
||||
Message->Msg.message = Msg;
|
||||
Message->Msg.lParam = MAKELONG(Message->Msg.pt.x, Message->Msg.pt.y);
|
||||
|
||||
|
||||
/* remove the reference to the current WM_(NC)MOUSEMOVE message, if this message
|
||||
is it */
|
||||
if (Message->Msg.message == WM_MOUSEMOVE ||
|
||||
@@ -436,7 +436,7 @@ MsqTranslateMouseMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND hWnd, UINT Filte
|
||||
Window->MessageQueue->MouseMoveMsg = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
IntReleaseWindowObject(Window);
|
||||
*Freed = FALSE;
|
||||
return(TRUE);
|
||||
@@ -455,8 +455,8 @@ MsqPeekHardwareMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND hWnd,
|
||||
PVOID WaitObjects[2];
|
||||
NTSTATUS WaitStatus;
|
||||
|
||||
if( !IntGetScreenDC() ||
|
||||
PsGetWin32Thread()->MessageQueue == W32kGetPrimitiveMessageQueue() )
|
||||
if( !IntGetScreenDC() ||
|
||||
PsGetWin32Thread()->MessageQueue == W32kGetPrimitiveMessageQueue() )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
@@ -488,7 +488,7 @@ MsqPeekHardwareMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND hWnd,
|
||||
Current->Msg.message <= WM_MOUSELAST)
|
||||
{
|
||||
Accept = MsqTranslateMouseMessage(MessageQueue, hWnd, FilterLow, FilterHigh,
|
||||
Current, Remove, &Freed,
|
||||
Current, Remove, &Freed,
|
||||
DesktopWindow, &ScreenPoint, FALSE);
|
||||
if (Accept)
|
||||
{
|
||||
@@ -553,7 +553,7 @@ MsqPeekHardwareMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND hWnd,
|
||||
const ULONG ActiveStamp = HardwareMessageQueueStamp;
|
||||
/* Translate the message. */
|
||||
Accept = MsqTranslateMouseMessage(MessageQueue, hWnd, FilterLow, FilterHigh,
|
||||
Current, Remove, &Freed,
|
||||
Current, Remove, &Freed,
|
||||
DesktopWindow, &ScreenPoint, TRUE);
|
||||
if (Accept)
|
||||
{
|
||||
@@ -631,7 +631,7 @@ MsqPostKeyboardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
Msg.time = LargeTickCount.u.LowPart;
|
||||
/* We can't get the Msg.pt point here since we don't know thread
|
||||
(and thus the window station) the message will end up in yet. */
|
||||
|
||||
|
||||
FocusMessageQueue = IntGetFocusMessageQueue();
|
||||
if( !IntGetScreenDC() ) {
|
||||
/* FIXME: What to do about Msg.pt here? */
|
||||
@@ -644,7 +644,7 @@ MsqPostKeyboardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
DPRINT("No focus message queue\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (FocusMessageQueue->FocusWindow != (HWND)0)
|
||||
{
|
||||
Msg.hwnd = FocusMessageQueue->FocusWindow;
|
||||
@@ -754,7 +754,7 @@ MsqDispatchSentNotifyMessages(PUSER_MESSAGE_QUEUE MessageQueue)
|
||||
Message->Msg,
|
||||
Message->CompletionCallbackContext,
|
||||
Message->Result);
|
||||
|
||||
|
||||
IntLockMessageQueue(MessageQueue);
|
||||
}
|
||||
IntUnLockMessageQueue(MessageQueue);
|
||||
@@ -781,24 +781,24 @@ MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue)
|
||||
IntUnLockMessageQueue(MessageQueue);
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
|
||||
/* remove it from the list of pending messages */
|
||||
Entry = RemoveHeadList(&MessageQueue->SentMessagesListHead);
|
||||
Message = CONTAINING_RECORD(Entry, USER_SENT_MESSAGE, ListEntry);
|
||||
|
||||
|
||||
/* insert it to the list of messages that are currently dispatched by this
|
||||
message queue */
|
||||
InsertTailList(&MessageQueue->LocalDispatchingMessagesHead,
|
||||
&Message->ListEntry);
|
||||
|
||||
|
||||
IntUnLockMessageQueue(MessageQueue);
|
||||
|
||||
|
||||
/* Call the window procedure. */
|
||||
Result = IntSendMessage(Message->Msg.hwnd,
|
||||
Message->Msg.message,
|
||||
Message->Msg.wParam,
|
||||
Message->Msg.lParam);
|
||||
|
||||
|
||||
/* remove the message from the local dispatching list, because it doesn't need
|
||||
to be cleaned up on thread termination anymore */
|
||||
IntLockMessageQueue(MessageQueue);
|
||||
@@ -807,7 +807,7 @@ MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue)
|
||||
|
||||
/* remove the message from the dispatching list, so lock the sender's message queue */
|
||||
IntLockMessageQueue(Message->SenderQueue);
|
||||
|
||||
|
||||
SenderReturned = (Message->DispatchingListEntry.Flink == NULL);
|
||||
if(!SenderReturned)
|
||||
{
|
||||
@@ -816,7 +816,7 @@ MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue)
|
||||
}
|
||||
/* still keep the sender's message queue locked, so the sender can't exit the
|
||||
MsqSendMessage() function (if timed out) */
|
||||
|
||||
|
||||
/* Let the sender know the result. */
|
||||
if (Message->Result != NULL)
|
||||
{
|
||||
@@ -828,7 +828,7 @@ MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue)
|
||||
{
|
||||
KeSetEvent(Message->CompletionEvent, IO_NO_INCREMENT, FALSE);
|
||||
}
|
||||
|
||||
|
||||
/* unlock the sender's message queue, the safe operation is done */
|
||||
IntUnLockMessageQueue(Message->SenderQueue);
|
||||
|
||||
@@ -856,7 +856,7 @@ Notified:
|
||||
/* dereference both sender and our queue */
|
||||
IntDereferenceMessageQueue(MessageQueue);
|
||||
IntDereferenceMessageQueue(Message->SenderQueue);
|
||||
|
||||
|
||||
/* free the message */
|
||||
ExFreePool(Message);
|
||||
return(TRUE);
|
||||
@@ -870,14 +870,14 @@ MsqRemoveWindowMessagesFromQueue(PVOID pWindow)
|
||||
PUSER_MESSAGE_QUEUE MessageQueue;
|
||||
PLIST_ENTRY CurrentEntry, ListHead;
|
||||
PWINDOW_OBJECT Window = pWindow;
|
||||
|
||||
|
||||
ASSERT(Window);
|
||||
|
||||
|
||||
MessageQueue = Window->MessageQueue;
|
||||
ASSERT(MessageQueue);
|
||||
|
||||
|
||||
IntLockMessageQueue(MessageQueue);
|
||||
|
||||
|
||||
/* remove the posted messages for this window */
|
||||
CurrentEntry = MessageQueue->PostedMessagesListHead.Flink;
|
||||
ListHead = &MessageQueue->PostedMessagesListHead;
|
||||
@@ -929,7 +929,7 @@ MsqRemoveWindowMessagesFromQueue(PVOID pWindow)
|
||||
|
||||
/* free the message */
|
||||
ExFreePool(SentMessage);
|
||||
|
||||
|
||||
CurrentEntry = MessageQueue->SentMessagesListHead.Flink;
|
||||
}
|
||||
else
|
||||
@@ -972,16 +972,16 @@ MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue,
|
||||
DPRINT1("MsqSendMessage(): Not enough memory to allocate a message");
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
|
||||
KeInitializeEvent(&CompletionEvent, NotificationEvent, FALSE);
|
||||
|
||||
|
||||
ThreadQueue = PsGetWin32Thread()->MessageQueue;
|
||||
ASSERT(ThreadQueue != MessageQueue);
|
||||
|
||||
|
||||
Timeout.QuadPart = (LONGLONG) uTimeout * (LONGLONG) -10000;
|
||||
|
||||
|
||||
/* FIXME - increase reference counter of sender's message queue here */
|
||||
|
||||
|
||||
Result = 0;
|
||||
Message->Msg.hwnd = Wnd;
|
||||
Message->Msg.message = Msg;
|
||||
@@ -992,30 +992,30 @@ MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue,
|
||||
Message->SenderQueue = ThreadQueue;
|
||||
IntReferenceMessageQueue(ThreadQueue);
|
||||
Message->CompletionCallback = NULL;
|
||||
|
||||
|
||||
IntReferenceMessageQueue(MessageQueue);
|
||||
|
||||
|
||||
/* add it to the list of pending messages */
|
||||
IntLockMessageQueue(ThreadQueue);
|
||||
InsertTailList(&ThreadQueue->DispatchingMessagesHead, &Message->DispatchingListEntry);
|
||||
IntUnLockMessageQueue(ThreadQueue);
|
||||
|
||||
|
||||
/* queue it in the destination's message queue */
|
||||
IntLockMessageQueue(MessageQueue);
|
||||
InsertTailList(&MessageQueue->SentMessagesListHead, &Message->ListEntry);
|
||||
IntUnLockMessageQueue(MessageQueue);
|
||||
|
||||
|
||||
MessageQueue->QueueBits |= QS_SENDMESSAGE;
|
||||
MessageQueue->ChangedBits |= QS_SENDMESSAGE;
|
||||
if (MessageQueue->WakeMask & QS_SENDMESSAGE)
|
||||
KeSetEvent(MessageQueue->NewMessages, IO_NO_INCREMENT, FALSE);
|
||||
|
||||
|
||||
/* we can't access the Message anymore since it could have already been deleted! */
|
||||
|
||||
|
||||
if(Block)
|
||||
{
|
||||
/* don't process messages sent to the thread */
|
||||
WaitStatus = KeWaitForSingleObject(&CompletionEvent, UserRequest, UserMode,
|
||||
WaitStatus = KeWaitForSingleObject(&CompletionEvent, UserRequest, UserMode,
|
||||
FALSE, (uTimeout ? &Timeout : NULL));
|
||||
if(WaitStatus == STATUS_TIMEOUT)
|
||||
{
|
||||
@@ -1037,7 +1037,7 @@ MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue,
|
||||
Entry = Entry->Flink;
|
||||
}
|
||||
IntUnLockMessageQueue(MessageQueue);
|
||||
|
||||
|
||||
/* remove from the local dispatching list so the other thread knows,
|
||||
it can't pass a result and it must not set the completion event anymore */
|
||||
IntLockMessageQueue(ThreadQueue);
|
||||
@@ -1059,7 +1059,7 @@ MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue,
|
||||
Entry = Entry->Flink;
|
||||
}
|
||||
IntUnLockMessageQueue(ThreadQueue);
|
||||
|
||||
|
||||
DPRINT("MsqSendMessage (blocked) timed out\n");
|
||||
}
|
||||
while (MsqDispatchOneSentMessage(ThreadQueue));
|
||||
@@ -1067,7 +1067,7 @@ MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue,
|
||||
else
|
||||
{
|
||||
PVOID WaitObjects[2];
|
||||
|
||||
|
||||
WaitObjects[0] = &CompletionEvent;
|
||||
WaitObjects[1] = ThreadQueue->NewMessages;
|
||||
do
|
||||
@@ -1094,7 +1094,7 @@ MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue,
|
||||
Entry = Entry->Flink;
|
||||
}
|
||||
IntUnLockMessageQueue(MessageQueue);
|
||||
|
||||
|
||||
/* remove from the local dispatching list so the other thread knows,
|
||||
it can't pass a result and it must not set the completion event anymore */
|
||||
IntLockMessageQueue(ThreadQueue);
|
||||
@@ -1116,7 +1116,7 @@ MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue,
|
||||
Entry = Entry->Flink;
|
||||
}
|
||||
IntUnLockMessageQueue(ThreadQueue);
|
||||
|
||||
|
||||
DPRINT("MsqSendMessage timed out\n");
|
||||
break;
|
||||
}
|
||||
@@ -1124,10 +1124,10 @@ MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue,
|
||||
}
|
||||
while (NT_SUCCESS(WaitStatus) && STATUS_WAIT_0 != WaitStatus);
|
||||
}
|
||||
|
||||
|
||||
if(WaitStatus != STATUS_TIMEOUT)
|
||||
*uResult = (STATUS_WAIT_0 == WaitStatus ? Result : -1);
|
||||
|
||||
|
||||
return WaitStatus;
|
||||
}
|
||||
|
||||
@@ -1136,7 +1136,7 @@ MsqPostMessage(PUSER_MESSAGE_QUEUE MessageQueue, MSG* Msg, BOOLEAN FreeLParam,
|
||||
DWORD MessageBits)
|
||||
{
|
||||
PUSER_MESSAGE Message;
|
||||
|
||||
|
||||
if(!(Message = MsqCreateMessage(Msg, FreeLParam)))
|
||||
{
|
||||
return;
|
||||
@@ -1241,7 +1241,7 @@ BOOL FASTCALL
|
||||
MsqIsHung(PUSER_MESSAGE_QUEUE MessageQueue)
|
||||
{
|
||||
LARGE_INTEGER LargeTickCount;
|
||||
|
||||
|
||||
KeQueryTickCount(&LargeTickCount);
|
||||
return ((LargeTickCount.u.LowPart - MessageQueue->LastMsgRead) > MSQ_HUNG);
|
||||
}
|
||||
@@ -1251,7 +1251,7 @@ MsqInitializeMessageQueue(struct _ETHREAD *Thread, PUSER_MESSAGE_QUEUE MessageQu
|
||||
{
|
||||
LARGE_INTEGER LargeTickCount;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
MessageQueue->Thread = Thread;
|
||||
MessageQueue->CaretInfo = (PTHRDCARETINFO)(MessageQueue + 1);
|
||||
InitializeListHead(&MessageQueue->PostedMessagesListHead);
|
||||
@@ -1281,7 +1281,7 @@ MsqInitializeMessageQueue(struct _ETHREAD *Thread, PUSER_MESSAGE_QUEUE MessageQu
|
||||
|
||||
Status = ObReferenceObjectByHandle(MessageQueue->NewMessagesHandle, 0,
|
||||
ExEventObjectType, KernelMode,
|
||||
(PVOID*)&MessageQueue->NewMessages, NULL);
|
||||
(PVOID*)&MessageQueue->NewMessages, NULL);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
ZwClose(MessageQueue->NewMessagesHandle);
|
||||
@@ -1299,9 +1299,9 @@ MsqCleanupMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue)
|
||||
PUSER_MESSAGE CurrentMessage;
|
||||
PTIMER_ENTRY CurrentTimer;
|
||||
PUSER_SENT_MESSAGE CurrentSentMessage;
|
||||
|
||||
|
||||
IntLockMessageQueue(MessageQueue);
|
||||
|
||||
|
||||
/* cleanup posted messages */
|
||||
while (!IsListEmpty(&MessageQueue->PostedMessagesListHead))
|
||||
{
|
||||
@@ -1310,38 +1310,38 @@ MsqCleanupMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue)
|
||||
ListEntry);
|
||||
MsqDestroyMessage(CurrentMessage);
|
||||
}
|
||||
|
||||
|
||||
/* remove the messages that have not yet been dispatched */
|
||||
while (!IsListEmpty(&MessageQueue->SentMessagesListHead))
|
||||
{
|
||||
CurrentEntry = RemoveHeadList(&MessageQueue->SentMessagesListHead);
|
||||
CurrentSentMessage = CONTAINING_RECORD(CurrentEntry, USER_SENT_MESSAGE,
|
||||
CurrentSentMessage = CONTAINING_RECORD(CurrentEntry, USER_SENT_MESSAGE,
|
||||
ListEntry);
|
||||
|
||||
|
||||
IntLockMessageQueue(CurrentSentMessage->SenderQueue);
|
||||
DPRINT("Notify the sender and remove a message from the queue that had not been dispatched\n");
|
||||
|
||||
|
||||
/* remove the message from the dispatching list */
|
||||
if(CurrentSentMessage->DispatchingListEntry.Flink != NULL)
|
||||
{
|
||||
RemoveEntryList(&CurrentSentMessage->DispatchingListEntry);
|
||||
}
|
||||
|
||||
|
||||
/* wake the sender's thread */
|
||||
if (CurrentSentMessage->CompletionEvent != NULL)
|
||||
{
|
||||
KeSetEvent(CurrentSentMessage->CompletionEvent, IO_NO_INCREMENT, FALSE);
|
||||
}
|
||||
IntUnLockMessageQueue(CurrentSentMessage->SenderQueue);
|
||||
|
||||
|
||||
/* dereference our and the sender's message queue */
|
||||
IntDereferenceMessageQueue(MessageQueue);
|
||||
IntDereferenceMessageQueue(CurrentSentMessage->SenderQueue);
|
||||
|
||||
|
||||
/* free the message */
|
||||
ExFreePool(CurrentSentMessage);
|
||||
}
|
||||
|
||||
|
||||
/* cleanup timers */
|
||||
while (! IsListEmpty(&MessageQueue->TimerListHead))
|
||||
{
|
||||
@@ -1349,7 +1349,7 @@ MsqCleanupMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue)
|
||||
CurrentTimer = CONTAINING_RECORD(CurrentEntry, TIMER_ENTRY, ListEntry);
|
||||
ExFreeToPagedLookasideList(&TimerLookasideList, CurrentTimer);
|
||||
}
|
||||
|
||||
|
||||
/* notify senders of dispatching messages. This needs to be cleaned up if e.g.
|
||||
ExitThread() was called in a SendMessage() umode callback */
|
||||
while (!IsListEmpty(&MessageQueue->LocalDispatchingMessagesHead))
|
||||
@@ -1357,19 +1357,19 @@ MsqCleanupMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue)
|
||||
CurrentEntry = RemoveHeadList(&MessageQueue->LocalDispatchingMessagesHead);
|
||||
CurrentSentMessage = CONTAINING_RECORD(CurrentEntry, USER_SENT_MESSAGE,
|
||||
ListEntry);
|
||||
|
||||
|
||||
DPRINT("Notify the sender, the thread has been terminated while dispatching a message!\n");
|
||||
|
||||
|
||||
/* wake the sender's thread */
|
||||
if (CurrentSentMessage->CompletionEvent != NULL)
|
||||
{
|
||||
KeSetEvent(CurrentSentMessage->CompletionEvent, IO_NO_INCREMENT, FALSE);
|
||||
}
|
||||
|
||||
|
||||
/* dereference our and the sender's message queue */
|
||||
IntDereferenceMessageQueue(MessageQueue);
|
||||
IntDereferenceMessageQueue(CurrentSentMessage->SenderQueue);
|
||||
|
||||
|
||||
/* free the message */
|
||||
ExFreePool(CurrentSentMessage);
|
||||
}
|
||||
@@ -1386,7 +1386,7 @@ MsqCleanupMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue)
|
||||
/* do NOT dereference our message queue as it might get attempted to be
|
||||
locked later */
|
||||
}
|
||||
|
||||
|
||||
IntUnLockMessageQueue(MessageQueue);
|
||||
}
|
||||
|
||||
@@ -1398,7 +1398,7 @@ MsqCreateMessageQueue(struct _ETHREAD *Thread)
|
||||
MessageQueue = (PUSER_MESSAGE_QUEUE)ExAllocatePoolWithTag(PagedPool,
|
||||
sizeof(USER_MESSAGE_QUEUE) + sizeof(THRDCARETINFO),
|
||||
TAG_MSGQ);
|
||||
|
||||
|
||||
if (!MessageQueue)
|
||||
{
|
||||
return NULL;
|
||||
@@ -1428,7 +1428,7 @@ MsqDestroyMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue)
|
||||
InterlockedExchange((LONG*)&desk->ActiveMessageQueue, 0);
|
||||
IntDereferenceMessageQueue(MessageQueue);
|
||||
}
|
||||
|
||||
|
||||
/* if this is the primitive message queue, deregister it */
|
||||
if (MessageQueue == W32kGetPrimitiveMessageQueue())
|
||||
W32kUnregisterPrimitiveMessageQueue();
|
||||
@@ -1457,16 +1457,16 @@ MsqSetMessageExtraInfo(LPARAM lParam)
|
||||
{
|
||||
LPARAM Ret;
|
||||
PUSER_MESSAGE_QUEUE MessageQueue;
|
||||
|
||||
|
||||
MessageQueue = PsGetWin32Thread()->MessageQueue;
|
||||
if(!MessageQueue)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Ret = MessageQueue->ExtraInfo;
|
||||
MessageQueue->ExtraInfo = lParam;
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -1474,13 +1474,13 @@ LPARAM FASTCALL
|
||||
MsqGetMessageExtraInfo(VOID)
|
||||
{
|
||||
PUSER_MESSAGE_QUEUE MessageQueue;
|
||||
|
||||
|
||||
MessageQueue = PsGetWin32Thread()->MessageQueue;
|
||||
if(!MessageQueue)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
return MessageQueue->ExtraInfo;
|
||||
}
|
||||
|
||||
@@ -1488,7 +1488,7 @@ HWND FASTCALL
|
||||
MsqSetStateWindow(PUSER_MESSAGE_QUEUE MessageQueue, ULONG Type, HWND hWnd)
|
||||
{
|
||||
HWND Prev;
|
||||
|
||||
|
||||
switch(Type)
|
||||
{
|
||||
case MSQ_STATE_CAPTURE:
|
||||
@@ -1517,7 +1517,7 @@ MsqSetStateWindow(PUSER_MESSAGE_QUEUE MessageQueue, ULONG Type, HWND hWnd)
|
||||
MessageQueue->CaretInfo->hWnd = hWnd;
|
||||
return Prev;
|
||||
}
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1570,15 +1570,15 @@ RemoveTimer(PUSER_MESSAGE_QUEUE MessageQueue, HWND Wnd, UINT_PTR IDEvent, UINT M
|
||||
{
|
||||
PTIMER_ENTRY Timer;
|
||||
PLIST_ENTRY EnumEntry;
|
||||
|
||||
|
||||
/* Remove timer if already in the queue */
|
||||
EnumEntry = MessageQueue->TimerListHead.Flink;
|
||||
while (EnumEntry != &MessageQueue->TimerListHead)
|
||||
{
|
||||
Timer = CONTAINING_RECORD(EnumEntry, TIMER_ENTRY, ListEntry);
|
||||
EnumEntry = EnumEntry->Flink;
|
||||
|
||||
if (Timer->Wnd == Wnd &&
|
||||
|
||||
if (Timer->Wnd == Wnd &&
|
||||
Timer->IDEvent == IDEvent &&
|
||||
Timer->Msg == Msg)
|
||||
{
|
||||
@@ -1586,7 +1586,7 @@ RemoveTimer(PUSER_MESSAGE_QUEUE MessageQueue, HWND Wnd, UINT_PTR IDEvent, UINT M
|
||||
return Timer;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1630,7 +1630,7 @@ MsqSetTimer(PUSER_MESSAGE_QUEUE MessageQueue, HWND Wnd,
|
||||
DPRINT("Insert timer now %I64d expiry %I64d\n", CurrentTime.QuadPart,
|
||||
Timer->ExpiryTime.QuadPart);
|
||||
|
||||
InsertTimer(MessageQueue, Timer);
|
||||
InsertTimer(MessageQueue, Timer);
|
||||
|
||||
#ifndef NDEBUG
|
||||
DumpTimerList(MessageQueue);
|
||||
|
||||
@@ -416,7 +416,7 @@ BOOL FASTCALL
|
||||
IntIsWindowDrawable(PWINDOW_OBJECT Window)
|
||||
{
|
||||
PWINDOW_OBJECT Old, Wnd = Window;
|
||||
|
||||
|
||||
IntReferenceWindowObject(Wnd);
|
||||
do
|
||||
{
|
||||
@@ -471,14 +471,14 @@ IntRedrawWindow(PWINDOW_OBJECT Window, const RECT* UpdateRect, HRGN UpdateRgn,
|
||||
{
|
||||
hRgn = NtGdiCreateRectRgn(0, 0, 0, 0);
|
||||
NtGdiCombineRgn(hRgn, UpdateRgn, NULL, RGN_COPY);
|
||||
NtGdiOffsetRgn(hRgn,
|
||||
NtGdiOffsetRgn(hRgn,
|
||||
Window->ClientRect.left - Window->WindowRect.left,
|
||||
Window->ClientRect.top - Window->WindowRect.top);
|
||||
} else
|
||||
if (UpdateRect != NULL)
|
||||
{
|
||||
hRgn = UnsafeIntCreateRectRgnIndirect((RECT *)UpdateRect);
|
||||
NtGdiOffsetRgn(hRgn,
|
||||
NtGdiOffsetRgn(hRgn,
|
||||
Window->ClientRect.left - Window->WindowRect.left,
|
||||
Window->ClientRect.top - Window->WindowRect.top);
|
||||
} else
|
||||
@@ -486,14 +486,14 @@ IntRedrawWindow(PWINDOW_OBJECT Window, const RECT* UpdateRect, HRGN UpdateRgn,
|
||||
(Flags & (RDW_VALIDATE | RDW_NOFRAME)) == (RDW_VALIDATE | RDW_NOFRAME))
|
||||
{
|
||||
hRgn = UnsafeIntCreateRectRgnIndirect(&Window->WindowRect);
|
||||
NtGdiOffsetRgn(hRgn,
|
||||
NtGdiOffsetRgn(hRgn,
|
||||
-Window->WindowRect.left,
|
||||
-Window->WindowRect.top);
|
||||
}
|
||||
else
|
||||
{
|
||||
hRgn = UnsafeIntCreateRectRgnIndirect(&Window->ClientRect);
|
||||
NtGdiOffsetRgn(hRgn,
|
||||
NtGdiOffsetRgn(hRgn,
|
||||
-Window->WindowRect.left,
|
||||
-Window->WindowRect.top);
|
||||
}
|
||||
@@ -552,7 +552,7 @@ IntFindWindowToRepaint(HWND hWnd, PW32THREAD Thread)
|
||||
if (Window == NULL)
|
||||
return NULL;
|
||||
|
||||
if (IntIsWindowDirty(Window) &&
|
||||
if (IntIsWindowDirty(Window) &&
|
||||
IntWndBelongsToThread(Window, Thread))
|
||||
{
|
||||
IntReleaseWindowObject(Window);
|
||||
@@ -654,7 +654,7 @@ IntFixCaret(HWND hWnd, LPRECT lprc, UINT flags)
|
||||
{
|
||||
POINT pt, FromOffset, ToOffset, Offset;
|
||||
RECT rcCaret;
|
||||
|
||||
|
||||
pt.x = CaretInfo->Pos.x;
|
||||
pt.y = CaretInfo->Pos.y;
|
||||
IntGetClientOrigin(hWndCaret, &FromOffset);
|
||||
@@ -848,7 +848,7 @@ NtUserValidateRgn(HWND hWnd, HRGN hRgn)
|
||||
* Status
|
||||
* @implemented
|
||||
*/
|
||||
|
||||
|
||||
BOOL STDCALL
|
||||
NtUserUpdateWindow(HWND hWnd)
|
||||
{
|
||||
@@ -873,7 +873,7 @@ NtUserGetUpdateRgn(HWND hWnd, HRGN hRgn, BOOL bErase)
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
|
||||
IntLockWindowUpdate(Window);
|
||||
if (Window->UpdateRegion == NULL)
|
||||
{
|
||||
@@ -895,7 +895,7 @@ NtUserGetUpdateRgn(HWND hWnd, HRGN hRgn, BOOL bErase)
|
||||
{
|
||||
NtUserRedrawWindow(hWnd, NULL, NULL, RDW_ERASENOW | RDW_NOCHILDREN);
|
||||
}
|
||||
|
||||
|
||||
return RegionType;
|
||||
}
|
||||
|
||||
@@ -921,7 +921,7 @@ NtUserGetUpdateRect(HWND hWnd, LPRECT UnsafeRect, BOOL bErase)
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
|
||||
IntLockWindowUpdate(Window);
|
||||
if (Window->UpdateRegion == NULL)
|
||||
{
|
||||
@@ -945,7 +945,7 @@ NtUserGetUpdateRect(HWND hWnd, LPRECT UnsafeRect, BOOL bErase)
|
||||
{
|
||||
NtUserRedrawWindow(hWnd, NULL, NULL, RDW_ERASENOW | RDW_NOCHILDREN);
|
||||
}
|
||||
|
||||
|
||||
if (UnsafeRect != NULL)
|
||||
{
|
||||
Status = MmCopyToCaller(UnsafeRect, &Rect, sizeof(RECT));
|
||||
@@ -1003,7 +1003,7 @@ NtUserRedrawWindow(HWND hWnd, CONST RECT *lprcUpdate, HRGN hrgnUpdate,
|
||||
IntReleaseWindowObject(Wnd);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
IntReleaseWindowObject(Wnd);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -1095,7 +1095,7 @@ NtUserScrollDC(HDC hDC, INT dx, INT dy, const RECT *lprcScroll,
|
||||
|
||||
NtGdiSetRectRgn(hRgn2, rDst.left, rDst.top, rDst.right, rDst.bottom);
|
||||
NtGdiCombineRgn(hRgn, hRgn, hRgn2, RGN_DIFF);
|
||||
|
||||
|
||||
NtGdiSetRectRgn(hRgn2, rClip.left, rClip.top, rClip.right, rClip.bottom);
|
||||
NtGdiCombineRgn(hRgn, hRgn, hRgn2, RGN_AND);
|
||||
|
||||
@@ -1144,7 +1144,7 @@ NtUserScrollWindowEx(HWND hWnd, INT dx, INT dy, const RECT *UnsafeRect,
|
||||
IntGetClientRect(Window, &rc);
|
||||
if (NULL != UnsafeRect)
|
||||
{
|
||||
Status = MmCopyFromCaller(&rect, UnsafeRect, sizeof(RECT));
|
||||
Status = MmCopyFromCaller(&rect, UnsafeRect, sizeof(RECT));
|
||||
if (! NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
@@ -1155,7 +1155,7 @@ NtUserScrollWindowEx(HWND hWnd, INT dx, INT dy, const RECT *UnsafeRect,
|
||||
|
||||
if (NULL != UnsafeClipRect)
|
||||
{
|
||||
Status = MmCopyFromCaller(&clipRect, UnsafeClipRect, sizeof(RECT));
|
||||
Status = MmCopyFromCaller(&clipRect, UnsafeClipRect, sizeof(RECT));
|
||||
if (! NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
@@ -1168,7 +1168,7 @@ NtUserScrollWindowEx(HWND hWnd, INT dx, INT dy, const RECT *UnsafeRect,
|
||||
|
||||
if (cliprc.right <= cliprc.left || cliprc.bottom <= cliprc.top ||
|
||||
(dx == 0 && dy == 0))
|
||||
{
|
||||
{
|
||||
return NULLREGION;
|
||||
}
|
||||
|
||||
@@ -1187,7 +1187,7 @@ NtUserScrollWindowEx(HWND hWnd, INT dx, INT dy, const RECT *UnsafeRect,
|
||||
NtUserReleaseDC(hWnd, hDC);
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* Take into account the fact that some damage may have occurred during
|
||||
* the scroll.
|
||||
*/
|
||||
@@ -1241,7 +1241,7 @@ NtUserScrollWindowEx(HWND hWnd, INT dx, INT dy, const RECT *UnsafeRect,
|
||||
|
||||
if (bOwnRgn && hrgnUpdate)
|
||||
NtGdiDeleteObject(hrgnUpdate);
|
||||
|
||||
|
||||
if (hwndCaret)
|
||||
{
|
||||
IntSetCaretPos(caretrc.left + dx, caretrc.top + dy);
|
||||
@@ -1249,7 +1249,7 @@ NtUserScrollWindowEx(HWND hWnd, INT dx, INT dy, const RECT *UnsafeRect,
|
||||
}
|
||||
|
||||
IntReleaseWindowObject(Window);
|
||||
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ IntGetProp(PWINDOW_OBJECT WindowObject, ATOM Atom)
|
||||
{
|
||||
PLIST_ENTRY ListEntry;
|
||||
PPROPERTY Property;
|
||||
|
||||
|
||||
ListEntry = WindowObject->PropListHead.Flink;
|
||||
while (ListEntry != &WindowObject->PropListHead)
|
||||
{
|
||||
@@ -72,12 +72,12 @@ NtUserBuildPropList(HWND hWnd,
|
||||
PROPLISTITEM listitem, *li;
|
||||
NTSTATUS Status;
|
||||
DWORD Cnt = 0;
|
||||
|
||||
|
||||
if (!(WindowObject = IntGetWindowObject(hWnd)))
|
||||
{
|
||||
return STATUS_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
|
||||
if(Buffer)
|
||||
{
|
||||
if(!BufferSize || (BufferSize % sizeof(PROPLISTITEM) != 0))
|
||||
@@ -85,10 +85,10 @@ NtUserBuildPropList(HWND hWnd,
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
|
||||
/* copy list */
|
||||
IntLockWindowProperties(WindowObject);
|
||||
|
||||
|
||||
li = (PROPLISTITEM *)Buffer;
|
||||
ListEntry = WindowObject->PropListHead.Flink;
|
||||
while((BufferSize >= sizeof(PROPLISTITEM)) && (ListEntry != &WindowObject->PropListHead))
|
||||
@@ -96,7 +96,7 @@ NtUserBuildPropList(HWND hWnd,
|
||||
Property = CONTAINING_RECORD(ListEntry, PROPERTY, PropListEntry);
|
||||
listitem.Atom = Property->Atom;
|
||||
listitem.Data = Property->Data;
|
||||
|
||||
|
||||
Status = MmCopyToCaller(li, &listitem, sizeof(PROPLISTITEM));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -104,13 +104,13 @@ NtUserBuildPropList(HWND hWnd,
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
BufferSize -= sizeof(PROPLISTITEM);
|
||||
Cnt++;
|
||||
li++;
|
||||
ListEntry = ListEntry->Flink;
|
||||
}
|
||||
|
||||
|
||||
IntUnLockWindowProperties(WindowObject);
|
||||
}
|
||||
else
|
||||
@@ -119,9 +119,9 @@ NtUserBuildPropList(HWND hWnd,
|
||||
Cnt = WindowObject->PropListItems * sizeof(PROPLISTITEM);
|
||||
IntUnLockWindowProperties(WindowObject);
|
||||
}
|
||||
|
||||
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
|
||||
|
||||
if(Count)
|
||||
{
|
||||
Status = MmCopyToCaller(Count, &Cnt, sizeof(DWORD));
|
||||
@@ -130,7 +130,7 @@ NtUserBuildPropList(HWND hWnd,
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -146,10 +146,10 @@ NtUserRemoveProp(HWND hWnd, ATOM Atom)
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
IntLockWindowProperties(WindowObject);
|
||||
Prop = IntGetProp(WindowObject, Atom);
|
||||
|
||||
|
||||
if (Prop == NULL)
|
||||
{
|
||||
IntUnLockWindowProperties(WindowObject);
|
||||
@@ -177,7 +177,7 @@ NtUserGetProp(HWND hWnd, ATOM Atom)
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
IntLockWindowProperties(WindowObject);
|
||||
Prop = IntGetProp(WindowObject, Atom);
|
||||
if (Prop != NULL)
|
||||
@@ -224,11 +224,11 @@ NtUserSetProp(HWND hWnd, ATOM Atom, HANDLE Data)
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
IntLockWindowProperties(WindowObject);
|
||||
ret = IntSetProp(WindowObject, Atom, Data);
|
||||
IntUnLockWindowProperties(WindowObject);
|
||||
|
||||
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
#define CHANGERGSTATE(item, status) \
|
||||
if(Info->rgstate[(item)] != (status)) \
|
||||
Chg = TRUE; \
|
||||
Info->rgstate[(item)] = (status);
|
||||
Info->rgstate[(item)] = (status);
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
@@ -111,7 +111,7 @@ IntCalculateThumb(PWINDOW_OBJECT Window, LONG idObject, PSCROLLBARINFO psbi, LPS
|
||||
{
|
||||
INT Thumb, ThumbBox, ThumbPos, cxy, mx;
|
||||
RECT ClientRect;
|
||||
|
||||
|
||||
switch(idObject)
|
||||
{
|
||||
case SB_HORZ:
|
||||
@@ -158,7 +158,7 @@ IntCalculateThumb(PWINDOW_OBJECT Window, LONG idObject, PSCROLLBARINFO psbi, LPS
|
||||
{
|
||||
ThumbBox = max(EngMulDiv(cxy, psi->nPage, psi->nMax - psi->nMin + 1), ThumbBox);
|
||||
}
|
||||
|
||||
|
||||
if(cxy > ThumbBox)
|
||||
{
|
||||
mx = psi->nMax - max(psi->nPage - 1, 0);
|
||||
@@ -167,7 +167,7 @@ IntCalculateThumb(PWINDOW_OBJECT Window, LONG idObject, PSCROLLBARINFO psbi, LPS
|
||||
else
|
||||
ThumbPos = Thumb + ThumbBox;
|
||||
}
|
||||
|
||||
|
||||
psbi->xyThumbTop = ThumbPos;
|
||||
psbi->xyThumbBottom = ThumbPos + ThumbBox;
|
||||
}
|
||||
@@ -187,10 +187,10 @@ IntUpdateSBInfo(PWINDOW_OBJECT Window, int wBar)
|
||||
{
|
||||
PSCROLLBARINFO sbi;
|
||||
LPSCROLLINFO psi;
|
||||
|
||||
|
||||
ASSERT(Window);
|
||||
ASSERT(Window->Scroll);
|
||||
|
||||
|
||||
sbi = IntGetScrollbarInfoFromWindow(Window, wBar);
|
||||
psi = IntGetScrollInfoFromWindow(Window, wBar);
|
||||
IntGetScrollBarRect(Window, wBar, &(sbi->rcScrollBar));
|
||||
@@ -202,7 +202,7 @@ IntGetScrollInfo(PWINDOW_OBJECT Window, INT nBar, LPSCROLLINFO lpsi)
|
||||
{
|
||||
UINT Mask;
|
||||
LPSCROLLINFO psi;
|
||||
|
||||
|
||||
if(!SBID_IS_VALID(nBar))
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
@@ -214,9 +214,9 @@ IntGetScrollInfo(PWINDOW_OBJECT Window, INT nBar, LPSCROLLINFO lpsi)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
psi = IntGetScrollInfoFromWindow(Window, nBar);
|
||||
|
||||
|
||||
if (lpsi->fMask == SIF_ALL)
|
||||
{
|
||||
Mask = SIF_PAGE | SIF_POS | SIF_RANGE | SIF_TRACKPOS;
|
||||
@@ -230,12 +230,12 @@ IntGetScrollInfo(PWINDOW_OBJECT Window, INT nBar, LPSCROLLINFO lpsi)
|
||||
{
|
||||
lpsi->nPage = psi->nPage;
|
||||
}
|
||||
|
||||
|
||||
if (0 != (Mask & SIF_POS))
|
||||
{
|
||||
lpsi->nPos = psi->nPos;
|
||||
}
|
||||
|
||||
|
||||
if (0 != (Mask & SIF_RANGE))
|
||||
{
|
||||
lpsi->nMin = psi->nMin;
|
||||
@@ -246,7 +246,7 @@ IntGetScrollInfo(PWINDOW_OBJECT Window, INT nBar, LPSCROLLINFO lpsi)
|
||||
{
|
||||
lpsi->nTrackPos = psi->nTrackPos;
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -274,8 +274,8 @@ IntSetScrollInfo(PWINDOW_OBJECT Window, INT nBar, LPCSCROLLINFO lpsi, BOOL bRedr
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (lpsi->cbSize != sizeof(SCROLLINFO) &&
|
||||
|
||||
if (lpsi->cbSize != sizeof(SCROLLINFO) &&
|
||||
lpsi->cbSize != (sizeof(SCROLLINFO) - sizeof(lpsi->nTrackPos)))
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
@@ -286,7 +286,7 @@ IntSetScrollInfo(PWINDOW_OBJECT Window, INT nBar, LPCSCROLLINFO lpsi, BOOL bRedr
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
psbi = IntGetScrollbarInfoFromWindow(Window, nBar);
|
||||
Info = IntGetScrollInfoFromWindow(Window, nBar);
|
||||
|
||||
@@ -411,33 +411,33 @@ IntGetScrollBarInfo(PWINDOW_OBJECT Window, LONG idObject, PSCROLLBARINFO psbi)
|
||||
INT Bar;
|
||||
PSCROLLBARINFO sbi;
|
||||
LPSCROLLINFO psi;
|
||||
|
||||
|
||||
Bar = SBOBJ_TO_SBID(idObject);
|
||||
|
||||
|
||||
if(!SBID_IS_VALID(Bar))
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
DPRINT1("Trying to get scrollinfo for unknown scrollbar type %d\n", Bar);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(!IntCreateScrollBars(Window))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
sbi = IntGetScrollbarInfoFromWindow(Window, Bar);
|
||||
psi = IntGetScrollInfoFromWindow(Window, Bar);
|
||||
|
||||
IntGetScrollBarRect(Window, Bar, &(sbi->rcScrollBar));
|
||||
IntCalculateThumb(Window, Bar, sbi, psi);
|
||||
|
||||
|
||||
RtlCopyMemory(psbi, sbi, sizeof(SCROLLBARINFO));
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL FASTCALL
|
||||
BOOL FASTCALL
|
||||
IntCreateScrollBars(PWINDOW_OBJECT Window)
|
||||
{
|
||||
PSCROLLBARINFO psbi;
|
||||
@@ -445,13 +445,13 @@ IntCreateScrollBars(PWINDOW_OBJECT Window)
|
||||
LRESULT Result;
|
||||
ULONG Size, s;
|
||||
INT i;
|
||||
|
||||
|
||||
if(Window->Scroll)
|
||||
{
|
||||
/* no need to create it anymore */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/* allocate memory for all scrollbars (HORZ, VERT, CONTROL) */
|
||||
Size = 3 * (sizeof(WINDOW_SCROLLINFO));
|
||||
if(!(Window->Scroll = ExAllocatePoolWithTag(PagedPool, Size, TAG_SBARINFO)))
|
||||
@@ -459,24 +459,24 @@ IntCreateScrollBars(PWINDOW_OBJECT Window)
|
||||
DPRINT1("Unable to allocate memory for scrollbar information for window 0x%x\n", Window->Self);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
RtlZeroMemory(Window->Scroll, Size);
|
||||
|
||||
Result = WinPosGetNonClientSize(Window->Self,
|
||||
&Window->WindowRect,
|
||||
&Window->ClientRect);
|
||||
|
||||
|
||||
for(s = SB_HORZ; s <= SB_VERT; s++)
|
||||
{
|
||||
psbi = IntGetScrollbarInfoFromWindow(Window, s);
|
||||
psbi->cbSize = sizeof(SCROLLBARINFO);
|
||||
for (i = 0; i < CCHILDREN_SCROLLBAR + 1; i++)
|
||||
psbi->rgstate[i] = 0;
|
||||
|
||||
|
||||
psi = IntGetScrollInfoFromWindow(Window, s);
|
||||
psi->cbSize = sizeof(LPSCROLLINFO);
|
||||
psi->nMax = 100;
|
||||
|
||||
|
||||
IntGetScrollBarRect(Window, s, &(psbi->rcScrollBar));
|
||||
IntCalculateThumb(Window, s, psbi, psi);
|
||||
}
|
||||
@@ -484,7 +484,7 @@ IntCreateScrollBars(PWINDOW_OBJECT Window)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL FASTCALL
|
||||
BOOL FASTCALL
|
||||
IntDestroyScrollBars(PWINDOW_OBJECT Window)
|
||||
{
|
||||
if(Window->Scroll)
|
||||
@@ -581,9 +581,9 @@ NtUserGetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi)
|
||||
SCROLLINFO psi;
|
||||
DWORD sz;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(&psi.cbSize, &(lpsi->cbSize), sizeof(UINT));
|
||||
if(!NT_SUCCESS(Status) ||
|
||||
if(!NT_SUCCESS(Status) ||
|
||||
!((psi.cbSize == sizeof(SCROLLINFO)) || (psi.cbSize == sizeof(SCROLLINFO) - sizeof(psi.nTrackPos))))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
@@ -596,7 +596,7 @@ NtUserGetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi)
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Window = IntGetWindowObject(hwnd);
|
||||
|
||||
if(!Window)
|
||||
@@ -606,16 +606,16 @@ NtUserGetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi)
|
||||
}
|
||||
|
||||
Ret = IntGetScrollInfo(Window, fnBar, &psi);
|
||||
|
||||
|
||||
IntReleaseWindowObject(Window);
|
||||
|
||||
|
||||
Status = MmCopyToCaller(lpsi, &psi, sz);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -623,14 +623,14 @@ NtUserGetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi)
|
||||
BOOL
|
||||
STDCALL
|
||||
NtUserEnableScrollBar(
|
||||
HWND hWnd,
|
||||
UINT wSBflags,
|
||||
HWND hWnd,
|
||||
UINT wSBflags,
|
||||
UINT wArrows)
|
||||
{
|
||||
PWINDOW_OBJECT Window;
|
||||
PSCROLLBARINFO InfoV = NULL, InfoH = NULL;
|
||||
BOOL Chg = FALSE;
|
||||
|
||||
|
||||
Window = IntGetWindowObject(hWnd);
|
||||
|
||||
if(!Window)
|
||||
@@ -638,14 +638,14 @@ NtUserEnableScrollBar(
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(wSBflags == SB_CTL)
|
||||
{
|
||||
/* FIXME */
|
||||
IntReleaseWindowObject(Window);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(wSBflags != SB_BOTH && !SBID_IS_VALID(wSBflags))
|
||||
{
|
||||
IntReleaseWindowObject(Window);
|
||||
@@ -653,13 +653,13 @@ NtUserEnableScrollBar(
|
||||
DPRINT1("Trying to set scrollinfo for unknown scrollbar type %d", wSBflags);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(!IntCreateScrollBars(Window))
|
||||
{
|
||||
IntReleaseWindowObject(Window);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
switch(wSBflags)
|
||||
{
|
||||
case SB_BOTH:
|
||||
@@ -675,10 +675,10 @@ NtUserEnableScrollBar(
|
||||
IntReleaseWindowObject(Window);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(InfoV)
|
||||
Chg = IntEnableScrollBar(FALSE, InfoV, wArrows);
|
||||
|
||||
|
||||
if(InfoH)
|
||||
Chg = (IntEnableScrollBar(TRUE, InfoH, wArrows) || Chg);
|
||||
|
||||
@@ -702,7 +702,7 @@ NtUserSetScrollBarInfo(
|
||||
LPSCROLLINFO psi;
|
||||
NTSTATUS Status;
|
||||
LONG Obj;
|
||||
|
||||
|
||||
Window = IntGetWindowObject(hwnd);
|
||||
|
||||
if(!Window)
|
||||
@@ -710,7 +710,7 @@ NtUserSetScrollBarInfo(
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Obj = SBOBJ_TO_SBID(idObject);
|
||||
if(!SBID_IS_VALID(Obj))
|
||||
{
|
||||
@@ -725,7 +725,7 @@ NtUserSetScrollBarInfo(
|
||||
IntReleaseWindowObject(Window);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(&Safeinfo, info, sizeof(SETSCROLLBARINFO));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -733,14 +733,14 @@ NtUserSetScrollBarInfo(
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
sbi = IntGetScrollbarInfoFromWindow(Window, Obj);
|
||||
psi = IntGetScrollInfoFromWindow(Window, Obj);
|
||||
|
||||
|
||||
psi->nTrackPos = Safeinfo.nTrackPos;
|
||||
sbi->reserved = Safeinfo.reserved;
|
||||
RtlCopyMemory(&sbi->rgstate, &Safeinfo.rgstate, sizeof(Safeinfo.rgstate));
|
||||
|
||||
|
||||
IntReleaseWindowObject(Window);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -748,16 +748,16 @@ NtUserSetScrollBarInfo(
|
||||
DWORD
|
||||
STDCALL
|
||||
NtUserSetScrollInfo(
|
||||
HWND hwnd,
|
||||
int fnBar,
|
||||
LPCSCROLLINFO lpsi,
|
||||
HWND hwnd,
|
||||
int fnBar,
|
||||
LPCSCROLLINFO lpsi,
|
||||
BOOL bRedraw)
|
||||
{
|
||||
PWINDOW_OBJECT Window;
|
||||
NTSTATUS Status;
|
||||
SCROLLINFO ScrollInfo;
|
||||
DWORD Ret;
|
||||
|
||||
|
||||
Window = IntGetWindowObject(hwnd);
|
||||
|
||||
if(!Window)
|
||||
@@ -765,7 +765,7 @@ NtUserSetScrollInfo(
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(&ScrollInfo, lpsi, sizeof(SCROLLINFO) - sizeof(ScrollInfo.nTrackPos));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -773,10 +773,10 @@ NtUserSetScrollInfo(
|
||||
SetLastNtError(Status);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Ret = IntSetScrollInfo(Window, fnBar, &ScrollInfo, bRedraw);
|
||||
IntReleaseWindowObject(Window);
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -792,7 +792,7 @@ NtUserShowScrollBar(HWND hWnd, int wBar, DWORD bShow)
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
switch(wBar)
|
||||
{
|
||||
case SB_HORZ:
|
||||
@@ -812,7 +812,7 @@ NtUserShowScrollBar(HWND hWnd, int wBar, DWORD bShow)
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if(!IntCreateScrollBars(Window))
|
||||
{
|
||||
IntReleaseWindowObject(Window);
|
||||
@@ -822,25 +822,25 @@ NtUserShowScrollBar(HWND hWnd, int wBar, DWORD bShow)
|
||||
if (wBar == SB_CTL)
|
||||
{
|
||||
IntUpdateSBInfo(Window, SB_CTL);
|
||||
|
||||
|
||||
WinPosShowWindow(hWnd, bShow ? SW_SHOW : SW_HIDE);
|
||||
IntReleaseWindowObject(Window);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
OldStyle = Window->Style;
|
||||
if(bShow)
|
||||
Window->Style |= Style;
|
||||
else
|
||||
Window->Style &= ~Style;
|
||||
|
||||
|
||||
if(Window->Style != OldStyle)
|
||||
{
|
||||
if(Window->Style & WS_HSCROLL)
|
||||
IntUpdateSBInfo(Window, SB_HORZ);
|
||||
if(Window->Style & WS_VSCROLL)
|
||||
IntUpdateSBInfo(Window, SB_VERT);
|
||||
|
||||
|
||||
if(Window->Style & WS_VISIBLE)
|
||||
{
|
||||
/* Frame has been changed, let the window redraw itself */
|
||||
@@ -848,7 +848,7 @@ NtUserShowScrollBar(HWND hWnd, int wBar, DWORD bShow)
|
||||
SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED | SWP_NOSENDCHANGING);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
IntReleaseWindowObject(Window);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -63,14 +63,14 @@ IntSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL S
|
||||
|
||||
DPRINT("IntSetTimer wnd %x id %p elapse %u timerproc %p systemtimer %s\n",
|
||||
Wnd, IDEvent, Elapse, TimerFunc, SystemTimer ? "TRUE" : "FALSE");
|
||||
|
||||
|
||||
if ((Wnd == NULL) && ! SystemTimer)
|
||||
{
|
||||
DPRINT("Window-less timer\n");
|
||||
/* find a free, window-less timer id */
|
||||
IntLockWindowlessTimerBitmap();
|
||||
IDEvent = RtlFindClearBitsAndSet(&WindowLessTimersBitMap, 1, HintIndex);
|
||||
|
||||
|
||||
if (IDEvent == (UINT_PTR) -1)
|
||||
{
|
||||
IntUnlockWindowlessTimerBitmap();
|
||||
@@ -78,7 +78,7 @@ IntSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL S
|
||||
SetLastWin32Error(ERROR_NO_SYSTEM_RESOURCES);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
HintIndex = ++IDEvent;
|
||||
IntUnlockWindowlessTimerBitmap();
|
||||
Ret = IDEvent;
|
||||
@@ -103,27 +103,27 @@ IntSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL S
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
Ret = 1;
|
||||
}
|
||||
|
||||
|
||||
#if 1
|
||||
|
||||
|
||||
/* Win NT/2k/XP */
|
||||
if (Elapse > 0x7fffffff)
|
||||
{
|
||||
DPRINT("Adjusting uElapse\n");
|
||||
Elapse = 1;
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
|
||||
|
||||
/* Win Server 2003 */
|
||||
if (Elapse > 0x7fffffff)
|
||||
{
|
||||
DPRINT("Adjusting uElapse\n");
|
||||
Elapse = 0x7fffffff;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/* Win 2k/XP */
|
||||
if (Elapse < 10)
|
||||
{
|
||||
@@ -158,7 +158,7 @@ IntKillTimer(HWND Wnd, UINT_PTR IDEvent, BOOL SystemTimer)
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/* window-less timer? */
|
||||
if ((Wnd == NULL) && ! SystemTimer)
|
||||
{
|
||||
@@ -170,7 +170,7 @@ IntKillTimer(HWND Wnd, UINT_PTR IDEvent, BOOL SystemTimer)
|
||||
|
||||
IntUnlockWindowlessTimerBitmap();
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -178,17 +178,17 @@ NTSTATUS FASTCALL
|
||||
InitTimerImpl(VOID)
|
||||
{
|
||||
ULONG BitmapBytes;
|
||||
|
||||
|
||||
ExInitializeFastMutex(&Mutex);
|
||||
|
||||
|
||||
BitmapBytes = ROUND_UP(NUM_WINDOW_LESS_TIMERS, sizeof(ULONG) * 8) / 8;
|
||||
WindowLessTimersBitMapBuffer = ExAllocatePoolWithTag(PagedPool, BitmapBytes, TAG_TIMERBMP);
|
||||
RtlInitializeBitMap(&WindowLessTimersBitMap,
|
||||
WindowLessTimersBitMapBuffer,
|
||||
BitmapBytes * 8);
|
||||
|
||||
|
||||
/* yes we need this, since ExAllocatePool isn't supposed to zero out allocated memory */
|
||||
RtlClearAllBits(&WindowLessTimersBitMap);
|
||||
RtlClearAllBits(&WindowLessTimersBitMap);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -35,10 +35,10 @@ IntAddAtom(LPWSTR AtomName)
|
||||
PWINSTATION_OBJECT WinStaObject;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
RTL_ATOM Atom;
|
||||
|
||||
|
||||
if (PsGetWin32Thread()->Desktop == NULL)
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
SetLastNtError(Status);
|
||||
return (RTL_ATOM)0;
|
||||
}
|
||||
WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
|
||||
@@ -46,7 +46,7 @@ IntAddAtom(LPWSTR AtomName)
|
||||
AtomName, &Atom);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
SetLastNtError(Status);
|
||||
return (RTL_ATOM)0;
|
||||
}
|
||||
return Atom;
|
||||
@@ -61,7 +61,7 @@ IntGetAtomName(RTL_ATOM nAtom, LPWSTR lpBuffer, ULONG nSize)
|
||||
|
||||
if (PsGetWin32Thread()->Desktop == NULL)
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
SetLastNtError(Status);
|
||||
return 0;
|
||||
}
|
||||
WinStaObject = PsGetWin32Thread()->Desktop->WindowStation;
|
||||
@@ -71,7 +71,7 @@ IntGetAtomName(RTL_ATOM nAtom, LPWSTR lpBuffer, ULONG nSize)
|
||||
*(lpBuffer + Size) = 0;
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
SetLastNtError(Status);
|
||||
return 0;
|
||||
}
|
||||
return Size;
|
||||
|
||||
@@ -72,7 +72,7 @@ VIS_ComputeVisibleRegion(
|
||||
TopOffset = Window->WindowRect.top;
|
||||
|
||||
/*
|
||||
* Walk through all parent windows and for each clip the visble region
|
||||
* Walk through all parent windows and for each clip the visble region
|
||||
* to the parent's client area and exclude all siblings that are over
|
||||
* our window.
|
||||
*/
|
||||
@@ -143,16 +143,16 @@ VIS_ComputeVisibleRegion(
|
||||
}
|
||||
IntUnLockRelatives(Window);
|
||||
}
|
||||
|
||||
|
||||
if(Window->WindowRegion && !(Window->Style & WS_MINIMIZE))
|
||||
{
|
||||
NtGdiOffsetRgn(VisRgn, -LeftOffset, -TopOffset);
|
||||
NtGdiCombineRgn(VisRgn, VisRgn, Window->WindowRegion, RGN_AND);
|
||||
return VisRgn;
|
||||
}
|
||||
|
||||
|
||||
NtGdiOffsetRgn(VisRgn, -LeftOffset, -TopOffset);
|
||||
|
||||
|
||||
return VisRgn;
|
||||
}
|
||||
|
||||
@@ -163,10 +163,10 @@ VIS_WindowLayoutChanged(
|
||||
{
|
||||
HRGN Temp;
|
||||
PWINDOW_OBJECT Parent;
|
||||
|
||||
|
||||
Temp = NtGdiCreateRectRgn(0, 0, 0, 0);
|
||||
NtGdiCombineRgn(Temp, NewlyExposed, NULL, RGN_COPY);
|
||||
|
||||
|
||||
Parent = IntGetParentObject(Window);
|
||||
if(Parent)
|
||||
{
|
||||
@@ -174,7 +174,7 @@ VIS_WindowLayoutChanged(
|
||||
Window->WindowRect.left - Parent->ClientRect.left,
|
||||
Window->WindowRect.top - Parent->ClientRect.top);
|
||||
IntRedrawWindow(Parent, NULL, Temp,
|
||||
RDW_FRAME | RDW_ERASE | RDW_INVALIDATE |
|
||||
RDW_FRAME | RDW_ERASE | RDW_INVALIDATE |
|
||||
RDW_ALLCHILDREN);
|
||||
IntReleaseWindowObject(Parent);
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ DceGetVisRgn(HWND hWnd, ULONG Flags, HWND hWndChild, ULONG CFlags)
|
||||
* entire window, including title bar, menus, and scroll bars. A window device
|
||||
* context permits painting anywhere in a window, because the origin of the
|
||||
* device context is the upper-left corner of the window instead of the client
|
||||
* area.
|
||||
* area.
|
||||
*
|
||||
* Status
|
||||
* @implemented
|
||||
@@ -125,9 +125,9 @@ DceAllocDCE(HWND hWnd, DCE_TYPE Type)
|
||||
DceHandle = DCEOBJ_AllocDCE();
|
||||
if(!DceHandle)
|
||||
return NULL;
|
||||
|
||||
|
||||
RtlInitUnicodeString(&DriverName, L"DISPLAY");
|
||||
|
||||
|
||||
Dce = DCEOBJ_LockDCE(DceHandle);
|
||||
/* No real locking, just get the pointer */
|
||||
DCEOBJ_UnlockDCE(DceHandle);
|
||||
@@ -181,7 +181,7 @@ DceSetDrawable(PWINDOW_OBJECT WindowObject, HDC hDC, ULONG Flags,
|
||||
DC *dc = DC_LockDc(hDC);
|
||||
if(!dc)
|
||||
return;
|
||||
|
||||
|
||||
if (WindowObject == NULL)
|
||||
{
|
||||
dc->w.DCOrgX = 0;
|
||||
@@ -278,10 +278,10 @@ DceUpdateVisRgn(DCE *Dce, PWINDOW_OBJECT Window, ULONG Flags)
|
||||
hRgnVisible = NULL;
|
||||
goto noparent;
|
||||
}
|
||||
|
||||
|
||||
if (Parent->Style & WS_CLIPSIBLINGS)
|
||||
{
|
||||
DcxFlags = DCX_CLIPSIBLINGS |
|
||||
DcxFlags = DCX_CLIPSIBLINGS |
|
||||
(Flags & ~(DCX_CLIPCHILDREN | DCX_WINDOW));
|
||||
}
|
||||
else
|
||||
@@ -430,7 +430,7 @@ NtUserGetDCEx(HWND hWnd, HANDLE ClipRegion, ULONG Flags)
|
||||
}
|
||||
|
||||
Parent = (Window ? IntGetParentObject(Window) : NULL);
|
||||
|
||||
|
||||
if (NULL == Window || !(Window->Style & WS_CHILD) || NULL == Parent)
|
||||
{
|
||||
Flags &= ~DCX_PARENTCLIP;
|
||||
@@ -451,14 +451,14 @@ NtUserGetDCEx(HWND hWnd, HANDLE ClipRegion, ULONG Flags)
|
||||
|
||||
if(Parent)
|
||||
IntReleaseWindowObject(Parent);
|
||||
|
||||
|
||||
DcxFlags = Flags & DCX_CACHECOMPAREMASK;
|
||||
|
||||
if (Flags & DCX_CACHE)
|
||||
{
|
||||
DCE* DceEmpty = NULL;
|
||||
DCE* DceUnused = NULL;
|
||||
|
||||
|
||||
DCE_LockList();
|
||||
|
||||
for (Dce = FirstDce; Dce != NULL; Dce = Dce->next)
|
||||
@@ -483,7 +483,7 @@ NtUserGetDCEx(HWND hWnd, HANDLE ClipRegion, ULONG Flags)
|
||||
}
|
||||
|
||||
DCE_UnlockList();
|
||||
|
||||
|
||||
if (Dce == NULL)
|
||||
{
|
||||
Dce = (DceEmpty == NULL) ? DceUnused : DceEmpty;
|
||||
@@ -561,7 +561,7 @@ NtUserGetDCEx(HWND hWnd, HANDLE ClipRegion, ULONG Flags)
|
||||
{
|
||||
NtGdiOffsetRgn(Dce->hClipRgn, -Window->WindowRect.left, -Window->WindowRect.top);
|
||||
NtGdiCombineRgn(Dce->hClipRgn, Dce->hClipRgn, Window->WindowRegion, RGN_AND);
|
||||
NtGdiOffsetRgn(Dce->hClipRgn, -(Window->ClientRect.left - Window->WindowRect.left),
|
||||
NtGdiOffsetRgn(Dce->hClipRgn, -(Window->ClientRect.left - Window->WindowRect.left),
|
||||
-(Window->ClientRect.top - Window->WindowRect.top));
|
||||
}
|
||||
}
|
||||
@@ -609,9 +609,9 @@ DCE_Cleanup(PVOID ObjectBody)
|
||||
{
|
||||
PDCE PrevInList;
|
||||
PDCE pDce = (PDCE)ObjectBody;
|
||||
|
||||
|
||||
DCE_LockList();
|
||||
|
||||
|
||||
if (pDce == FirstDce)
|
||||
{
|
||||
FirstDce = pDce->next;
|
||||
@@ -631,7 +631,7 @@ DCE_Cleanup(PVOID ObjectBody)
|
||||
}
|
||||
|
||||
DCE_UnlockList();
|
||||
|
||||
|
||||
return NULL != PrevInList;
|
||||
}
|
||||
|
||||
@@ -639,7 +639,7 @@ HWND FASTCALL
|
||||
IntWindowFromDC(HDC hDc)
|
||||
{
|
||||
DCE *Dce;
|
||||
|
||||
|
||||
DCE_LockList();
|
||||
for (Dce = FirstDce; Dce != NULL; Dce = Dce->next)
|
||||
{
|
||||
@@ -660,7 +660,7 @@ NtUserReleaseDC(HWND hWnd, HDC hDc)
|
||||
INT nRet = 0;
|
||||
|
||||
DCE_LockList();
|
||||
|
||||
|
||||
dce = FirstDce;
|
||||
|
||||
DPRINT("%p %p\n", hWnd, hDc);
|
||||
@@ -716,7 +716,7 @@ DceFreeDCE(PDCE dce, BOOLEAN Force)
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* DceFreeWindowDCE
|
||||
@@ -729,7 +729,7 @@ DceFreeWindowDCE(PWINDOW_OBJECT Window)
|
||||
DCE *pDCE;
|
||||
|
||||
DCE_LockList();
|
||||
|
||||
|
||||
pDCE = FirstDce;
|
||||
while (pDCE)
|
||||
{
|
||||
@@ -785,7 +785,7 @@ DceEmptyCache()
|
||||
DCE_UnlockList();
|
||||
}
|
||||
|
||||
VOID FASTCALL
|
||||
VOID FASTCALL
|
||||
DceResetActiveDCEs(PWINDOW_OBJECT Window)
|
||||
{
|
||||
DCE *pDCE;
|
||||
@@ -800,7 +800,7 @@ DceResetActiveDCEs(PWINDOW_OBJECT Window)
|
||||
}
|
||||
|
||||
DCE_LockList();
|
||||
|
||||
|
||||
pDCE = FirstDce;
|
||||
while (pDCE)
|
||||
{
|
||||
@@ -865,10 +865,10 @@ DceResetActiveDCEs(PWINDOW_OBJECT Window)
|
||||
IntReleaseWindowObject(CurrentWindow);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pDCE = pDCE->next;
|
||||
}
|
||||
|
||||
|
||||
DCE_UnlockList();
|
||||
}
|
||||
|
||||
@@ -895,7 +895,7 @@ NtUserEnumDisplaySettings(
|
||||
PUNICODE_STRING pSafeDeviceName = NULL;
|
||||
UNICODE_STRING SafeDeviceName;
|
||||
USHORT Size = 0, ExtraSize = 0;
|
||||
|
||||
|
||||
/* Copy the devmode */
|
||||
Status = MmCopyFromCaller(&Size, &lpDevMode->dmSize, sizeof (Size));
|
||||
if (!NT_SUCCESS(Status))
|
||||
@@ -998,7 +998,7 @@ NtUserChangeDisplaySettings(
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return DISP_CHANGE_BADPARAM;
|
||||
}
|
||||
|
||||
|
||||
/* Copy devmode */
|
||||
Status = MmCopyFromCaller(&DevMode.dmSize, &lpDevMode->dmSize, sizeof (DevMode.dmSize));
|
||||
if (!NT_SUCCESS(Status))
|
||||
@@ -1033,10 +1033,10 @@ NtUserChangeDisplaySettings(
|
||||
|
||||
/* Call internal function */
|
||||
Ret = IntChangeDisplaySettings(pSafeDeviceName, &DevMode, dwflags, lParam);
|
||||
|
||||
|
||||
if (pSafeDeviceName != NULL)
|
||||
RtlFreeUnicodeString(pSafeDeviceName);
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -53,7 +53,7 @@ BOOL FASTCALL
|
||||
IntGetClientOrigin(HWND hWnd, LPPOINT Point)
|
||||
{
|
||||
PWINDOW_OBJECT WindowObject;
|
||||
|
||||
|
||||
WindowObject = IntGetWindowObject((hWnd ? hWnd : IntGetDesktopWindow()));
|
||||
if (WindowObject == NULL)
|
||||
{
|
||||
@@ -62,7 +62,7 @@ IntGetClientOrigin(HWND hWnd, LPPOINT Point)
|
||||
}
|
||||
Point->x = WindowObject->ClientRect.left;
|
||||
Point->y = WindowObject->ClientRect.top;
|
||||
|
||||
|
||||
IntReleaseWindowObject(WindowObject);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -73,28 +73,28 @@ NtUserGetClientOrigin(HWND hWnd, LPPOINT Point)
|
||||
BOOL Ret;
|
||||
POINT pt;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
if(!Point)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGetClientOrigin(hWnd, &pt);
|
||||
|
||||
|
||||
if(!Ret)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyToCaller(Point, &pt, sizeof(POINT));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ WinPosActivateOtherWindow(PWINDOW_OBJECT Window)
|
||||
{
|
||||
PWINDOW_OBJECT Wnd, Old;
|
||||
int TryTopmost;
|
||||
|
||||
|
||||
if (!Window || IntIsDesktopWindow(Window))
|
||||
{
|
||||
IntSetFocusMessageQueue(NULL);
|
||||
@@ -118,7 +118,7 @@ WinPosActivateOtherWindow(PWINDOW_OBJECT Window)
|
||||
for(;;)
|
||||
{
|
||||
HWND *List, *phWnd;
|
||||
|
||||
|
||||
Old = Wnd;
|
||||
Wnd = IntGetParentObject(Wnd);
|
||||
if(Old != Window)
|
||||
@@ -130,7 +130,7 @@ WinPosActivateOtherWindow(PWINDOW_OBJECT Window)
|
||||
IntSetFocusMessageQueue(NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if((List = IntWinListChildren(Wnd)))
|
||||
{
|
||||
for(TryTopmost = 0; TryTopmost <= 1; TryTopmost++)
|
||||
@@ -138,12 +138,12 @@ WinPosActivateOtherWindow(PWINDOW_OBJECT Window)
|
||||
for(phWnd = List; *phWnd; phWnd++)
|
||||
{
|
||||
PWINDOW_OBJECT Child;
|
||||
|
||||
|
||||
if((*phWnd) == Window->Self)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if((Child = IntGetWindowObject(*phWnd)))
|
||||
{
|
||||
if(((! TryTopmost && (0 == (Child->ExStyle & WS_EX_TOPMOST)))
|
||||
@@ -176,12 +176,12 @@ WinPosInitInternalPos(PWINDOW_OBJECT WindowObject, POINT *pt, PRECT RestoreRect)
|
||||
{
|
||||
PWINDOW_OBJECT Parent;
|
||||
UINT XInc, YInc;
|
||||
|
||||
|
||||
if (WindowObject->InternalPos == NULL)
|
||||
{
|
||||
RECT WorkArea;
|
||||
PDESKTOP_OBJECT Desktop = PsGetWin32Thread()->Desktop; /* Or rather get it from the window? */
|
||||
|
||||
|
||||
Parent = IntGetParentObject(WindowObject);
|
||||
if(Parent)
|
||||
{
|
||||
@@ -193,7 +193,7 @@ WinPosInitInternalPos(PWINDOW_OBJECT WindowObject, POINT *pt, PRECT RestoreRect)
|
||||
}
|
||||
else
|
||||
IntGetDesktopWorkArea(Desktop, &WorkArea);
|
||||
|
||||
|
||||
WindowObject->InternalPos = ExAllocatePoolWithTag(PagedPool, sizeof(INTERNALPOS), TAG_WININTLIST);
|
||||
if(!WindowObject->InternalPos)
|
||||
{
|
||||
@@ -231,8 +231,8 @@ WinPosMinMaximize(PWINDOW_OBJECT WindowObject, UINT ShowFlag, RECT* NewPos)
|
||||
|
||||
Size.x = WindowObject->WindowRect.left;
|
||||
Size.y = WindowObject->WindowRect.top;
|
||||
InternalPos = WinPosInitInternalPos(WindowObject, &Size,
|
||||
&WindowObject->WindowRect);
|
||||
InternalPos = WinPosInitInternalPos(WindowObject, &Size,
|
||||
&WindowObject->WindowRect);
|
||||
|
||||
if (InternalPos)
|
||||
{
|
||||
@@ -270,7 +270,7 @@ WinPosMinMaximize(PWINDOW_OBJECT WindowObject, UINT ShowFlag, RECT* NewPos)
|
||||
|
||||
case SW_MAXIMIZE:
|
||||
{
|
||||
WinPosGetMinMaxInfo(WindowObject, &Size, &InternalPos->MaxPos,
|
||||
WinPosGetMinMaxInfo(WindowObject, &Size, &InternalPos->MaxPos,
|
||||
NULL, NULL);
|
||||
DPRINT("Maximize: %d,%d %dx%d\n",
|
||||
InternalPos->MaxPos.x, InternalPos->MaxPos.y, Size.x, Size.y);
|
||||
@@ -334,9 +334,9 @@ WinPosFillMinMaxInfoStruct(PWINDOW_OBJECT Window, MINMAXINFO *Info)
|
||||
UINT XInc, YInc;
|
||||
RECT WorkArea;
|
||||
PDESKTOP_OBJECT Desktop = PsGetWin32Thread()->Desktop; /* Or rather get it from the window? */
|
||||
|
||||
|
||||
IntGetDesktopWorkArea(Desktop, &WorkArea);
|
||||
|
||||
|
||||
/* Get default values. */
|
||||
Info->ptMaxSize.x = WorkArea.right - WorkArea.left;
|
||||
Info->ptMaxSize.y = WorkArea.bottom - WorkArea.top;
|
||||
@@ -365,9 +365,9 @@ WinPosGetMinMaxInfo(PWINDOW_OBJECT Window, POINT* MaxSize, POINT* MaxPos,
|
||||
POINT* MinTrack, POINT* MaxTrack)
|
||||
{
|
||||
MINMAXINFO MinMax;
|
||||
|
||||
|
||||
WinPosFillMinMaxInfoStruct(Window, &MinMax);
|
||||
|
||||
|
||||
IntSendMessage(Window->Self, WM_GETMINMAXINFO, 0, (LPARAM)&MinMax);
|
||||
|
||||
MinMax.ptMaxTrackSize.x = max(MinMax.ptMaxTrackSize.x,
|
||||
@@ -507,7 +507,7 @@ WinPosDoWinPosChanging(PWINDOW_OBJECT WindowObject,
|
||||
{
|
||||
IntSendMessage(WindowObject->Self, WM_WINDOWPOSCHANGING, 0, (LPARAM) WinPos);
|
||||
}
|
||||
|
||||
|
||||
*WindowRect = WindowObject->WindowRect;
|
||||
*ClientRect = WindowObject->ClientRect;
|
||||
|
||||
@@ -643,7 +643,7 @@ WinPosInternalMoveWindow(PWINDOW_OBJECT Window, INT MoveX, INT MoveY)
|
||||
Window->ClientRect.right += MoveX;
|
||||
Window->ClientRect.top += MoveY;
|
||||
Window->ClientRect.bottom += MoveY;
|
||||
|
||||
|
||||
IntLockRelatives(Window);
|
||||
for(Child = Window->FirstChild; Child; Child = Child->NextSibling)
|
||||
{
|
||||
@@ -679,14 +679,14 @@ WinPosFixupFlags(WINDOWPOS *WinPos, PWINDOW_OBJECT Window)
|
||||
if (Window->WindowRect.right - Window->WindowRect.left == WinPos->cx &&
|
||||
Window->WindowRect.bottom - Window->WindowRect.top == WinPos->cy)
|
||||
{
|
||||
WinPos->flags |= SWP_NOSIZE;
|
||||
WinPos->flags |= SWP_NOSIZE;
|
||||
}
|
||||
|
||||
/* Check for right position */
|
||||
if (Window->WindowRect.left == WinPos->x &&
|
||||
Window->WindowRect.top == WinPos->y)
|
||||
{
|
||||
WinPos->flags |= SWP_NOMOVE;
|
||||
WinPos->flags |= SWP_NOMOVE;
|
||||
}
|
||||
|
||||
if (WinPos->hwnd == NtUserGetForegroundWindow())
|
||||
@@ -697,7 +697,7 @@ WinPosFixupFlags(WINDOWPOS *WinPos, PWINDOW_OBJECT Window)
|
||||
if ((Window->Style & (WS_POPUP | WS_CHILD)) != WS_CHILD)
|
||||
{
|
||||
/* Bring to the top when activating */
|
||||
if (!(WinPos->flags & SWP_NOACTIVATE))
|
||||
if (!(WinPos->flags & SWP_NOACTIVATE))
|
||||
{
|
||||
WinPos->flags &= ~SWP_NOZORDER;
|
||||
WinPos->hwndInsertAfter = (0 != (Window->ExStyle & WS_EX_TOPMOST) ?
|
||||
@@ -838,13 +838,13 @@ WinPosSetWindowPos(HWND Wnd, HWND WndInsertAfter, INT x, INT y, INT cx,
|
||||
{
|
||||
WinPos.hwndInsertAfter = WinPosDoOwnedPopups(WinPos.hwnd, WinPos.hwndInsertAfter);
|
||||
}
|
||||
|
||||
|
||||
if (!(WinPos.flags & SWP_NOREDRAW))
|
||||
{
|
||||
/* Compute the visible region before the window position is changed */
|
||||
if (!(WinPos.flags & (SWP_NOREDRAW | SWP_SHOWWINDOW)) &&
|
||||
(WinPos.flags & (SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |
|
||||
SWP_HIDEWINDOW | SWP_FRAMECHANGED)) !=
|
||||
(WinPos.flags & (SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |
|
||||
SWP_HIDEWINDOW | SWP_FRAMECHANGED)) !=
|
||||
(SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER))
|
||||
{
|
||||
VisBefore = VIS_ComputeVisibleRegion(Window, FALSE, FALSE, TRUE);
|
||||
@@ -932,7 +932,7 @@ WinPosSetWindowPos(HWND Wnd, HWND WndInsertAfter, INT x, INT y, INT cx,
|
||||
{
|
||||
Window->ExStyle &= ~ WS_EX_TOPMOST;
|
||||
}
|
||||
|
||||
|
||||
IntReleaseWindowObject(ParentWindow);
|
||||
}
|
||||
}
|
||||
@@ -1038,13 +1038,13 @@ WinPosSetWindowPos(HWND Wnd, HWND WndInsertAfter, INT x, INT y, INT cx,
|
||||
{
|
||||
NtGdiCombineRgn(CopyRgn, CopyRgn, Window->NCUpdateRegion, RGN_DIFF);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Now, get the bounding box of the copy region. If it's empty
|
||||
* there's nothing to copy. Also, it's no use copying bits onto
|
||||
* themselves.
|
||||
*/
|
||||
if ((VisRgn = (PROSRGNDATA)RGNDATA_LockRgn(CopyRgn)) &&
|
||||
if ((VisRgn = (PROSRGNDATA)RGNDATA_LockRgn(CopyRgn)) &&
|
||||
UnsafeIntGetRgnBox(VisRgn, &CopyRect) == NULLREGION)
|
||||
{
|
||||
/* Nothing to copy, clean up */
|
||||
@@ -1066,7 +1066,7 @@ WinPosSetWindowPos(HWND Wnd, HWND WndInsertAfter, INT x, INT y, INT cx,
|
||||
* region is copied, this has the effect of bitblt'ing the region.
|
||||
*
|
||||
* Since NtUserGetDCEx takes ownership of the clip region, we need
|
||||
* to create a copy of CopyRgn and pass that. We need CopyRgn later
|
||||
* to create a copy of CopyRgn and pass that. We need CopyRgn later
|
||||
*/
|
||||
HRGN ClipRgn = NtGdiCreateRectRgn(0, 0, 0, 0);
|
||||
|
||||
@@ -1189,7 +1189,7 @@ WinPosShowWindow(HWND Wnd, INT Cmd)
|
||||
BOOLEAN ShowFlag;
|
||||
// HRGN VisibleRgn;
|
||||
|
||||
Status =
|
||||
Status =
|
||||
ObmReferenceObjectByHandle(PsGetWin32Thread()->Desktop->WindowStation->HandleTable,
|
||||
Wnd,
|
||||
otWindow,
|
||||
@@ -1198,7 +1198,7 @@ WinPosShowWindow(HWND Wnd, INT Cmd)
|
||||
{
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
|
||||
WasVisible = (Window->Style & WS_VISIBLE) != 0;
|
||||
|
||||
switch (Cmd)
|
||||
@@ -1266,7 +1266,7 @@ WinPosShowWindow(HWND Wnd, INT Cmd)
|
||||
Swp |= SWP_SHOWWINDOW | SWP_FRAMECHANGED;
|
||||
if (Window->Style & (WS_MINIMIZE | WS_MAXIMIZE))
|
||||
{
|
||||
Swp |= WinPosMinMaximize(Window, SW_RESTORE, &NewPos);
|
||||
Swp |= WinPosMinMaximize(Window, SW_RESTORE, &NewPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1279,9 +1279,9 @@ WinPosShowWindow(HWND Wnd, INT Cmd)
|
||||
if (ShowFlag != WasVisible)
|
||||
{
|
||||
IntSendMessage(Wnd, WM_SHOWWINDOW, ShowFlag, 0);
|
||||
/*
|
||||
* FIXME: Need to check the window wasn't destroyed during the
|
||||
* window procedure.
|
||||
/*
|
||||
* FIXME: Need to check the window wasn't destroyed during the
|
||||
* window procedure.
|
||||
*/
|
||||
if (!(Window->Parent))
|
||||
{
|
||||
@@ -1343,7 +1343,7 @@ WinPosShowWindow(HWND Wnd, INT Cmd)
|
||||
}
|
||||
|
||||
IntSendMessage(Wnd, WM_SIZE, wParam,
|
||||
MAKELONG(Window->ClientRect.right -
|
||||
MAKELONG(Window->ClientRect.right -
|
||||
Window->ClientRect.left,
|
||||
Window->ClientRect.bottom -
|
||||
Window->ClientRect.top));
|
||||
@@ -1379,7 +1379,7 @@ WinPosSearchChildren(
|
||||
{
|
||||
if (!(Current = IntGetWindowObject(*phWnd)))
|
||||
continue;
|
||||
|
||||
|
||||
if (!(Current->Style & WS_VISIBLE))
|
||||
{
|
||||
IntReleaseWindowObject(Current);
|
||||
@@ -1414,7 +1414,7 @@ WinPosSearchChildren(
|
||||
*HitTest = HTERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (OnlyHitTests && (Current->MessageQueue == OnlyHitTests))
|
||||
{
|
||||
*HitTest = IntSendMessage(Current->Self, WM_NCHITTEST, 0,
|
||||
@@ -1424,14 +1424,14 @@ WinPosSearchChildren(
|
||||
}
|
||||
else
|
||||
*HitTest = HTCLIENT;
|
||||
|
||||
|
||||
if (Point->x >= Current->ClientRect.left &&
|
||||
Point->x < Current->ClientRect.right &&
|
||||
Point->y >= Current->ClientRect.top &&
|
||||
Point->y < Current->ClientRect.bottom)
|
||||
{
|
||||
WinPosSearchChildren(Current, OnlyHitTests, Point, Window, HitTest);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -1440,7 +1440,7 @@ WinPosSearchChildren(
|
||||
}
|
||||
|
||||
USHORT FASTCALL
|
||||
WinPosWindowFromPoint(PWINDOW_OBJECT ScopeWin, PUSER_MESSAGE_QUEUE OnlyHitTests, POINT *WinPoint,
|
||||
WinPosWindowFromPoint(PWINDOW_OBJECT ScopeWin, PUSER_MESSAGE_QUEUE OnlyHitTests, POINT *WinPoint,
|
||||
PWINDOW_OBJECT* Window)
|
||||
{
|
||||
HWND DesktopWindowHandle;
|
||||
@@ -1449,7 +1449,7 @@ WinPosWindowFromPoint(PWINDOW_OBJECT ScopeWin, PUSER_MESSAGE_QUEUE OnlyHitTests,
|
||||
USHORT HitTest;
|
||||
|
||||
*Window = NULL;
|
||||
|
||||
|
||||
if(!ScopeWin)
|
||||
{
|
||||
DPRINT1("WinPosWindowFromPoint(): ScopeWin == NULL!\n");
|
||||
@@ -1470,9 +1470,9 @@ WinPosWindowFromPoint(PWINDOW_OBJECT ScopeWin, PUSER_MESSAGE_QUEUE OnlyHitTests,
|
||||
Point.y += ScopeWin->ClientRect.top - DesktopWindow->ClientRect.top;
|
||||
IntReleaseWindowObject(DesktopWindow);
|
||||
}
|
||||
|
||||
|
||||
HitTest = HTNOWHERE;
|
||||
|
||||
|
||||
WinPosSearchChildren(ScopeWin, OnlyHitTests, &Point, Window, &HitTest);
|
||||
|
||||
return ((*Window) ? HitTest : HTNOWHERE);
|
||||
@@ -1490,7 +1490,7 @@ NtUserGetMinMaxInfo(
|
||||
PWINDOW_OBJECT Window;
|
||||
MINMAXINFO SafeMinMax;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
Window = IntGetWindowObject(hwnd);
|
||||
if(!Window)
|
||||
{
|
||||
@@ -1500,13 +1500,13 @@ NtUserGetMinMaxInfo(
|
||||
|
||||
Size.x = Window->WindowRect.left;
|
||||
Size.y = Window->WindowRect.top;
|
||||
InternalPos = WinPosInitInternalPos(Window, &Size,
|
||||
&Window->WindowRect);
|
||||
InternalPos = WinPosInitInternalPos(Window, &Size,
|
||||
&Window->WindowRect);
|
||||
if(InternalPos)
|
||||
{
|
||||
if(SendMessage)
|
||||
{
|
||||
WinPosGetMinMaxInfo(Window, &SafeMinMax.ptMaxSize, &SafeMinMax.ptMaxPosition,
|
||||
WinPosGetMinMaxInfo(Window, &SafeMinMax.ptMaxSize, &SafeMinMax.ptMaxPosition,
|
||||
&SafeMinMax.ptMinTrackSize, &SafeMinMax.ptMaxTrackSize);
|
||||
}
|
||||
else
|
||||
@@ -1523,7 +1523,7 @@ NtUserGetMinMaxInfo(
|
||||
IntReleaseWindowObject(Window);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
IntReleaseWindowObject(Window);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ InitWindowStationImpl(VOID)
|
||||
HANDLE WindowStationsDirectory;
|
||||
UNICODE_STRING UnicodeString;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
/*
|
||||
* Create the '\Windows\WindowStations' directory
|
||||
*/
|
||||
@@ -81,14 +81,14 @@ CleanupWindowStationImpl(VOID)
|
||||
}
|
||||
|
||||
/* OBJECT CALLBACKS **********************************************************/
|
||||
|
||||
NTSTATUS
|
||||
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
IntWinStaObjectCreate(PVOID ObjectBody,
|
||||
PVOID Parent,
|
||||
PWSTR RemainingPath,
|
||||
struct _OBJECT_ATTRIBUTES* ObjectAttributes)
|
||||
{
|
||||
{
|
||||
PWINSTATION_OBJECT WinSta = (PWINSTATION_OBJECT)ObjectBody;
|
||||
UNICODE_STRING UnicodeString;
|
||||
NTSTATUS Status;
|
||||
@@ -190,7 +190,7 @@ IntWinStaObjectFind(PVOID Object,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
IntWinStaObjectParse(PVOID Object,
|
||||
PVOID *NextObject,
|
||||
@@ -288,7 +288,7 @@ IntGetFullWindowStationName(
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* IntValidateWindowStationHandle
|
||||
@@ -308,7 +308,7 @@ IntValidateWindowStationHandle(
|
||||
PWINSTATION_OBJECT *Object)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
if (WindowStation == NULL)
|
||||
{
|
||||
// DPRINT1("Invalid window station handle\n");
|
||||
@@ -340,7 +340,7 @@ IntGetWindowStationObject(PWINSTATION_OBJECT Object)
|
||||
KernelMode,
|
||||
ExWindowStationObjectType,
|
||||
0);
|
||||
|
||||
|
||||
return NT_SUCCESS(Status);
|
||||
}
|
||||
|
||||
@@ -360,7 +360,7 @@ IntInitializeDesktopGraphics(VOID)
|
||||
return FALSE;
|
||||
}
|
||||
DC_SetOwnership(ScreenDeviceContext, NULL);
|
||||
|
||||
|
||||
NtUserAcquireOrReleaseInputOwnership(FALSE);
|
||||
|
||||
/* Setup the cursor */
|
||||
@@ -457,7 +457,7 @@ NtUserCreateWindowStation(
|
||||
/*
|
||||
* Try to open already existing window station
|
||||
*/
|
||||
|
||||
|
||||
DPRINT("Trying to open window station (%wZ)\n", &WindowStationName);
|
||||
|
||||
/* Initialize ObjectAttributes for the window station object */
|
||||
@@ -483,7 +483,7 @@ NtUserCreateWindowStation(
|
||||
ExFreePool(WindowStationName.Buffer);
|
||||
return (HWINSTA)WindowStation;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* No existing window station found, try to create new one
|
||||
*/
|
||||
@@ -550,9 +550,9 @@ NtUserCreateWindowStation(
|
||||
SetLastNtError(STATUS_INSUFFICIENT_RESOURCES);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
InitHotKeys(WindowStationObject);
|
||||
|
||||
|
||||
ExInitializeFastMutex(&CurInfo->CursorMutex);
|
||||
CurInfo->Enabled = FALSE;
|
||||
CurInfo->ButtonsDown = 0;
|
||||
@@ -560,21 +560,21 @@ NtUserCreateWindowStation(
|
||||
CurInfo->LastBtnDown = 0;
|
||||
CurInfo->CurrentCursorObject = NULL;
|
||||
CurInfo->ShowingCursor = 0;
|
||||
|
||||
|
||||
/* FIXME: Obtain the following information from the registry */
|
||||
CurInfo->SwapButtons = FALSE;
|
||||
CurInfo->DblClickSpeed = 500;
|
||||
CurInfo->DblClickWidth = 4;
|
||||
CurInfo->DblClickHeight = 4;
|
||||
|
||||
|
||||
WindowStationObject->SystemCursor = CurInfo;
|
||||
|
||||
|
||||
if (!IntSetupCurIconHandles(WindowStationObject))
|
||||
{
|
||||
DPRINT1("Setting up the Cursor/Icon Handle table failed!\n");
|
||||
/* FIXME: Complain more loudly? */
|
||||
}
|
||||
|
||||
|
||||
DPRINT("Window station successfully created (%wZ)\n", &WindowStationName);
|
||||
ExFreePool(WindowStationName.Buffer);
|
||||
|
||||
@@ -614,7 +614,7 @@ NtUserOpenWindowStation(
|
||||
HWINSTA WindowStation;
|
||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
/*
|
||||
* Generate full window station name
|
||||
*/
|
||||
@@ -728,30 +728,30 @@ NtUserCloseWindowStation(
|
||||
* window station or desktop object.
|
||||
*
|
||||
* Parameters
|
||||
* hObj
|
||||
* hObj
|
||||
* Handle to the window station or desktop object for which to
|
||||
* return information. This can be a handle of type HDESK or HWINSTA
|
||||
* (for example, a handle returned by NtUserCreateWindowStation,
|
||||
* NtUserOpenWindowStation, NtUserCreateDesktop, or NtUserOpenDesktop).
|
||||
* NtUserOpenWindowStation, NtUserCreateDesktop, or NtUserOpenDesktop).
|
||||
*
|
||||
* nIndex
|
||||
* nIndex
|
||||
* Specifies the object information to be retrieved.
|
||||
*
|
||||
* pvInfo
|
||||
* Pointer to a buffer to receive the object information.
|
||||
* pvInfo
|
||||
* Pointer to a buffer to receive the object information.
|
||||
*
|
||||
* nLength
|
||||
* nLength
|
||||
* Specifies the size, in bytes, of the buffer pointed to by the
|
||||
* pvInfo parameter.
|
||||
* pvInfo parameter.
|
||||
*
|
||||
* lpnLengthNeeded
|
||||
* lpnLengthNeeded
|
||||
* Pointer to a variable receiving the number of bytes required to
|
||||
* store the requested information. If this variable's value is
|
||||
* greater than the value of the nLength parameter when the function
|
||||
* returns, the function returns FALSE, and none of the information
|
||||
* is copied to the pvInfo buffer. If the value of the variable pointed
|
||||
* to by lpnLengthNeeded is less than or equal to the value of nLength,
|
||||
* the entire information block is copied.
|
||||
* the entire information block is copied.
|
||||
*
|
||||
* Return Value
|
||||
* If the function succeeds, the return value is nonzero. If the function
|
||||
@@ -775,7 +775,7 @@ NtUserGetObjectInformation(
|
||||
PVOID pvData = NULL;
|
||||
DWORD nDataSize = 0;
|
||||
|
||||
/* try windowstation */
|
||||
/* try windowstation */
|
||||
DPRINT("Trying to open window station 0x%x\n", hObject);
|
||||
Status = IntValidateWindowStationHandle(
|
||||
hObject,
|
||||
@@ -793,7 +793,7 @@ NtUserGetObjectInformation(
|
||||
|
||||
if (Status == STATUS_OBJECT_TYPE_MISMATCH)
|
||||
{
|
||||
/* try desktop */
|
||||
/* try desktop */
|
||||
DPRINT("Trying to open desktop 0x%x\n", hObject);
|
||||
Status = IntValidateDesktopHandle(
|
||||
hObject,
|
||||
@@ -860,7 +860,7 @@ NtUserGetObjectInformation(
|
||||
Status = STATUS_INVALID_PARAMETER;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* try to copy data to caller */
|
||||
if (Status == STATUS_SUCCESS)
|
||||
{
|
||||
@@ -889,20 +889,20 @@ NtUserGetObjectInformation(
|
||||
* window station or desktop object.
|
||||
*
|
||||
* Parameters
|
||||
* hObj
|
||||
* hObj
|
||||
* Handle to the window station or desktop object for which to set
|
||||
* object information. This value can be a handle of type HDESK or
|
||||
* HWINSTA.
|
||||
* HWINSTA.
|
||||
*
|
||||
* nIndex
|
||||
* nIndex
|
||||
* Specifies the object information to be set.
|
||||
*
|
||||
* pvInfo
|
||||
* Pointer to a buffer containing the object information.
|
||||
* pvInfo
|
||||
* Pointer to a buffer containing the object information.
|
||||
*
|
||||
* nLength
|
||||
* nLength
|
||||
* Specifies the size, in bytes, of the information contained in the
|
||||
* buffer pointed to by pvInfo.
|
||||
* buffer pointed to by pvInfo.
|
||||
*
|
||||
* Return Value
|
||||
* If the function succeeds, the return value is nonzero. If the function
|
||||
@@ -961,11 +961,11 @@ PWINSTATION_OBJECT FASTCALL
|
||||
IntGetWinStaObj(VOID)
|
||||
{
|
||||
PWINSTATION_OBJECT WinStaObj;
|
||||
|
||||
|
||||
/*
|
||||
* just a temporary hack, this will be gone soon
|
||||
*/
|
||||
|
||||
|
||||
if(PsGetWin32Thread() != NULL && PsGetWin32Thread()->Desktop != NULL)
|
||||
{
|
||||
WinStaObj = PsGetWin32Thread()->Desktop->WindowStation;
|
||||
@@ -987,7 +987,7 @@ IntGetWinStaObj(VOID)
|
||||
{
|
||||
WinStaObj = NULL;
|
||||
}
|
||||
|
||||
|
||||
return WinStaObj;
|
||||
}
|
||||
|
||||
@@ -1030,14 +1030,14 @@ NtUserSetProcessWindowStation(HWINSTA hWindowStation)
|
||||
0,
|
||||
&NewWinSta);
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("Validation of window station handle (0x%X) failed\n",
|
||||
DPRINT("Validation of window station handle (0x%X) failed\n",
|
||||
hWindowStation);
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* FIXME - don't allow changing the window station if there are threads that are attached to desktops and own gui objects
|
||||
*/
|
||||
@@ -1066,31 +1066,31 @@ NtUserLockWindowStation(HWINSTA hWindowStation)
|
||||
PWINSTATION_OBJECT Object;
|
||||
NTSTATUS Status;
|
||||
|
||||
DPRINT("About to set process window station with handle (0x%X)\n",
|
||||
DPRINT("About to set process window station with handle (0x%X)\n",
|
||||
hWindowStation);
|
||||
|
||||
|
||||
if(PsGetWin32Process() != LogonProcess)
|
||||
{
|
||||
DPRINT1("Unauthorized process attempted to lock the window station!\n");
|
||||
SetLastWin32Error(ERROR_ACCESS_DENIED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = IntValidateWindowStationHandle(
|
||||
hWindowStation,
|
||||
KernelMode,
|
||||
0,
|
||||
&Object);
|
||||
if (!NT_SUCCESS(Status))
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("Validation of window station handle (0x%X) failed\n",
|
||||
DPRINT("Validation of window station handle (0x%X) failed\n",
|
||||
hWindowStation);
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Object->Flags |= WSS_LOCKED;
|
||||
|
||||
|
||||
ObDereferenceObject(Object);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -1111,32 +1111,32 @@ NtUserUnlockWindowStation(HWINSTA hWindowStation)
|
||||
NTSTATUS Status;
|
||||
BOOL Ret;
|
||||
|
||||
DPRINT("About to set process window station with handle (0x%X)\n",
|
||||
DPRINT("About to set process window station with handle (0x%X)\n",
|
||||
hWindowStation);
|
||||
|
||||
|
||||
if(PsGetWin32Process() != LogonProcess)
|
||||
{
|
||||
DPRINT1("Unauthorized process attempted to unlock the window station!\n");
|
||||
SetLastWin32Error(ERROR_ACCESS_DENIED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = IntValidateWindowStationHandle(
|
||||
hWindowStation,
|
||||
KernelMode,
|
||||
0,
|
||||
&Object);
|
||||
if (!NT_SUCCESS(Status))
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("Validation of window station handle (0x%X) failed\n",
|
||||
DPRINT("Validation of window station handle (0x%X) failed\n",
|
||||
hWindowStation);
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Ret = (Object->Flags & WSS_LOCKED) == WSS_LOCKED;
|
||||
Object->Flags &= ~WSS_LOCKED;
|
||||
|
||||
|
||||
ObDereferenceObject(Object);
|
||||
return Ret;
|
||||
}
|
||||
@@ -1175,7 +1175,7 @@ BuildWindowStationNameList(
|
||||
DWORD EntryCount;
|
||||
POBJECT_DIRECTORY_INFORMATION DirEntry;
|
||||
WCHAR NullWchar;
|
||||
|
||||
|
||||
/*
|
||||
* Generate name of window station directory
|
||||
*/
|
||||
@@ -1240,7 +1240,7 @@ BuildWindowStationNameList(
|
||||
Context = 0;
|
||||
Status = ZwQueryDirectoryObject(DirectoryHandle, Buffer, BufferSize,
|
||||
FALSE, TRUE, &Context, &ReturnLength);
|
||||
if (! NT_SUCCESS(Status) ||
|
||||
if (! NT_SUCCESS(Status) ||
|
||||
STATUS_NO_MORE_ENTRIES != ZwQueryDirectoryObject(DirectoryHandle, NULL, 0, FALSE,
|
||||
FALSE, &Context, NULL))
|
||||
{
|
||||
@@ -1357,7 +1357,7 @@ BuildDesktopNameList(
|
||||
DWORD EntryCount;
|
||||
ULONG ReturnLength;
|
||||
WCHAR NullWchar;
|
||||
|
||||
|
||||
Status = IntValidateWindowStationHandle(hWindowStation,
|
||||
KernelMode,
|
||||
0,
|
||||
@@ -1388,7 +1388,7 @@ BuildDesktopNameList(
|
||||
Status = MmCopyToCaller(pRequiredSize, &ReturnLength, sizeof(ULONG));
|
||||
if (! NT_SUCCESS(Status))
|
||||
{
|
||||
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
|
||||
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
|
||||
ObDereferenceObject(WindowStation);
|
||||
return STATUS_BUFFER_TOO_SMALL;
|
||||
}
|
||||
@@ -1399,7 +1399,7 @@ BuildDesktopNameList(
|
||||
*/
|
||||
if (dwSize < ReturnLength)
|
||||
{
|
||||
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
|
||||
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
|
||||
ObDereferenceObject(WindowStation);
|
||||
return STATUS_BUFFER_TOO_SMALL;
|
||||
}
|
||||
@@ -1410,7 +1410,7 @@ BuildDesktopNameList(
|
||||
Status = MmCopyToCaller(lpBuffer, &EntryCount, sizeof(DWORD));
|
||||
if (! NT_SUCCESS(Status))
|
||||
{
|
||||
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
|
||||
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
|
||||
ObDereferenceObject(WindowStation);
|
||||
return Status;
|
||||
}
|
||||
@@ -1425,7 +1425,7 @@ BuildDesktopNameList(
|
||||
Status = MmCopyToCaller(lpBuffer, DesktopObject->Name.Buffer, DesktopObject->Name.Length);
|
||||
if (! NT_SUCCESS(Status))
|
||||
{
|
||||
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
|
||||
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
|
||||
ObDereferenceObject(WindowStation);
|
||||
return Status;
|
||||
}
|
||||
@@ -1433,7 +1433,7 @@ BuildDesktopNameList(
|
||||
Status = MmCopyToCaller(lpBuffer, &NullWchar, sizeof(WCHAR));
|
||||
if (! NT_SUCCESS(Status))
|
||||
{
|
||||
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
|
||||
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
|
||||
ObDereferenceObject(WindowStation);
|
||||
return Status;
|
||||
}
|
||||
@@ -1443,7 +1443,7 @@ BuildDesktopNameList(
|
||||
/*
|
||||
* Clean up
|
||||
*/
|
||||
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
|
||||
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
|
||||
ObDereferenceObject(WindowStation);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
#include <w32k.h>
|
||||
|
||||
/******************************************************************
|
||||
*
|
||||
* *Very* simple bezier drawing code,
|
||||
*
|
||||
* *Very* simple bezier drawing code,
|
||||
*
|
||||
* It uses a recursive algorithm to divide the curve in a series
|
||||
* of straight line segements. Not ideal but for me sufficient.
|
||||
@@ -32,7 +32,7 @@
|
||||
* 7 July 1998 Rein Klazes
|
||||
*/
|
||||
|
||||
/*
|
||||
/*
|
||||
* some macro definitions for bezier drawing
|
||||
*
|
||||
* to avoid trucation errors the coordinates are
|
||||
@@ -41,12 +41,12 @@
|
||||
* and avoiding floating point arithmatic
|
||||
* 4 bits should allow 27 bits coordinates which I saw
|
||||
* somewere in the win32 doc's
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#define BEZIERSHIFTBITS 4
|
||||
#define BEZIERSHIFTUP(x) ((x)<<BEZIERSHIFTBITS)
|
||||
#define BEZIERPIXEL BEZIERSHIFTUP(1)
|
||||
#define BEZIERPIXEL BEZIERSHIFTUP(1)
|
||||
#define BEZIERSHIFTDOWN(x) (((x)+(1<<(BEZIERSHIFTBITS-1)))>>BEZIERSHIFTBITS)
|
||||
/* maximum depth of recursion */
|
||||
#define BEZIERMAXDEPTH 8
|
||||
@@ -55,7 +55,7 @@
|
||||
/* enough for one curve */
|
||||
#define BEZIER_INITBUFSIZE (150)
|
||||
|
||||
/* calculate Bezier average, in this case the middle
|
||||
/* calculate Bezier average, in this case the middle
|
||||
* correctly rounded...
|
||||
* */
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
* returns true if the recusion can be terminated
|
||||
*/
|
||||
static BOOL FASTCALL BezierCheck( int level, POINT *Points)
|
||||
{
|
||||
{
|
||||
INT dx, dy;
|
||||
|
||||
dx=Points[3].x-Points[0].x;
|
||||
@@ -136,7 +136,7 @@ static BOOL FASTCALL BezierCheck( int level, POINT *Points)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Helper for GDI_Bezier.
|
||||
* Just handles one Bezier, so Points should point to four POINTs
|
||||
*/
|
||||
@@ -190,7 +190,7 @@ static void STDCALL GDI_InternalBezier( POINT *Points, POINT **PtsOut, INT *dwOu
|
||||
* count [I] Number of Points. Must be 3n+1.
|
||||
* nPtsOut [O] Will contain no of points that have been produced (i.e. no. of
|
||||
* lines+1).
|
||||
*
|
||||
*
|
||||
* RETURNS
|
||||
*
|
||||
* Ptr to an array of POINTs that contain the lines that approximinate the
|
||||
|
||||
@@ -112,7 +112,7 @@ NtGdiBitBlt(
|
||||
|
||||
SourcePoint.x = XSrc;
|
||||
SourcePoint.y = YSrc;
|
||||
|
||||
|
||||
BrushOrigin.x = 0;
|
||||
BrushOrigin.y = 0;
|
||||
|
||||
@@ -219,7 +219,7 @@ NtGdiBitBlt(
|
||||
|
||||
if (UsesSource && XlateObj != NULL)
|
||||
EngDeleteXlate(XlateObj);
|
||||
|
||||
|
||||
if(BitmapDest != NULL)
|
||||
{
|
||||
BITMAPOBJ_UnlockBitmap(DCDest->w.hBitmap);
|
||||
@@ -264,7 +264,7 @@ NtGdiTransparentBlt(
|
||||
USHORT PalDestMode, PalSrcMode;
|
||||
ULONG TransparentColor = 0;
|
||||
BOOL Ret = FALSE;
|
||||
|
||||
|
||||
if(!(DCDest = DC_LockDc(hdcDst)))
|
||||
{
|
||||
DPRINT1("Invalid destination dc handle (0x%08x) passed to NtGdiTransparentBlt\n", hdcDst);
|
||||
@@ -277,7 +277,7 @@ NtGdiTransparentBlt(
|
||||
/* Yes, Windows really returns TRUE in this case */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
if((hdcDst != hdcSrc) && !(DCSrc = DC_LockDc(hdcSrc)))
|
||||
{
|
||||
DC_UnlockDc(hdcDst);
|
||||
@@ -299,19 +299,19 @@ NtGdiTransparentBlt(
|
||||
/* Yes, Windows really returns TRUE in this case */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/* Offset positions */
|
||||
xDst += DCDest->w.DCOrgX;
|
||||
yDst += DCDest->w.DCOrgY;
|
||||
xSrc += DCSrc->w.DCOrgX;
|
||||
ySrc += DCSrc->w.DCOrgY;
|
||||
|
||||
|
||||
if(DCDest->w.hPalette)
|
||||
DestPalette = DCDest->w.hPalette;
|
||||
|
||||
|
||||
if(DCSrc->w.hPalette)
|
||||
SourcePalette = DCSrc->w.hPalette;
|
||||
|
||||
|
||||
if(!(PalSourceGDI = PALETTE_LockPalette(SourcePalette)))
|
||||
{
|
||||
DC_UnlockDc(hdcSrc);
|
||||
@@ -338,24 +338,24 @@ NtGdiTransparentBlt(
|
||||
PalDestMode = PalSrcMode = PalSourceGDI->Mode;
|
||||
}
|
||||
PALETTE_UnlockPalette(SourcePalette);
|
||||
|
||||
|
||||
/* Translate Transparent (RGB) Color to the source palette */
|
||||
if((XlateObj = (XLATEOBJ*)IntEngCreateXlate(PalSrcMode, PAL_RGB, SourcePalette, NULL)))
|
||||
{
|
||||
TransparentColor = XLATEOBJ_iXlate(XlateObj, (ULONG)TransColor);
|
||||
EngDeleteXlate(XlateObj);
|
||||
}
|
||||
|
||||
|
||||
/* Create the XLATE object to convert colors between source and destination */
|
||||
XlateObj = (XLATEOBJ*)IntEngCreateXlate(PalDestMode, PalSrcMode, DestPalette, SourcePalette);
|
||||
|
||||
|
||||
BitmapDest = BITMAPOBJ_LockBitmap(DCDest->w.hBitmap);
|
||||
/* FIXME - BitmapDest can be NULL!!!! Don't assert here! */
|
||||
ASSERT(BitmapDest);
|
||||
BitmapSrc = BITMAPOBJ_LockBitmap(DCSrc->w.hBitmap);
|
||||
/* FIXME - BitmapSrc can be NULL!!!! Don't assert here! */
|
||||
ASSERT(BitmapSrc);
|
||||
|
||||
|
||||
rcDest.left = xDst;
|
||||
rcDest.top = yDst;
|
||||
rcDest.right = rcDest.left + cxDst;
|
||||
@@ -364,16 +364,16 @@ NtGdiTransparentBlt(
|
||||
rcSrc.top = ySrc;
|
||||
rcSrc.right = rcSrc.left + cxSrc;
|
||||
rcSrc.bottom = rcSrc.top + cySrc;
|
||||
|
||||
|
||||
if((cxDst != cxSrc) || (cyDst != cySrc))
|
||||
{
|
||||
DPRINT1("TransparentBlt() does not support stretching at the moment!\n");
|
||||
goto done;
|
||||
}
|
||||
|
||||
Ret = IntEngTransparentBlt(BitmapDest, BitmapSrc, DCDest->CombinedClip, XlateObj, &rcDest, &rcSrc,
|
||||
|
||||
Ret = IntEngTransparentBlt(BitmapDest, BitmapSrc, DCDest->CombinedClip, XlateObj, &rcDest, &rcSrc,
|
||||
TransparentColor, 0);
|
||||
|
||||
|
||||
done:
|
||||
BITMAPOBJ_UnlockBitmap(DCDest->w.hBitmap);
|
||||
BITMAPOBJ_UnlockBitmap(DCSrc->w.hBitmap);
|
||||
@@ -557,7 +557,7 @@ NtGdiExtFloodFill(
|
||||
UINT FillType)
|
||||
{
|
||||
DPRINT1("FIXME: NtGdiExtFloodFill is UNIMPLEMENTED\n");
|
||||
|
||||
|
||||
/* lie and say we succeded */
|
||||
return TRUE;
|
||||
}
|
||||
@@ -1362,12 +1362,12 @@ BITMAP_GetObject(BITMAPOBJ * bmp, INT count, LPVOID buffer)
|
||||
BITMAP Bitmap;
|
||||
if (count > (INT) sizeof(BITMAP)) count = sizeof(BITMAP);
|
||||
Bitmap.bmType = 0;
|
||||
Bitmap.bmWidth = bmp->SurfObj.sizlBitmap.cx;
|
||||
Bitmap.bmHeight = bmp->SurfObj.sizlBitmap.cy;
|
||||
Bitmap.bmWidth = bmp->SurfObj.sizlBitmap.cx;
|
||||
Bitmap.bmHeight = bmp->SurfObj.sizlBitmap.cy;
|
||||
Bitmap.bmWidthBytes = abs(bmp->SurfObj.lDelta);
|
||||
Bitmap.bmPlanes = 1;
|
||||
Bitmap.bmPlanes = 1;
|
||||
Bitmap.bmBitsPixel = BitsPerFormat(bmp->SurfObj.iBitmapFormat);
|
||||
Bitmap.bmBits = bmp->SurfObj.pvBits;
|
||||
Bitmap.bmBits = bmp->SurfObj.pvBits;
|
||||
memcpy(buffer, &Bitmap, count);
|
||||
return count;
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ BRUSH_Cleanup(PVOID ObjectBody)
|
||||
GDIOBJ_SetOwnership(pBrush->hbmPattern, PsGetCurrentProcess());
|
||||
NtGdiDeleteObject(pBrush->hbmPattern);
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -135,7 +135,7 @@ CalculateColorTableSize(
|
||||
|
||||
/*
|
||||
* At first get some basic parameters from the passed BitmapInfoHeader
|
||||
* structure. It can have one of the following formats:
|
||||
* structure. It can have one of the following formats:
|
||||
* - BITMAPCOREHEADER (the oldest one with totally different layout
|
||||
* from the others)
|
||||
* - BITMAPINFOHEADER (the standard and most common header)
|
||||
@@ -175,7 +175,7 @@ CalculateColorTableSize(
|
||||
*ColorTableSize = 0;
|
||||
else
|
||||
*ColorTableSize = 3;
|
||||
|
||||
|
||||
return TRUE;
|
||||
|
||||
case BI_RGB:
|
||||
@@ -201,7 +201,7 @@ CalculateColorTableSize(
|
||||
*ColorTableSize = ClrUsed;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
case BI_RLE4:
|
||||
if (BitCount == 4)
|
||||
{
|
||||
@@ -224,7 +224,7 @@ CalculateColorTableSize(
|
||||
return TRUE;
|
||||
|
||||
default:
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -296,7 +296,7 @@ IntGdiCreateDIBBrush(
|
||||
GDIOBJ_SetOwnership(hPattern, NULL);
|
||||
|
||||
BRUSHOBJ_UnlockBrush(hBrush);
|
||||
|
||||
|
||||
return hBrush;
|
||||
}
|
||||
|
||||
@@ -308,7 +308,7 @@ IntGdiCreateHatchBrush(
|
||||
HBRUSH hBrush;
|
||||
PGDIBRUSHOBJ BrushObject;
|
||||
HBITMAP hPattern;
|
||||
|
||||
|
||||
if (Style < 0 || Style >= NB_HATCH_STYLES)
|
||||
{
|
||||
return 0;
|
||||
@@ -339,7 +339,7 @@ IntGdiCreateHatchBrush(
|
||||
GDIOBJ_SetOwnership(hPattern, NULL);
|
||||
|
||||
BRUSHOBJ_UnlockBrush(hBrush);
|
||||
|
||||
|
||||
return hBrush;
|
||||
}
|
||||
|
||||
@@ -350,14 +350,14 @@ IntGdiCreatePatternBrush(
|
||||
HBRUSH hBrush;
|
||||
PGDIBRUSHOBJ BrushObject;
|
||||
HBITMAP hPattern;
|
||||
|
||||
|
||||
hPattern = BITMAPOBJ_CopyBitmap(hBitmap);
|
||||
if (hPattern == NULL)
|
||||
{
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
hBrush = BRUSHOBJ_AllocBrush();
|
||||
if (hBrush == NULL)
|
||||
{
|
||||
@@ -376,7 +376,7 @@ IntGdiCreatePatternBrush(
|
||||
GDIOBJ_SetOwnership(hPattern, NULL);
|
||||
|
||||
BRUSHOBJ_UnlockBrush(hBrush);
|
||||
|
||||
|
||||
return hBrush;
|
||||
}
|
||||
|
||||
@@ -386,7 +386,7 @@ IntGdiCreateSolidBrush(
|
||||
{
|
||||
HBRUSH hBrush;
|
||||
PGDIBRUSHOBJ BrushObject;
|
||||
|
||||
|
||||
hBrush = BRUSHOBJ_AllocBrush();
|
||||
if (hBrush == NULL)
|
||||
{
|
||||
@@ -402,7 +402,7 @@ IntGdiCreateSolidBrush(
|
||||
/* FIXME: Fill in the rest of fields!!! */
|
||||
|
||||
BRUSHOBJ_UnlockBrush(hBrush);
|
||||
|
||||
|
||||
return hBrush;
|
||||
}
|
||||
|
||||
@@ -411,7 +411,7 @@ IntGdiCreateNullBrush(VOID)
|
||||
{
|
||||
HBRUSH hBrush;
|
||||
PGDIBRUSHOBJ BrushObject;
|
||||
|
||||
|
||||
hBrush = BRUSHOBJ_AllocBrush();
|
||||
if (hBrush == NULL)
|
||||
{
|
||||
@@ -423,7 +423,7 @@ IntGdiCreateNullBrush(VOID)
|
||||
ASSERT(BrushObject != NULL);
|
||||
BrushObject->flAttrs |= GDIBRUSH_IS_NULL;
|
||||
BRUSHOBJ_UnlockBrush(hBrush);
|
||||
|
||||
|
||||
return hBrush;
|
||||
}
|
||||
|
||||
@@ -475,7 +475,7 @@ IntPatBlt(
|
||||
DestRect.top = YLeft + Height + dc->w.DCOrgY + 1;
|
||||
DestRect.bottom = YLeft + dc->w.DCOrgY + 1;
|
||||
}
|
||||
|
||||
|
||||
BrushOrigin.x = BrushObj->ptOrigin.x + dc->w.DCOrgX;
|
||||
BrushOrigin.y = BrushObj->ptOrigin.y + dc->w.DCOrgY;
|
||||
|
||||
@@ -512,7 +512,7 @@ IntGdiPolyPatBlt(
|
||||
PPATRECT r;
|
||||
PGDIBRUSHOBJ BrushObj;
|
||||
DC *dc;
|
||||
|
||||
|
||||
dc = DC_LockDc(hDC);
|
||||
if (dc == NULL)
|
||||
{
|
||||
@@ -525,7 +525,7 @@ IntGdiPolyPatBlt(
|
||||
/* Yes, Windows really returns TRUE in this case */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
for (r = pRects, i = 0; i < cRects; i++)
|
||||
{
|
||||
BrushObj = BRUSHOBJ_LockBrush(r->hBrush);
|
||||
@@ -545,7 +545,7 @@ IntGdiPolyPatBlt(
|
||||
}
|
||||
|
||||
DC_UnlockDc( hDC );
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -610,7 +610,7 @@ NtGdiCreateSolidBrush(COLORREF Color)
|
||||
* NtGdiSetBrushOrgEx
|
||||
*
|
||||
* The NtGdiSetBrushOrgEx function sets the brush origin that GDI assigns to
|
||||
* the next brush an application selects into the specified device context.
|
||||
* the next brush an application selects into the specified device context.
|
||||
*
|
||||
* Status
|
||||
* @implemented
|
||||
@@ -659,7 +659,7 @@ NtGdiPolyPatBlt(
|
||||
PPATRECT rb = NULL;
|
||||
NTSTATUS Status;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
if (cRects > 0)
|
||||
{
|
||||
rb = ExAllocatePoolWithTag(PagedPool, sizeof(PATRECT) * cRects, TAG_PATBLT);
|
||||
@@ -676,9 +676,9 @@ NtGdiPolyPatBlt(
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGdiPolyPatBlt(hDC, dwRop, pRects, cRects, Reserved);
|
||||
|
||||
|
||||
if (cRects > 0)
|
||||
ExFreePool(rb);
|
||||
|
||||
|
||||
@@ -125,9 +125,9 @@ int STDCALL NtGdiExtSelectClipRgn(HDC hDC,
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
|
||||
// dc->w.flags &= ~DC_DIRTY;
|
||||
|
||||
|
||||
if (!hrgn)
|
||||
{
|
||||
if (fnMode == RGN_COPY)
|
||||
@@ -210,17 +210,17 @@ int STDCALL NtGdiGetClipBox(HDC hDC,
|
||||
int Ret;
|
||||
NTSTATUS Status;
|
||||
RECT Saferect;
|
||||
|
||||
|
||||
Ret = IntGdiGetClipBox(hDC, &Saferect);
|
||||
|
||||
|
||||
Status = MmCopyToCaller(rc, &Saferect, sizeof(RECT));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
|
||||
|
||||
SetLastNtError(Status);
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -265,7 +265,7 @@ int STDCALL NtGdiExcludeClipRect(HDC hDC,
|
||||
if (!dc->w.hClipRgn)
|
||||
{
|
||||
dc->w.hClipRgn = NtGdiCreateRectRgn(0, 0, 0, 0);
|
||||
NtGdiCombineRgn(dc->w.hClipRgn, dc->w.hVisRgn, NewRgn, RGN_DIFF);
|
||||
NtGdiCombineRgn(dc->w.hClipRgn, dc->w.hVisRgn, NewRgn, RGN_DIFF);
|
||||
Result = SIMPLEREGION;
|
||||
}
|
||||
else
|
||||
@@ -346,16 +346,16 @@ BOOL STDCALL NtGdiPtVisible(HDC hDC,
|
||||
{
|
||||
HRGN rgn;
|
||||
DC *dc;
|
||||
|
||||
|
||||
if(!(dc = DC_LockDc(hDC)))
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
rgn = dc->w.hGCClipRgn;
|
||||
DC_UnlockDc(hDC);
|
||||
|
||||
|
||||
return (rgn ? NtGdiPtInRegion(rgn, X, Y) : FALSE);
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ IntGdiCombineTransform(LPXFORM XFormResult,
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/* Create the result in a temporary XFORM, since xformResult may be
|
||||
* equal to xform1 or xform2 */
|
||||
XFormResult->eM11 = xform1->eM11 * xform2->eM11 + xform1->eM12 * xform2->eM21;
|
||||
@@ -49,7 +49,7 @@ IntGdiCombineTransform(LPXFORM XFormResult,
|
||||
XFormResult->eM22 = xform1->eM21 * xform2->eM12 + xform1->eM22 * xform2->eM22;
|
||||
XFormResult->eDx = xform1->eDx * xform2->eM11 + xform1->eDy * xform2->eM21 + xform2->eDx;
|
||||
XFormResult->eDy = xform1->eDx * xform2->eM12 + xform1->eDy * xform2->eM22 + xform2->eDy;
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ BOOL STDCALL NtGdiCombineTransform(LPXFORM UnsafeXFormResult,
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGdiCombineTransform(&xformTemp, &xform1, &xform2);
|
||||
|
||||
/* Copy the result to xformResult */
|
||||
@@ -137,16 +137,16 @@ NtGdiDPtoLP(HDC hDC,
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (!UnsafePoints || Count <= 0)
|
||||
{
|
||||
DC_UnlockDc(hDC);
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Size = Count * sizeof(POINT);
|
||||
|
||||
|
||||
Points = (LPPOINT)ExAllocatePoolWithTag(PagedPool, Size, TAG_COORD);
|
||||
if(!Points)
|
||||
{
|
||||
@@ -154,7 +154,7 @@ NtGdiDPtoLP(HDC hDC,
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(Points, UnsafePoints, Size);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -163,9 +163,9 @@ NtGdiDPtoLP(HDC hDC,
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
IntDPtoLP(dc, Points, Count);
|
||||
|
||||
|
||||
Status = MmCopyToCaller(UnsafePoints, Points, Size);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -174,7 +174,7 @@ NtGdiDPtoLP(HDC hDC,
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
DC_UnlockDc(hDC);
|
||||
ExFreePool(Points);
|
||||
return TRUE;
|
||||
@@ -194,16 +194,16 @@ NtGdiGetGraphicsMode ( HDC hDC )
|
||||
{
|
||||
PDC dc;
|
||||
int GraphicsMode; // default to failure
|
||||
|
||||
|
||||
dc = DC_LockDc ( hDC );
|
||||
if (!dc)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
GraphicsMode = dc->w.GraphicsMode;
|
||||
|
||||
|
||||
DC_UnlockDc ( hDC );
|
||||
return GraphicsMode;
|
||||
}
|
||||
@@ -215,7 +215,7 @@ NtGdiGetWorldTransform(HDC hDC,
|
||||
{
|
||||
PDC dc;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
dc = DC_LockDc ( hDC );
|
||||
if (!dc)
|
||||
{
|
||||
@@ -228,7 +228,7 @@ NtGdiGetWorldTransform(HDC hDC,
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyToCaller(XForm, &dc->w.xformWorld2Wnd, sizeof(XFORM));
|
||||
|
||||
DC_UnlockDc ( hDC );
|
||||
@@ -286,16 +286,16 @@ NtGdiLPtoDP ( HDC hDC, LPPOINT UnsafePoints, INT Count )
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (!UnsafePoints || Count <= 0)
|
||||
{
|
||||
DC_UnlockDc(hDC);
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Size = Count * sizeof(POINT);
|
||||
|
||||
|
||||
Points = (LPPOINT)ExAllocatePoolWithTag(PagedPool, Size, TAG_COORD);
|
||||
if(!Points)
|
||||
{
|
||||
@@ -303,7 +303,7 @@ NtGdiLPtoDP ( HDC hDC, LPPOINT UnsafePoints, INT Count )
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(Points, UnsafePoints, Size);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -312,9 +312,9 @@ NtGdiLPtoDP ( HDC hDC, LPPOINT UnsafePoints, INT Count )
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
IntLPtoDP(dc, Points, Count);
|
||||
|
||||
|
||||
Status = MmCopyToCaller(UnsafePoints, Points, Size);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -323,7 +323,7 @@ NtGdiLPtoDP ( HDC hDC, LPPOINT UnsafePoints, INT Count )
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
DC_UnlockDc(hDC);
|
||||
ExFreePool(Points);
|
||||
return TRUE;
|
||||
@@ -338,21 +338,21 @@ NtGdiModifyWorldTransform(HDC hDC,
|
||||
PDC dc;
|
||||
XFORM SafeXForm;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
dc = DC_LockDc(hDC);
|
||||
if (!dc)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (!UnsafeXForm)
|
||||
{
|
||||
DC_UnlockDc(hDC);
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(&SafeXForm, UnsafeXForm, sizeof(XFORM));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -360,7 +360,7 @@ NtGdiModifyWorldTransform(HDC hDC,
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
switch(Mode)
|
||||
{
|
||||
case MWT_IDENTITY:
|
||||
@@ -371,21 +371,21 @@ NtGdiModifyWorldTransform(HDC hDC,
|
||||
dc->w.xformWorld2Wnd.eDx = 0.0f;
|
||||
dc->w.xformWorld2Wnd.eDy = 0.0f;
|
||||
break;
|
||||
|
||||
|
||||
case MWT_LEFTMULTIPLY:
|
||||
IntGdiCombineTransform(&dc->w.xformWorld2Wnd, &SafeXForm, &dc->w.xformWorld2Wnd );
|
||||
break;
|
||||
|
||||
|
||||
case MWT_RIGHTMULTIPLY:
|
||||
IntGdiCombineTransform(&dc->w.xformWorld2Wnd, &dc->w.xformWorld2Wnd, &SafeXForm);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
DC_UnlockDc(hDC);
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
DC_UpdateXforms(dc);
|
||||
DC_UnlockDc(hDC);
|
||||
return TRUE;
|
||||
@@ -408,7 +408,7 @@ NtGdiOffsetViewportOrgEx(HDC hDC,
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (UnsafePoint)
|
||||
{
|
||||
Point.x = dc->vportOrgX;
|
||||
@@ -425,7 +425,7 @@ NtGdiOffsetViewportOrgEx(HDC hDC,
|
||||
dc->vportOrgX += XOffset;
|
||||
dc->vportOrgY += YOffset;
|
||||
DC_UpdateXforms(dc);
|
||||
|
||||
|
||||
DC_UnlockDc ( hDC );
|
||||
return TRUE;
|
||||
}
|
||||
@@ -450,10 +450,10 @@ NtGdiOffsetWindowOrgEx(HDC hDC,
|
||||
{
|
||||
POINT SafePoint;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
SafePoint.x = dc->wndOrgX;
|
||||
SafePoint.y = dc->wndOrgY;
|
||||
|
||||
|
||||
Status = MmCopyToCaller(Point, &SafePoint, sizeof(POINT));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -592,10 +592,10 @@ NtGdiSetViewportExtEx(HDC hDC,
|
||||
{
|
||||
SIZE SafeSize;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
SafeSize.cx = dc->vportExtX;
|
||||
SafeSize.cy = dc->vportExtY;
|
||||
|
||||
|
||||
Status = MmCopyToCaller(Size, &SafeSize, sizeof(SIZE));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -634,10 +634,10 @@ NtGdiSetViewportOrgEx(HDC hDC,
|
||||
{
|
||||
POINT SafePoint;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
SafePoint.x = dc->vportOrgX;
|
||||
SafePoint.y = dc->vportOrgY;
|
||||
|
||||
|
||||
Status = MmCopyToCaller(Point, &SafePoint, sizeof(POINT));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -683,15 +683,15 @@ NtGdiSetWindowExtEx(HDC hDC,
|
||||
DC_UnlockDc(hDC);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (Size)
|
||||
{
|
||||
SIZE SafeSize;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
SafeSize.cx = dc->wndExtX;
|
||||
SafeSize.cy = dc->wndExtY;
|
||||
|
||||
|
||||
Status = MmCopyToCaller(Size, &SafeSize, sizeof(SIZE));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -700,10 +700,10 @@ NtGdiSetWindowExtEx(HDC hDC,
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
dc->wndExtX = XExtent;
|
||||
dc->wndExtY = YExtent;
|
||||
|
||||
|
||||
DC_UpdateXforms(dc);
|
||||
DC_UnlockDc(hDC);
|
||||
|
||||
@@ -725,15 +725,15 @@ NtGdiSetWindowOrgEx(HDC hDC,
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (Point)
|
||||
{
|
||||
POINT SafePoint;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
SafePoint.x = dc->wndOrgX;
|
||||
SafePoint.y = dc->wndOrgY;
|
||||
|
||||
|
||||
Status = MmCopyToCaller(Point, &SafePoint, sizeof(POINT));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -742,10 +742,10 @@ NtGdiSetWindowOrgEx(HDC hDC,
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
dc->wndOrgX = X;
|
||||
dc->wndOrgY = Y;
|
||||
|
||||
|
||||
DC_UpdateXforms(dc);
|
||||
DC_UnlockDc(hDC);
|
||||
|
||||
@@ -759,35 +759,35 @@ NtGdiSetWorldTransform(HDC hDC,
|
||||
{
|
||||
PDC dc;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
dc = DC_LockDc (hDC);
|
||||
if ( !dc )
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (!XForm)
|
||||
{
|
||||
DC_UnlockDc( hDC );
|
||||
/* Win doesn't set LastError */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/* Check that graphics mode is GM_ADVANCED */
|
||||
if ( dc->w.GraphicsMode != GM_ADVANCED )
|
||||
{
|
||||
DC_UnlockDc( hDC );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(&dc->w.xformWorld2Wnd, XForm, sizeof(XFORM));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
DC_UnlockDc( hDC );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
DC_UpdateXforms (dc);
|
||||
DC_UnlockDc( hDC );
|
||||
return TRUE;
|
||||
|
||||
@@ -390,7 +390,7 @@ SetupDevMode(PDEVMODEW DevMode, ULONG DisplayNumber)
|
||||
if (Valid)
|
||||
{
|
||||
ProfilePath = ExAllocatePoolWithTag(PagedPool,
|
||||
(wcslen(RegistryPath.Buffer) +
|
||||
(wcslen(RegistryPath.Buffer) +
|
||||
wcslen(Insert) + 1) * sizeof(WCHAR),
|
||||
TAG_DC);
|
||||
if (NULL != ProfilePath)
|
||||
@@ -732,7 +732,7 @@ IntGdiCreateDC(PUNICODE_STRING Driver,
|
||||
SURFOBJ *SurfObj;
|
||||
HRGN hVisRgn;
|
||||
UNICODE_STRING StdDriver;
|
||||
|
||||
|
||||
RtlInitUnicodeString(&StdDriver, L"DISPLAY");
|
||||
|
||||
if (NULL == Driver || 0 == RtlCompareUnicodeString(Driver, &StdDriver, TRUE))
|
||||
@@ -806,7 +806,7 @@ IntGdiCreateDC(PUNICODE_STRING Driver,
|
||||
|
||||
NewDC->w.hPalette = NewDC->DevInfo->hpalDefault;
|
||||
NewDC->w.ROPmode = R2_COPYPEN;
|
||||
|
||||
|
||||
DC_UnlockDc( hNewDC );
|
||||
|
||||
hVisRgn = NtGdiCreateRectRgn(0, 0, SurfObj->sizlBitmap.cx,
|
||||
@@ -827,7 +827,7 @@ IntGdiCreateDC(PUNICODE_STRING Driver,
|
||||
{
|
||||
DC_UnlockDc( hNewDC );
|
||||
}
|
||||
|
||||
|
||||
return hNewDC;
|
||||
}
|
||||
|
||||
@@ -841,7 +841,7 @@ NtGdiCreateDC(PUNICODE_STRING Driver,
|
||||
DEVMODEW SafeInitData;
|
||||
HDC Ret;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
if(InitData)
|
||||
{
|
||||
Status = MmCopyFromCaller(&SafeInitData, InitData, sizeof(DEVMODEW));
|
||||
@@ -852,7 +852,7 @@ NtGdiCreateDC(PUNICODE_STRING Driver,
|
||||
}
|
||||
/* FIXME - InitData can have some more bytes! */
|
||||
}
|
||||
|
||||
|
||||
if(Driver)
|
||||
{
|
||||
Status = IntSafeCopyUnicodeString(&SafeDriver, Driver);
|
||||
@@ -862,7 +862,7 @@ NtGdiCreateDC(PUNICODE_STRING Driver,
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(Device)
|
||||
{
|
||||
Status = IntSafeCopyUnicodeString(&SafeDevice, Device);
|
||||
@@ -873,9 +873,9 @@ NtGdiCreateDC(PUNICODE_STRING Driver,
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGdiCreateDC(&SafeDriver, &SafeDevice, NULL, &SafeInitData, FALSE);
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -889,7 +889,7 @@ NtGdiCreateIC(PUNICODE_STRING Driver,
|
||||
DEVMODEW SafeInitData;
|
||||
HDC Ret;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
if(InitData)
|
||||
{
|
||||
Status = MmCopyFromCaller(&SafeInitData, InitData, sizeof(DEVMODEW));
|
||||
@@ -900,7 +900,7 @@ NtGdiCreateIC(PUNICODE_STRING Driver,
|
||||
}
|
||||
/* FIXME - InitData can have some more bytes! */
|
||||
}
|
||||
|
||||
|
||||
if(Driver)
|
||||
{
|
||||
Status = IntSafeCopyUnicodeString(&SafeDriver, Driver);
|
||||
@@ -910,7 +910,7 @@ NtGdiCreateIC(PUNICODE_STRING Driver,
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(Device)
|
||||
{
|
||||
Status = IntSafeCopyUnicodeString(&SafeDevice, Device);
|
||||
@@ -921,11 +921,11 @@ NtGdiCreateIC(PUNICODE_STRING Driver,
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGdiCreateDC(NULL == Driver ? NULL : &SafeDriver,
|
||||
NULL == Device ? NULL : &SafeDevice, NULL,
|
||||
NULL == InitData ? NULL : &SafeInitData, TRUE);
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -1030,13 +1030,13 @@ NtGdiGetCurrentObject(HDC hDC, UINT ObjectType)
|
||||
{
|
||||
HGDIOBJ SelObject;
|
||||
DC *dc;
|
||||
|
||||
|
||||
if(!(dc = DC_LockDc(hDC)))
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
switch(ObjectType)
|
||||
{
|
||||
case OBJ_PEN:
|
||||
@@ -1064,7 +1064,7 @@ NtGdiGetCurrentObject(HDC hDC, UINT ObjectType)
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
DC_UnlockDc(hDC);
|
||||
return SelObject;
|
||||
}
|
||||
@@ -1076,7 +1076,7 @@ IntGdiGetDCOrgEx(DC *dc, LPPOINT Point)
|
||||
{
|
||||
Point->x = dc->w.DCOrgX;
|
||||
Point->y = dc->w.DCOrgY;
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1087,22 +1087,22 @@ NtGdiGetDCOrgEx(HDC hDC, LPPOINT Point)
|
||||
DC *dc;
|
||||
POINT SafePoint;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
if(!Point)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
dc = DC_LockDc(hDC);
|
||||
if(!dc)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGdiGetDCOrgEx(dc, &SafePoint);
|
||||
|
||||
|
||||
Status = MmCopyToCaller(Point, &SafePoint, sizeof(POINT));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -1110,7 +1110,7 @@ NtGdiGetDCOrgEx(HDC hDC, LPPOINT Point)
|
||||
DC_UnlockDc(hDC);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
DC_UnlockDc(hDC);
|
||||
return Ret;
|
||||
}
|
||||
@@ -1586,7 +1586,7 @@ IntGdiGetObject(HANDLE Handle, INT Count, LPVOID Buffer)
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
ObjectType = GDIOBJ_GetObjectType(Handle);
|
||||
switch (ObjectType)
|
||||
{
|
||||
@@ -1637,16 +1637,16 @@ NtGdiGetObject(HANDLE handle, INT count, LPVOID buffer)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
SafeBuf = ExAllocatePoolWithTag(PagedPool, count, TAG_GDIOBJ);
|
||||
if(!SafeBuf)
|
||||
{
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGdiGetObject(handle, count, SafeBuf);
|
||||
|
||||
|
||||
Status = MmCopyToCaller(buffer, SafeBuf, count);
|
||||
ExFreePool(SafeBuf);
|
||||
if(!NT_SUCCESS(Status))
|
||||
@@ -1872,7 +1872,7 @@ NtGdiSelectObject(HDC hDC, HGDIOBJ hGDIObj)
|
||||
BOOLEAN Failed;
|
||||
|
||||
if(!hDC || !hGDIObj) return NULL;
|
||||
|
||||
|
||||
dc = DC_LockDc(hDC);
|
||||
if (NULL == dc)
|
||||
{
|
||||
@@ -2045,7 +2045,7 @@ DC_AllocDC(PUNICODE_STRING Driver)
|
||||
PDC NewDC;
|
||||
HDC hDC;
|
||||
PWSTR Buf = NULL;
|
||||
|
||||
|
||||
if (Driver != NULL)
|
||||
{
|
||||
Buf = ExAllocatePoolWithTag(PagedPool, Driver->MaximumLength, TAG_DC);
|
||||
@@ -2068,7 +2068,7 @@ DC_AllocDC(PUNICODE_STRING Driver)
|
||||
|
||||
NewDC = DC_LockDc(hDC);
|
||||
/* FIXME - Handle NewDC == NULL! */
|
||||
|
||||
|
||||
if (Driver != NULL)
|
||||
{
|
||||
RtlCopyMemory(&NewDC->DriverName, Driver, sizeof(UNICODE_STRING));
|
||||
@@ -2297,7 +2297,7 @@ IntEnumDisplaySettings(
|
||||
DEVMODEW DevMode;
|
||||
INT Size, OldSize;
|
||||
ULONG DisplayNumber = 0; /* only default display supported */
|
||||
|
||||
|
||||
DPRINT1("DevMode->dmSize = %d\n", pDevMode->dmSize);
|
||||
DPRINT1("DevMode->dmExtraSize = %d\n", pDevMode->dmDriverExtra);
|
||||
if (pDevMode->dmSize != SIZEOF_DEVMODEW_300 &&
|
||||
@@ -2310,7 +2310,7 @@ IntEnumDisplaySettings(
|
||||
|
||||
if (iModeNum == ENUM_CURRENT_SETTINGS)
|
||||
{
|
||||
CachedMode = &PrimarySurface.DMW;
|
||||
CachedMode = &PrimarySurface.DMW;
|
||||
ASSERT(CachedMode->dmSize > 0);
|
||||
}
|
||||
else if (iModeNum == ENUM_REGISTRY_SETTINGS)
|
||||
@@ -2337,7 +2337,7 @@ IntEnumDisplaySettings(
|
||||
UNICODE_STRING DriverFileNames;
|
||||
LPWSTR CurrentName;
|
||||
DRVENABLEDATA DrvEnableData;
|
||||
|
||||
|
||||
/* Retrieve DDI driver names from registry */
|
||||
RtlInitUnicodeString(&DriverFileNames, NULL);
|
||||
if (!FindDriverFileNames(&DriverFileNames, DisplayNumber))
|
||||
@@ -2345,13 +2345,13 @@ IntEnumDisplaySettings(
|
||||
DPRINT1("FindDriverFileNames failed\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (!HalQueryDisplayOwnership())
|
||||
{
|
||||
IntCreatePrimarySurface();
|
||||
PrimarySurfaceCreated = TRUE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* DriverFileNames may be a list of drivers in REG_SZ_MULTI format,
|
||||
* scan all of them until a good one found.
|
||||
@@ -2362,7 +2362,7 @@ IntEnumDisplaySettings(
|
||||
{
|
||||
INT i;
|
||||
PGD_ENABLEDRIVER GDEnableDriver;
|
||||
|
||||
|
||||
/* Get the DDI driver's entry point */
|
||||
GDEnableDriver = DRIVER_FindDDIDriver(CurrentName);
|
||||
if (NULL == GDEnableDriver)
|
||||
@@ -2370,30 +2370,30 @@ IntEnumDisplaySettings(
|
||||
DPRINT("FindDDIDriver failed for %S\n", CurrentName);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
/* Call DDI driver's EnableDriver function */
|
||||
RtlZeroMemory(&DrvEnableData, sizeof (DrvEnableData));
|
||||
|
||||
|
||||
if (!GDEnableDriver(DDI_DRIVER_VERSION_NT5_01, sizeof (DrvEnableData), &DrvEnableData))
|
||||
{
|
||||
DPRINT("DrvEnableDriver failed for %S\n", CurrentName);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
CachedDevModesEnd = CachedDevModes;
|
||||
|
||||
|
||||
/* find DrvGetModes function */
|
||||
for (i = 0; i < DrvEnableData.c; i++)
|
||||
{
|
||||
PDRVFN DrvFn = DrvEnableData.pdrvfn + i;
|
||||
PGD_GETMODES GetModes;
|
||||
INT SizeNeeded, SizeUsed;
|
||||
|
||||
|
||||
if (DrvFn->iFunc != INDEX_DrvGetModes)
|
||||
continue;
|
||||
|
||||
|
||||
GetModes = (PGD_GETMODES)DrvFn->pfn;
|
||||
|
||||
|
||||
/* make sure we have enough memory to hold the modes */
|
||||
SizeNeeded = GetModes((HANDLE)(PrimarySurface.VideoFileObject->DeviceObject), 0, NULL);
|
||||
if (SizeNeeded <= 0)
|
||||
@@ -2401,12 +2401,12 @@ IntEnumDisplaySettings(
|
||||
DPRINT("DrvGetModes failed for %S\n", CurrentName);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
SizeUsed = CachedDevModesEnd - CachedDevModes;
|
||||
if (SizeOfCachedDevModes - SizeUsed < SizeNeeded)
|
||||
{
|
||||
PVOID NewBuffer;
|
||||
|
||||
|
||||
SizeOfCachedDevModes += SizeNeeded;
|
||||
NewBuffer = ExAllocatePool(PagedPool, SizeOfCachedDevModes);
|
||||
if (NewBuffer == NULL)
|
||||
@@ -2431,7 +2431,7 @@ IntEnumDisplaySettings(
|
||||
CachedDevModes = NewBuffer;
|
||||
CachedDevModesEnd = (DEVMODEW *)((PCHAR)NewBuffer + SizeUsed);
|
||||
}
|
||||
|
||||
|
||||
/* query modes */
|
||||
SizeNeeded = GetModes((HANDLE)(PrimarySurface.VideoFileObject->DeviceObject),
|
||||
SizeOfCachedDevModes - SizeUsed,
|
||||
@@ -2447,12 +2447,12 @@ IntEnumDisplaySettings(
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (PrimarySurfaceCreated)
|
||||
{
|
||||
IntDestroyPrimarySurface();
|
||||
}
|
||||
|
||||
|
||||
RtlFreeUnicodeString(&DriverFileNames);
|
||||
}
|
||||
|
||||
@@ -2483,7 +2483,7 @@ IntEnumDisplaySettings(
|
||||
RtlCopyMemory(pDevMode, CachedMode, Size);
|
||||
RtlZeroMemory((PCHAR)pDevMode + Size, OldSize - Size);
|
||||
pDevMode->dmSize = OldSize;
|
||||
|
||||
|
||||
Size = OldSize = pDevMode->dmDriverExtra;
|
||||
if (Size > CachedMode->dmDriverExtra)
|
||||
Size = CachedMode->dmDriverExtra;
|
||||
@@ -2532,11 +2532,11 @@ IntChangeDisplaySettings(
|
||||
case 0: /* Dynamically change graphics mode */
|
||||
Ret = DISP_CHANGE_FAILED;
|
||||
break;
|
||||
|
||||
|
||||
case CDS_FULLSCREEN: /* Given mode is temporary */
|
||||
Ret = DISP_CHANGE_FAILED;
|
||||
break;
|
||||
|
||||
|
||||
case CDS_UPDATEREGISTRY:
|
||||
{
|
||||
UNICODE_STRING ObjectName;
|
||||
@@ -2550,7 +2550,7 @@ IntChangeDisplaySettings(
|
||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
HANDLE DevInstRegKey;
|
||||
ULONG NewValue;
|
||||
|
||||
|
||||
/* Get device name (pDeviceName is "\.\xxx") */
|
||||
for (LastSlash = pDeviceName->Length / sizeof(WCHAR); LastSlash > 0; LastSlash--)
|
||||
{
|
||||
@@ -2562,11 +2562,11 @@ IntChangeDisplaySettings(
|
||||
ObjectName.Length -= LastSlash * sizeof(WCHAR);
|
||||
ObjectName.MaximumLength -= LastSlash * sizeof(WCHAR);
|
||||
ObjectName.Buffer += LastSlash;
|
||||
|
||||
|
||||
KernelModeName.Length = 0;
|
||||
KernelModeName.MaximumLength = sizeof(KernelModeNameBuffer);
|
||||
KernelModeName.Buffer = KernelModeNameBuffer;
|
||||
|
||||
|
||||
/* Open \??\xxx (ex: "\??\DISPLAY1") */
|
||||
Status = RtlAppendUnicodeToString(&KernelModeName, L"\\??\\");
|
||||
if (!NT_SUCCESS(Status)) return DISP_CHANGE_FAILED;
|
||||
@@ -2593,11 +2593,11 @@ IntChangeDisplaySettings(
|
||||
ObjectName.Length -= LastSlash * sizeof(WCHAR);
|
||||
ObjectName.MaximumLength -= LastSlash * sizeof(WCHAR);
|
||||
ObjectName.Buffer += LastSlash;
|
||||
|
||||
|
||||
RegistryKey.Length = 0;
|
||||
RegistryKey.MaximumLength = sizeof(RegistryKeyBuffer);
|
||||
RegistryKey.Buffer = RegistryKeyBuffer;
|
||||
|
||||
|
||||
/* Open registry key */
|
||||
Status = RtlAppendUnicodeToString(&RegistryKey,
|
||||
L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Hardware Profiles\\Current\\System\\CurrentControlSet\\Services\\");
|
||||
@@ -2607,13 +2607,13 @@ IntChangeDisplaySettings(
|
||||
Status = RtlAppendUnicodeToString(&RegistryKey,
|
||||
L"\\Device0");
|
||||
if (!NT_SUCCESS(Status)) { ObDereferenceObject(DeviceObject); return DISP_CHANGE_FAILED; }
|
||||
|
||||
|
||||
InitializeObjectAttributes(&ObjectAttributes, &RegistryKey,
|
||||
OBJ_CASE_INSENSITIVE, NULL, NULL);
|
||||
Status = ZwOpenKey(&DevInstRegKey, GENERIC_READ | GENERIC_WRITE, &ObjectAttributes);
|
||||
ObDereferenceObject(DeviceObject);
|
||||
if (!NT_SUCCESS(Status)) return DISP_CHANGE_FAILED;
|
||||
|
||||
|
||||
/* Update needed fields */
|
||||
if (NT_SUCCESS(Status) && DevMode->dmFields & DM_BITSPERPEL)
|
||||
{
|
||||
@@ -2621,21 +2621,21 @@ IntChangeDisplaySettings(
|
||||
NewValue = DevMode->dmBitsPerPel;
|
||||
Status = ZwSetValueKey(DevInstRegKey, &RegistryKey, 0, REG_DWORD, &NewValue, sizeof(NewValue));
|
||||
}
|
||||
|
||||
|
||||
if (NT_SUCCESS(Status) && DevMode->dmFields & DM_PELSWIDTH)
|
||||
{
|
||||
RtlInitUnicodeString(&RegistryKey, L"DefaultSettings.XResolution");
|
||||
NewValue = DevMode->dmPelsWidth;
|
||||
Status = ZwSetValueKey(DevInstRegKey, &RegistryKey, 0, REG_DWORD, &NewValue, sizeof(NewValue));
|
||||
}
|
||||
|
||||
|
||||
if (NT_SUCCESS(Status) && DevMode->dmFields & DM_PELSHEIGHT)
|
||||
{
|
||||
RtlInitUnicodeString(&RegistryKey, L"DefaultSettings.YResolution");
|
||||
NewValue = DevMode->dmPelsHeight;
|
||||
Status = ZwSetValueKey(DevInstRegKey, &RegistryKey, 0, REG_DWORD, &NewValue, sizeof(NewValue));
|
||||
}
|
||||
|
||||
|
||||
ZwClose(DevInstRegKey);
|
||||
if (NT_SUCCESS(Status))
|
||||
Ret = DISP_CHANGE_RESTART;
|
||||
@@ -2643,11 +2643,11 @@ IntChangeDisplaySettings(
|
||||
Ret = DISP_CHANGE_FAILED;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case CDS_TEST: /* Test if the mode could be set */
|
||||
Ret = DISP_CHANGE_FAILED;
|
||||
break;
|
||||
|
||||
|
||||
#ifdef CDS_VIDEOPARAMETERS
|
||||
case CDS_VIDEOPARAMETERS:
|
||||
if (lParam == NULL)
|
||||
@@ -2655,12 +2655,12 @@ IntChangeDisplaySettings(
|
||||
Ret = DISP_CHANGE_FAILED;
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
||||
default:
|
||||
Ret = DISP_CHANGE_BADFLAGS;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -418,7 +418,7 @@ NtGdiGetDIBits(HDC hDC,
|
||||
case BMF_8RLE:
|
||||
Info->bmiHeader.biCompression = BI_RLE8;
|
||||
break;
|
||||
case BMF_JPEG:
|
||||
case BMF_JPEG:
|
||||
Info->bmiHeader.biCompression = BI_JPEG;
|
||||
break;
|
||||
case BMF_PNG:
|
||||
@@ -427,8 +427,8 @@ NtGdiGetDIBits(HDC hDC,
|
||||
}
|
||||
Info->bmiHeader.biSizeImage = BitmapObj->SurfObj.cjBits;
|
||||
Info->bmiHeader.biXPelsPerMeter = 0; /* FIXME */
|
||||
Info->bmiHeader.biYPelsPerMeter = 0; /* FIXME */
|
||||
Info->bmiHeader.biClrUsed =
|
||||
Info->bmiHeader.biYPelsPerMeter = 0; /* FIXME */
|
||||
Info->bmiHeader.biClrUsed =
|
||||
Info->bmiHeader.biClrImportant = 1 << Info->bmiHeader.biBitCount; /* FIXME */
|
||||
Result = BitmapObj->SurfObj.sizlBitmap.cy;
|
||||
}
|
||||
@@ -462,7 +462,7 @@ NtGdiGetDIBits(HDC hDC,
|
||||
/* FIXME - DestPalette can be NULL!!!! Don't assert here!!! */
|
||||
ASSERT(DestPalette);
|
||||
DestPaletteType = DestPalette->Mode;
|
||||
|
||||
|
||||
/* Copy palette. */
|
||||
/* FIXME: This is largely incomplete. */
|
||||
if (Info->bmiHeader.biBitCount <= 8)
|
||||
@@ -492,7 +492,7 @@ NtGdiGetDIBits(HDC hDC,
|
||||
|
||||
XlateObj = IntEngCreateXlate(
|
||||
DestPaletteType, SourcePaletteType, hDestPalette, hSourcePalette);
|
||||
|
||||
|
||||
SourcePoint.x = 0;
|
||||
SourcePoint.y = StartScan;
|
||||
|
||||
@@ -507,7 +507,7 @@ NtGdiGetDIBits(HDC hDC,
|
||||
{
|
||||
Result = ScanLines;
|
||||
}
|
||||
|
||||
|
||||
EngDeleteXlate(XlateObj);
|
||||
EngUnlockSurface(DestSurfObj);
|
||||
}
|
||||
@@ -539,7 +539,7 @@ INT STDCALL NtGdiStretchDIBits(HDC hDC,
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
hdcMem = NtGdiCreateCompatableDC(hDC);
|
||||
hBitmap = NtGdiCreateCompatibleBitmap(hDC, BitsInfo->bmiHeader.biWidth,
|
||||
@@ -900,7 +900,7 @@ DIB_CreateDIBSection(
|
||||
{
|
||||
SetLastWin32Error(ERROR_NO_SYSTEM_RESOURCES);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
bmp = BITMAPOBJ_LockBitmap(res);
|
||||
if (NULL == bmp)
|
||||
{
|
||||
|
||||
@@ -69,7 +69,7 @@ IntGdiPolygon(PDC dc,
|
||||
UnsafePoints[CurrentPoint].y += dc->w.DCOrgY;
|
||||
}
|
||||
|
||||
if (PATH_IsPathOpen(dc->w.path))
|
||||
if (PATH_IsPathOpen(dc->w.path))
|
||||
ret = PATH_Polygon(dc, UnsafePoints, Count );
|
||||
else
|
||||
{
|
||||
@@ -131,7 +131,7 @@ IntGdiPolygon(PDC dc,
|
||||
}
|
||||
|
||||
BITMAPOBJ_UnlockBitmap(dc->w.hBitmap);
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -148,7 +148,7 @@ IntGdiPolyPolygon(DC *dc,
|
||||
|
||||
pt = Points;
|
||||
pc = PolyCounts;
|
||||
|
||||
|
||||
for (i=0;i<Count;i++)
|
||||
{
|
||||
ret = IntGdiPolygon ( dc, pt, *pc );
|
||||
@@ -158,7 +158,7 @@ IntGdiPolyPolygon(DC *dc,
|
||||
}
|
||||
pt+=*pc++;
|
||||
}
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -182,7 +182,7 @@ NtGdiChord(HDC hDC,
|
||||
|
||||
/*
|
||||
* NtGdiEllipse
|
||||
*
|
||||
*
|
||||
* Author
|
||||
* Filip Navara
|
||||
*
|
||||
@@ -299,27 +299,27 @@ NtGdiEllipse(
|
||||
nx = RadiusY;
|
||||
ny = RadiusX;
|
||||
}
|
||||
|
||||
|
||||
da = -1;
|
||||
db = 0xFFFF;
|
||||
ix = 0;
|
||||
ix = 0;
|
||||
iy = nx * 64;
|
||||
NewA = 0;
|
||||
NewA = 0;
|
||||
NewB = (iy + 32) >> 6;
|
||||
NewC = 0;
|
||||
NewC = 0;
|
||||
NewD = (NewB * ny) / nx;
|
||||
|
||||
do {
|
||||
A = NewA;
|
||||
B = NewB;
|
||||
C = NewC;
|
||||
A = NewA;
|
||||
B = NewB;
|
||||
C = NewC;
|
||||
D = NewD;
|
||||
|
||||
ix += iy / nx;
|
||||
iy -= ix / nx;
|
||||
NewA = (ix + 32) >> 6;
|
||||
NewA = (ix + 32) >> 6;
|
||||
NewB = (iy + 32) >> 6;
|
||||
NewC = (NewA * ny) / nx;
|
||||
NewC = (NewA * ny) / nx;
|
||||
NewD = (NewB * ny) / nx;
|
||||
|
||||
if (RadiusX > RadiusY)
|
||||
@@ -338,7 +338,7 @@ NtGdiEllipse(
|
||||
/*
|
||||
* Draw the lines going from inner to outer (+ mirrored).
|
||||
*/
|
||||
|
||||
|
||||
if ((A > da) && (A < db))
|
||||
{
|
||||
PUTLINE(CenterX - D, CenterY + A, CenterX + D, CenterY + A, FillBrushInst);
|
||||
@@ -352,9 +352,9 @@ NtGdiEllipse(
|
||||
/*
|
||||
* Draw the lines going from outer to inner (+ mirrored).
|
||||
*/
|
||||
|
||||
|
||||
if ((B < db) && (B > da))
|
||||
{
|
||||
{
|
||||
PUTLINE(CenterX - C, CenterY + B, CenterX + C, CenterY + B, FillBrushInst);
|
||||
PUTLINE(CenterX - C, CenterY - B, CenterX + C, CenterY - B, FillBrushInst);
|
||||
db = B;
|
||||
@@ -815,14 +815,14 @@ return TRUE;
|
||||
|
||||
#if 0
|
||||
|
||||
//When the fill mode is ALTERNATE, GDI fills the area between odd-numbered and
|
||||
//even-numbered polygon sides on each scan line. That is, GDI fills the area between the
|
||||
//first and second side, between the third and fourth side, and so on.
|
||||
//When the fill mode is ALTERNATE, GDI fills the area between odd-numbered and
|
||||
//even-numbered polygon sides on each scan line. That is, GDI fills the area between the
|
||||
//first and second side, between the third and fourth side, and so on.
|
||||
|
||||
//WINDING Selects winding mode (fills any region with a nonzero winding value).
|
||||
//WINDING Selects winding mode (fills any region with a nonzero winding value).
|
||||
//When the fill mode is WINDING, GDI fills any region that has a nonzero winding value.
|
||||
//This value is defined as the number of times a pen used to draw the polygon would go around the region.
|
||||
//The direction of each edge of the polygon is important.
|
||||
//The direction of each edge of the polygon is important.
|
||||
|
||||
extern BOOL FillPolygon(PDC dc,
|
||||
SURFOBJ *SurfObj,
|
||||
@@ -844,13 +844,13 @@ NtGdiPolygon(HDC hDC,
|
||||
LPPOINT Safept;
|
||||
NTSTATUS Status;
|
||||
BOOL Ret = FALSE;
|
||||
|
||||
|
||||
if ( Count < 2 )
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
dc = DC_LockDc(hDC);
|
||||
if(!dc)
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
@@ -872,12 +872,12 @@ NtGdiPolygon(HDC hDC,
|
||||
SetLastNtError(Status);
|
||||
else
|
||||
Ret = IntGdiPolygon(dc, Safept, Count);
|
||||
|
||||
|
||||
ExFreePool(Safept);
|
||||
}
|
||||
DC_UnlockDc(hDC);
|
||||
}
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -894,7 +894,7 @@ NtGdiPolyPolygon(HDC hDC,
|
||||
LPINT SafePolyPoints;
|
||||
NTSTATUS Status;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
dc = DC_LockDc(hDC);
|
||||
if(!dc)
|
||||
{
|
||||
@@ -907,7 +907,7 @@ NtGdiPolyPolygon(HDC hDC,
|
||||
/* Yes, Windows really returns TRUE in this case */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
if(Count > 0)
|
||||
{
|
||||
Safept = ExAllocatePoolWithTag(PagedPool, (sizeof(POINT) + sizeof(INT)) * Count, TAG_SHAPE);
|
||||
@@ -917,9 +917,9 @@ NtGdiPolyPolygon(HDC hDC,
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
SafePolyPoints = (LPINT)&Safept[Count];
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(Safept, Points, sizeof(POINT) * Count);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -943,12 +943,12 @@ NtGdiPolyPolygon(HDC hDC,
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGdiPolyPolygon(dc, Safept, SafePolyPoints, Count);
|
||||
|
||||
|
||||
ExFreePool(Safept);
|
||||
DC_UnlockDc(hDC);
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -1078,7 +1078,7 @@ NtGdiRectangle(HDC hDC,
|
||||
{
|
||||
DC *dc;
|
||||
BOOL ret; // default to failure
|
||||
|
||||
|
||||
dc = DC_LockDc(hDC);
|
||||
if(!dc)
|
||||
{
|
||||
@@ -1091,7 +1091,7 @@ NtGdiRectangle(HDC hDC,
|
||||
/* Yes, Windows really returns TRUE in this case */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
ret = IntRectangle ( dc, LeftRect, TopRect, RightRect, BottomRect );
|
||||
DC_UnlockDc ( hDC );
|
||||
|
||||
@@ -1132,7 +1132,7 @@ IntRoundRect(
|
||||
|
||||
xradius = xCurveDiameter >> 1;
|
||||
yradius = yCurveDiameter >> 1;
|
||||
|
||||
|
||||
left += dc->w.DCOrgX;
|
||||
right += dc->w.DCOrgX;
|
||||
top += dc->w.DCOrgY;
|
||||
@@ -1419,18 +1419,18 @@ IntGdiGradientFill(
|
||||
POINTL DitherOrg;
|
||||
ULONG Mode, i;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
ASSERT(dc);
|
||||
ASSERT(pVertex);
|
||||
ASSERT(uVertex);
|
||||
ASSERT(pMesh);
|
||||
ASSERT(uMesh);
|
||||
|
||||
|
||||
/* check parameters */
|
||||
if(ulMode & GRADIENT_FILL_TRIANGLE)
|
||||
{
|
||||
PGRADIENT_TRIANGLE tr = (PGRADIENT_TRIANGLE)pMesh;
|
||||
|
||||
|
||||
for(i = 0; i < uMesh; i++, tr++)
|
||||
{
|
||||
if(tr->Vertex1 >= uVertex ||
|
||||
@@ -1454,7 +1454,7 @@ IntGdiGradientFill(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* calculate extent */
|
||||
Extent.left = Extent.right = pVertex->x;
|
||||
Extent.top = Extent.bottom = pVertex->y;
|
||||
@@ -1465,27 +1465,27 @@ IntGdiGradientFill(
|
||||
Extent.top = min(Extent.top, (pVertex + i)->y);
|
||||
Extent.bottom = max(Extent.bottom, (pVertex + i)->y);
|
||||
}
|
||||
|
||||
|
||||
DitherOrg.x = dc->w.DCOrgX;
|
||||
DitherOrg.y = dc->w.DCOrgY;
|
||||
Extent.left += DitherOrg.x;
|
||||
Extent.right += DitherOrg.x;
|
||||
Extent.top += DitherOrg.y;
|
||||
Extent.bottom += DitherOrg.y;
|
||||
|
||||
|
||||
BitmapObj = BITMAPOBJ_LockBitmap(dc->w.hBitmap);
|
||||
/* FIXME - BitmapObj can be NULL!!! Don't assert but handle this case gracefully! */
|
||||
ASSERT(BitmapObj);
|
||||
|
||||
|
||||
PalDestGDI = PALETTE_LockPalette(dc->w.hPalette);
|
||||
/* FIXME - PalDestGDI can be NULL!!! Don't assert but handle this case gracefully! */
|
||||
ASSERT(PalDestGDI);
|
||||
Mode = PalDestGDI->Mode;
|
||||
PALETTE_UnlockPalette(dc->w.hPalette);
|
||||
|
||||
|
||||
XlateObj = (XLATEOBJ*)IntEngCreateXlate(Mode, PAL_RGB, dc->w.hPalette, NULL);
|
||||
ASSERT(XlateObj);
|
||||
|
||||
|
||||
Ret = IntEngGradientFill(BitmapObj,
|
||||
dc->CombinedClip,
|
||||
XlateObj,
|
||||
@@ -1496,10 +1496,10 @@ IntGdiGradientFill(
|
||||
&Extent,
|
||||
&DitherOrg,
|
||||
ulMode);
|
||||
|
||||
|
||||
BITMAPOBJ_UnlockBitmap(dc->w.hBitmap);
|
||||
EngDeleteXlate(XlateObj);
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -1519,7 +1519,7 @@ NtGdiGradientFill(
|
||||
PVOID SafeMesh;
|
||||
ULONG SizeMesh;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
dc = DC_LockDc(hdc);
|
||||
if(!dc)
|
||||
{
|
||||
@@ -1538,7 +1538,7 @@ NtGdiGradientFill(
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
switch(ulMode)
|
||||
{
|
||||
case GRADIENT_FILL_RECT_H:
|
||||
@@ -1577,9 +1577,9 @@ NtGdiGradientFill(
|
||||
SetLastNtError(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGdiGradientFill(dc, SafeVertex, uVertex, SafeMesh, uMesh, ulMode);
|
||||
|
||||
|
||||
DC_UnlockDc(hdc);
|
||||
ExFreePool(SafeVertex);
|
||||
return Ret;
|
||||
|
||||
@@ -61,7 +61,7 @@ typedef struct _GDI_HANDLE_TABLE
|
||||
/* the table must be located at the beginning of this structure so it can be
|
||||
properly mapped! */
|
||||
GDI_TABLE_ENTRY Entries[GDI_HANDLE_COUNT];
|
||||
|
||||
|
||||
PPAGED_LOOKASIDE_LIST LookasideLists;
|
||||
|
||||
SLIST_HEADER FreeEntriesHead;
|
||||
@@ -134,7 +134,7 @@ GDIOBJ_iAllocHandleTable(VOID)
|
||||
|
||||
handleTable = NULL;
|
||||
htSize = sizeof(GDI_HANDLE_TABLE);
|
||||
|
||||
|
||||
IntUserCreateSharedSection(SessionSharedSectionPool,
|
||||
(PVOID*)&handleTable,
|
||||
&htSize);
|
||||
@@ -395,11 +395,11 @@ LockHandle:
|
||||
if(PrevProcId == NULL)
|
||||
{
|
||||
HGDIOBJ Handle;
|
||||
|
||||
|
||||
ASSERT(Entry->KernelData == NULL);
|
||||
|
||||
Entry->KernelData = ObjectBody;
|
||||
|
||||
|
||||
/* copy the reuse-counter */
|
||||
TypeInfo |= Entry->Type & GDI_HANDLE_REUSE_MASK;
|
||||
|
||||
@@ -1077,7 +1077,7 @@ LockHandle:
|
||||
NewType = GDI_HANDLE_GET_TYPE(*hObj);
|
||||
NewType |= NewType >> 16;
|
||||
NewType |= (ULONG_PTR)(*hObj) & GDI_HANDLE_REUSE_MASK;
|
||||
|
||||
|
||||
/* This is the type that the object should have right now, save it */
|
||||
OldType = NewType;
|
||||
/* As the object should be a stock object, set it's flag, but only in the upper 16 bits */
|
||||
@@ -1441,7 +1441,7 @@ GDI_MapHandleTable(PEPROCESS Process)
|
||||
{
|
||||
return MappedGdiTable;
|
||||
}
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ NtGdiCheckColorsInGamut(HDC hDC,
|
||||
BOOL
|
||||
STDCALL
|
||||
NtGdiColorMatchToTarget(HDC hDC,
|
||||
HDC hDCTarget,
|
||||
HDC hDCTarget,
|
||||
DWORD Action)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
@@ -81,7 +81,7 @@ NtGdiGetColorSpace(HDC hDC)
|
||||
|
||||
BOOL
|
||||
STDCALL
|
||||
NtGdiGetDeviceGammaRamp(HDC hDC,
|
||||
NtGdiGetDeviceGammaRamp(HDC hDC,
|
||||
LPVOID Ramp)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
@@ -132,19 +132,19 @@ NtGdiSetICMMode(HDC hDC,
|
||||
INT EnableICM)
|
||||
{
|
||||
/* FIXME: this should be coded someday */
|
||||
if (EnableICM == ICM_OFF)
|
||||
if (EnableICM == ICM_OFF)
|
||||
{
|
||||
return ICM_OFF;
|
||||
}
|
||||
if (EnableICM == ICM_ON)
|
||||
if (EnableICM == ICM_ON)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (EnableICM == ICM_QUERY)
|
||||
if (EnableICM == ICM_QUERY)
|
||||
{
|
||||
return ICM_OFF;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -159,8 +159,8 @@ NtGdiSetICMProfile(HDC hDC,
|
||||
|
||||
BOOL
|
||||
STDCALL
|
||||
NtGdiUpdateICMRegKey(DWORD Reserved,
|
||||
LPWSTR CMID,
|
||||
NtGdiUpdateICMRegKey(DWORD Reserved,
|
||||
LPWSTR CMID,
|
||||
LPWSTR Filename,
|
||||
UINT Command)
|
||||
{
|
||||
|
||||
@@ -29,7 +29,7 @@ IntGdiMoveToEx(DC *dc,
|
||||
LPPOINT Point)
|
||||
{
|
||||
BOOL PathIsOpen;
|
||||
|
||||
|
||||
if ( Point )
|
||||
{
|
||||
Point->x = dc->w.CursPosX;
|
||||
@@ -37,12 +37,12 @@ IntGdiMoveToEx(DC *dc,
|
||||
}
|
||||
dc->w.CursPosX = X;
|
||||
dc->w.CursPosY = Y;
|
||||
|
||||
|
||||
PathIsOpen = PATH_IsPathOpen(dc->w.path);
|
||||
|
||||
|
||||
if ( PathIsOpen )
|
||||
return PATH_MoveTo ( dc );
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -151,7 +151,7 @@ IntGdiPolyBezier(DC *dc,
|
||||
ExFreePool(Pts);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -182,7 +182,7 @@ IntGdiPolyBezierTo(DC *dc,
|
||||
dc->w.CursPosX = pt[Count-1].x;
|
||||
dc->w.CursPosY = pt[Count-1].y;
|
||||
}
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -272,7 +272,7 @@ IntGdiPolylineTo(DC *dc,
|
||||
dc->w.CursPosX = pt[Count-1].x;
|
||||
dc->w.CursPosY = pt[Count-1].y;
|
||||
}
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -361,7 +361,7 @@ NtGdiArc(HDC hDC,
|
||||
{
|
||||
DC *dc;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
dc = DC_LockDc (hDC);
|
||||
if(!dc)
|
||||
{
|
||||
@@ -374,7 +374,7 @@ NtGdiArc(HDC hDC,
|
||||
/* Yes, Windows really returns TRUE in this case */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGdiArc(dc,
|
||||
LeftRect,
|
||||
TopRect,
|
||||
@@ -384,7 +384,7 @@ NtGdiArc(HDC hDC,
|
||||
YStartArc,
|
||||
XEndArc,
|
||||
YEndArc);
|
||||
|
||||
|
||||
DC_UnlockDc( hDC );
|
||||
return Ret;
|
||||
}
|
||||
@@ -403,7 +403,7 @@ NtGdiArcTo(HDC hDC,
|
||||
{
|
||||
BOOL result;
|
||||
DC *dc;
|
||||
|
||||
|
||||
dc = DC_LockDc (hDC);
|
||||
if(!dc)
|
||||
{
|
||||
@@ -437,7 +437,7 @@ NtGdiArcTo(HDC hDC,
|
||||
// If no error occured, the current position is moved to the ending point of the arc.
|
||||
if(result)
|
||||
IntGdiMoveToEx(dc, XRadial2, YRadial2, NULL);
|
||||
|
||||
|
||||
DC_UnlockDc( hDC );
|
||||
|
||||
return result;
|
||||
@@ -471,7 +471,7 @@ NtGdiLineTo(HDC hDC,
|
||||
{
|
||||
DC *dc;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
dc = DC_LockDc(hDC);
|
||||
if(!dc)
|
||||
{
|
||||
@@ -484,9 +484,9 @@ NtGdiLineTo(HDC hDC,
|
||||
/* Yes, Windows really returns TRUE in this case */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGdiLineTo(dc, XEnd, YEnd);
|
||||
|
||||
|
||||
DC_UnlockDc(hDC);
|
||||
return Ret;
|
||||
}
|
||||
@@ -502,7 +502,7 @@ NtGdiMoveToEx(HDC hDC,
|
||||
POINT SafePoint;
|
||||
NTSTATUS Status;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
dc = DC_LockDc(hDC);
|
||||
if(!dc)
|
||||
{
|
||||
@@ -515,7 +515,7 @@ NtGdiMoveToEx(HDC hDC,
|
||||
/* Yes, Windows really returns TRUE in this case */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
if(Point)
|
||||
{
|
||||
Status = MmCopyFromCaller(&SafePoint, Point, sizeof(POINT));
|
||||
@@ -526,9 +526,9 @@ NtGdiMoveToEx(HDC hDC,
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGdiMoveToEx(dc, X, Y, (Point ? &SafePoint : NULL));
|
||||
|
||||
|
||||
DC_UnlockDc(hDC);
|
||||
return Ret;
|
||||
}
|
||||
@@ -543,7 +543,7 @@ NtGdiPolyBezier(HDC hDC,
|
||||
LPPOINT Safept;
|
||||
NTSTATUS Status;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
dc = DC_LockDc(hDC);
|
||||
if(!dc)
|
||||
{
|
||||
@@ -556,7 +556,7 @@ NtGdiPolyBezier(HDC hDC,
|
||||
/* Yes, Windows really returns TRUE in this case */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
if(Count > 0)
|
||||
{
|
||||
Safept = ExAllocatePoolWithTag(PagedPool, sizeof(POINT) * Count, TAG_BEZIER);
|
||||
@@ -566,7 +566,7 @@ NtGdiPolyBezier(HDC hDC,
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(Safept, pt, sizeof(POINT) * Count);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -581,12 +581,12 @@ NtGdiPolyBezier(HDC hDC,
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGdiPolyBezier(dc, Safept, Count);
|
||||
|
||||
|
||||
ExFreePool(Safept);
|
||||
DC_UnlockDc(hDC);
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -600,7 +600,7 @@ NtGdiPolyBezierTo(HDC hDC,
|
||||
LPPOINT Safept;
|
||||
NTSTATUS Status;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
dc = DC_LockDc(hDC);
|
||||
if(!dc)
|
||||
{
|
||||
@@ -613,7 +613,7 @@ NtGdiPolyBezierTo(HDC hDC,
|
||||
/* Yes, Windows really returns TRUE in this case */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
if(Count > 0)
|
||||
{
|
||||
Safept = ExAllocatePoolWithTag(PagedPool, sizeof(POINT) * Count, TAG_BEZIER);
|
||||
@@ -623,7 +623,7 @@ NtGdiPolyBezierTo(HDC hDC,
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(Safept, pt, sizeof(POINT) * Count);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -638,12 +638,12 @@ NtGdiPolyBezierTo(HDC hDC,
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGdiPolyBezierTo(dc, Safept, Count);
|
||||
|
||||
|
||||
ExFreePool(Safept);
|
||||
DC_UnlockDc(hDC);
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -668,7 +668,7 @@ NtGdiPolyline(HDC hDC,
|
||||
LPPOINT Safept;
|
||||
NTSTATUS Status;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
dc = DC_LockDc(hDC);
|
||||
if(!dc)
|
||||
{
|
||||
@@ -681,7 +681,7 @@ NtGdiPolyline(HDC hDC,
|
||||
/* Yes, Windows really returns TRUE in this case */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
if(Count >= 2)
|
||||
{
|
||||
Safept = ExAllocatePoolWithTag(PagedPool, sizeof(POINT) * Count, TAG_SHAPE);
|
||||
@@ -691,7 +691,7 @@ NtGdiPolyline(HDC hDC,
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(Safept, pt, sizeof(POINT) * Count);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -706,12 +706,12 @@ NtGdiPolyline(HDC hDC,
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGdiPolyline(dc, Safept, Count);
|
||||
|
||||
ExFreePool(Safept);
|
||||
DC_UnlockDc(hDC);
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -725,7 +725,7 @@ NtGdiPolylineTo(HDC hDC,
|
||||
LPPOINT Safept;
|
||||
NTSTATUS Status;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
dc = DC_LockDc(hDC);
|
||||
if(!dc)
|
||||
{
|
||||
@@ -738,7 +738,7 @@ NtGdiPolylineTo(HDC hDC,
|
||||
/* Yes, Windows really returns TRUE in this case */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
if(Count > 0)
|
||||
{
|
||||
Safept = ExAllocatePoolWithTag(PagedPool, sizeof(POINT) * Count, TAG_SHAPE);
|
||||
@@ -748,7 +748,7 @@ NtGdiPolylineTo(HDC hDC,
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(Safept, pt, sizeof(POINT) * Count);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -763,12 +763,12 @@ NtGdiPolylineTo(HDC hDC,
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGdiPolylineTo(dc, Safept, Count);
|
||||
|
||||
|
||||
ExFreePool(Safept);
|
||||
DC_UnlockDc(hDC);
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -784,7 +784,7 @@ NtGdiPolyPolyline(HDC hDC,
|
||||
LPDWORD SafePolyPoints;
|
||||
NTSTATUS Status;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
dc = DC_LockDc(hDC);
|
||||
if(!dc)
|
||||
{
|
||||
@@ -797,7 +797,7 @@ NtGdiPolyPolyline(HDC hDC,
|
||||
/* Yes, Windows really returns TRUE in this case */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
if(Count > 0)
|
||||
{
|
||||
Safept = ExAllocatePoolWithTag(PagedPool, (sizeof(POINT) + sizeof(DWORD)) * Count, TAG_SHAPE);
|
||||
@@ -807,9 +807,9 @@ NtGdiPolyPolyline(HDC hDC,
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
SafePolyPoints = (LPDWORD)&Safept[Count];
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(Safept, pt, sizeof(POINT) * Count);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -833,12 +833,12 @@ NtGdiPolyPolyline(HDC hDC,
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Ret = IntGdiPolyPolyline(dc, Safept, SafePolyPoints, Count);
|
||||
|
||||
|
||||
ExFreePool(Safept);
|
||||
DC_UnlockDc(hDC);
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#include <w32k.h>
|
||||
|
||||
#ifndef NO_MAPPING
|
||||
static int PALETTE_firstFree = 0;
|
||||
static int PALETTE_firstFree = 0;
|
||||
static unsigned char PALETTE_freeList[256];
|
||||
#endif
|
||||
|
||||
@@ -193,7 +193,7 @@ HPALETTE FASTCALL PALETTE_Init(VOID)
|
||||
static void FASTCALL PALETTE_FormatSystemPalette(void)
|
||||
{
|
||||
// Build free list so we'd have an easy way to find
|
||||
// out if there are any available colorcells.
|
||||
// out if there are any available colorcells.
|
||||
|
||||
int i, j = PALETTE_firstFree = NB_RESERVED_COLORS/2;
|
||||
|
||||
@@ -219,7 +219,7 @@ VOID FASTCALL PALETTE_ValidateFlags(PALETTEENTRY* lpPalE, INT size)
|
||||
}
|
||||
|
||||
#ifndef NO_MAPPING
|
||||
// Set the color-mapping table for selected palette.
|
||||
// Set the color-mapping table for selected palette.
|
||||
// Return number of entries which mapping has changed.
|
||||
INT STDCALL PALETTE_SetMapping(PALOBJ *palPtr, UINT uStart, UINT uNum, BOOL mapOnly)
|
||||
{
|
||||
@@ -241,7 +241,7 @@ INT STDCALL PALETTE_SetMapping(PALOBJ *palPtr, UINT uStart, UINT uNum, BOOL mapO
|
||||
if( !mapOnly && PALETTE_firstFree != -1) PALETTE_FormatSystemPalette();
|
||||
|
||||
// initialize palette mapping table
|
||||
|
||||
|
||||
//mapping = HeapReAlloc( GetProcessHeap(), 0, palPtr->mapping,
|
||||
// sizeof(int)*palPtr->logpalette->palNumEntries);
|
||||
ExFreePool(palPtr->mapping);
|
||||
@@ -261,7 +261,7 @@ INT STDCALL PALETTE_SetMapping(PALOBJ *palPtr, UINT uStart, UINT uNum, BOOL mapO
|
||||
index = *(WORD*)(palGDI->IndexedColors + uStart);
|
||||
if(index > 255 || (index >= COLOR_gapStart && index <= COLOR_gapEnd))
|
||||
{
|
||||
DbgPrint("Win32k: PC_EXPLICIT: idx %d out of system palette, assuming black.\n", index);
|
||||
DbgPrint("Win32k: PC_EXPLICIT: idx %d out of system palette, assuming black.\n", index);
|
||||
index = 0;
|
||||
}
|
||||
break;
|
||||
@@ -272,7 +272,7 @@ INT STDCALL PALETTE_SetMapping(PALOBJ *palPtr, UINT uStart, UINT uNum, BOOL mapO
|
||||
|
||||
// fall through
|
||||
default: // try to collapse identical colors
|
||||
index = COLOR_PaletteLookupExactIndex(COLOR_sysPal, 256,
|
||||
index = COLOR_PaletteLookupExactIndex(COLOR_sysPal, 256,
|
||||
*(COLORREF*)(palGDI->IndexedColors + uStart));
|
||||
// fall through
|
||||
|
||||
@@ -310,7 +310,7 @@ INT STDCALL PALETTE_SetMapping(PALOBJ *palPtr, UINT uStart, UINT uNum, BOOL mapO
|
||||
{
|
||||
index = PALETTE_ToPhysical(NULL, 0x00ffffff &
|
||||
*(COLORREF*)(palPtr->logpalette->palPalEntry + uStart));
|
||||
break;
|
||||
break;
|
||||
} FIXME */
|
||||
|
||||
// we have to map to existing entry in the system palette
|
||||
|
||||
@@ -840,7 +840,7 @@ PATH_FlattenPath(GdiPath *pPath)
|
||||
// expecting a non-const*. Since this function isn't being called
|
||||
// at the moment, I'm commenting it out until the issue needs to
|
||||
// be addressed.
|
||||
BOOL
|
||||
BOOL
|
||||
FASTCALL
|
||||
PATH_PathToRegion ( const GdiPath *pPath, INT nPolyFillMode, HRGN *pHrgn )
|
||||
{
|
||||
|
||||
@@ -29,7 +29,7 @@ IntGdiCreatePenIndirect(PLOGPEN LogPen)
|
||||
HPEN hPen;
|
||||
PGDIBRUSHOBJ PenObject;
|
||||
static const WORD wPatternAlternate[] = {0x5555};
|
||||
|
||||
|
||||
if (LogPen->lopnStyle > PS_INSIDEFRAME)
|
||||
return 0;
|
||||
|
||||
@@ -41,7 +41,7 @@ IntGdiCreatePenIndirect(PLOGPEN LogPen)
|
||||
return 0;
|
||||
}
|
||||
|
||||
PenObject = PENOBJ_LockPen(hPen);
|
||||
PenObject = PENOBJ_LockPen(hPen);
|
||||
/* FIXME - Handle PenObject == NULL!!! */
|
||||
PenObject->ptPenWidth = LogPen->lopnWidth;
|
||||
PenObject->ulPenStyle = LogPen->lopnStyle;
|
||||
@@ -67,7 +67,7 @@ IntGdiCreatePenIndirect(PLOGPEN LogPen)
|
||||
}
|
||||
|
||||
PENOBJ_UnlockPen(hPen);
|
||||
|
||||
|
||||
return hPen;
|
||||
}
|
||||
|
||||
@@ -94,14 +94,14 @@ NtGdiCreatePenIndirect(CONST PLOGPEN LogPen)
|
||||
{
|
||||
LOGPEN SafeLogPen;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(&SafeLogPen, LogPen, sizeof(LOGPEN));
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
return IntGdiCreatePenIndirect(&SafeLogPen);
|
||||
}
|
||||
|
||||
|
||||
@@ -180,10 +180,10 @@ POLYGONFILL_MakeEdge(POINT From, POINT To)
|
||||
** lines will become active first when scanning from
|
||||
** top (min y) to bottom (max y).
|
||||
**
|
||||
** Return Value Meaning
|
||||
** Negative integer element1 < element2
|
||||
** Zero element1 = element2
|
||||
** Positive integer element1 > element2
|
||||
** Return Value Meaning
|
||||
** Negative integer element1 < element2
|
||||
** Zero element1 = element2
|
||||
** Positive integer element1 > element2
|
||||
*/
|
||||
static
|
||||
INT
|
||||
@@ -292,7 +292,7 @@ fail:
|
||||
|
||||
|
||||
/*
|
||||
** This slow routine uses the data stored in the edge list to
|
||||
** This slow routine uses the data stored in the edge list to
|
||||
** calculate the x intercepts for each line in the edge list
|
||||
** for scanline Scanline.
|
||||
**TODO: Get rid of this floating point arithmetic
|
||||
@@ -529,14 +529,14 @@ POLYGONFILL_FillScanLineWinding(
|
||||
RopMode); // MIX
|
||||
}
|
||||
|
||||
//When the fill mode is ALTERNATE, GDI fills the area between odd-numbered and
|
||||
//even-numbered polygon sides on each scan line. That is, GDI fills the area between the
|
||||
//first and second side, between the third and fourth side, and so on.
|
||||
//When the fill mode is ALTERNATE, GDI fills the area between odd-numbered and
|
||||
//even-numbered polygon sides on each scan line. That is, GDI fills the area between the
|
||||
//first and second side, between the third and fourth side, and so on.
|
||||
|
||||
//WINDING Selects winding mode (fills any region with a nonzero winding value).
|
||||
//WINDING Selects winding mode (fills any region with a nonzero winding value).
|
||||
//When the fill mode is WINDING, GDI fills any region that has a nonzero winding value.
|
||||
//This value is defined as the number of times a pen used to draw the polygon would go around the region.
|
||||
//The direction of each edge of the polygon is important.
|
||||
//The direction of each edge of the polygon is important.
|
||||
|
||||
BOOL
|
||||
STDCALL
|
||||
@@ -576,7 +576,7 @@ FillPolygon(
|
||||
else /* default */
|
||||
FillScanLine = POLYGONFILL_FillScanLineAlternate;
|
||||
|
||||
/* For each Scanline from BoundRect.bottom to BoundRect.top,
|
||||
/* For each Scanline from BoundRect.bottom to BoundRect.top,
|
||||
* determine line segments to draw
|
||||
*/
|
||||
for ( ScanLine = BoundRect.top; ScanLine < BoundRect.bottom; ++ScanLine )
|
||||
|
||||
@@ -409,7 +409,7 @@ static inline int xmemcheck(ROSRGNDATA *reg, PRECT *rect, PRECT *firstrect ) {
|
||||
|
||||
/* copy the rectangles */
|
||||
COPY_RECTS(temp, *firstrect, reg->rdh.nCount);
|
||||
|
||||
|
||||
reg->rdh.nRgnSize *= 2;
|
||||
if (*firstrect != ®->rdh.rcBound)
|
||||
ExFreePool( *firstrect );
|
||||
@@ -723,7 +723,7 @@ HRGN FASTCALL REGION_CropRgn(HRGN hDst, HRGN hSrc, const PRECT lpRect, PPOINT lp
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
objSrc = RGNDATA_LockRgn(hSrc);
|
||||
if(objSrc == NULL)
|
||||
{
|
||||
@@ -743,7 +743,7 @@ HRGN FASTCALL REGION_CropRgn(HRGN hDst, HRGN hSrc, const PRECT lpRect, PPOINT lp
|
||||
|
||||
RGNDATA_UnlockRgn(hSrc);
|
||||
RGNDATA_UnlockRgn(hDst);
|
||||
|
||||
|
||||
return hRet;
|
||||
}
|
||||
|
||||
@@ -1754,7 +1754,7 @@ BOOL FASTCALL REGION_CreateFrameRgn(HRGN hDest, HRGN hSrc, INT x, INT y)
|
||||
PROSRGNDATA srcObj, destObj;
|
||||
PRECT rc;
|
||||
ULONG i;
|
||||
|
||||
|
||||
if (!(srcObj = (PROSRGNDATA)RGNDATA_LockRgn(hSrc)))
|
||||
{
|
||||
return FALSE;
|
||||
@@ -1769,7 +1769,7 @@ BOOL FASTCALL REGION_CreateFrameRgn(HRGN hDest, HRGN hSrc, INT x, INT y)
|
||||
RGNDATA_UnlockRgn(hSrc);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
EMPTY_REGION(destObj);
|
||||
if (!REGION_CopyRegion(destObj, srcObj))
|
||||
{
|
||||
@@ -1777,7 +1777,7 @@ BOOL FASTCALL REGION_CreateFrameRgn(HRGN hDest, HRGN hSrc, INT x, INT y)
|
||||
RGNDATA_UnlockRgn(hSrc);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/* Original region moved to right */
|
||||
rc = (PRECT)srcObj->Buffer;
|
||||
for (i = 0; i < srcObj->rdh.nCount; i++)
|
||||
@@ -1787,7 +1787,7 @@ BOOL FASTCALL REGION_CreateFrameRgn(HRGN hDest, HRGN hSrc, INT x, INT y)
|
||||
rc++;
|
||||
}
|
||||
REGION_IntersectRegion(destObj, destObj, srcObj);
|
||||
|
||||
|
||||
/* Original region moved to left */
|
||||
rc = (PRECT)srcObj->Buffer;
|
||||
for (i = 0; i < srcObj->rdh.nCount; i++)
|
||||
@@ -1797,7 +1797,7 @@ BOOL FASTCALL REGION_CreateFrameRgn(HRGN hDest, HRGN hSrc, INT x, INT y)
|
||||
rc++;
|
||||
}
|
||||
REGION_IntersectRegion(destObj, destObj, srcObj);
|
||||
|
||||
|
||||
/* Original region moved down */
|
||||
rc = (PRECT)srcObj->Buffer;
|
||||
for (i = 0; i < srcObj->rdh.nCount; i++)
|
||||
@@ -1809,7 +1809,7 @@ BOOL FASTCALL REGION_CreateFrameRgn(HRGN hDest, HRGN hSrc, INT x, INT y)
|
||||
rc++;
|
||||
}
|
||||
REGION_IntersectRegion(destObj, destObj, srcObj);
|
||||
|
||||
|
||||
/* Original region moved up */
|
||||
rc = (PRECT)srcObj->Buffer;
|
||||
for (i = 0; i < srcObj->rdh.nCount; i++)
|
||||
@@ -1819,7 +1819,7 @@ BOOL FASTCALL REGION_CreateFrameRgn(HRGN hDest, HRGN hSrc, INT x, INT y)
|
||||
rc++;
|
||||
}
|
||||
REGION_IntersectRegion(destObj, destObj, srcObj);
|
||||
|
||||
|
||||
/* Restore the original region */
|
||||
rc = (PRECT)srcObj->Buffer;
|
||||
for (i = 0; i < srcObj->rdh.nCount; i++)
|
||||
@@ -1829,7 +1829,7 @@ BOOL FASTCALL REGION_CreateFrameRgn(HRGN hDest, HRGN hSrc, INT x, INT y)
|
||||
rc++;
|
||||
}
|
||||
REGION_SubtractRegion(destObj, srcObj, destObj);
|
||||
|
||||
|
||||
RGNDATA_UnlockRgn(hDest);
|
||||
RGNDATA_UnlockRgn(hSrc);
|
||||
return TRUE;
|
||||
@@ -1956,7 +1956,7 @@ NtGdiCombineRgn(HRGN hDest,
|
||||
{
|
||||
INT result = ERROR;
|
||||
PROSRGNDATA destRgn, src1Rgn, src2Rgn;
|
||||
|
||||
|
||||
destRgn = RGNDATA_LockRgn(hDest);
|
||||
if( destRgn )
|
||||
{
|
||||
@@ -2029,14 +2029,14 @@ NtGdiCreateEllipticRgnIndirect(CONST PRECT Rect)
|
||||
{
|
||||
RECT SafeRect;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(&SafeRect, Rect, sizeof(RECT));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
return NtGdiCreateRoundRectRgn(SafeRect.left, SafeRect.top, SafeRect.right, SafeRect.bottom,
|
||||
SafeRect.right - SafeRect.left, SafeRect.bottom - SafeRect.top);
|
||||
}
|
||||
@@ -2211,7 +2211,7 @@ NtGdiEqualRgn(HRGN hSrcRgn1,
|
||||
tRect1[i].right != tRect2[i].right ||
|
||||
tRect1[i].top != tRect2[i].top ||
|
||||
tRect1[i].bottom != tRect2[i].bottom)
|
||||
goto exit;;
|
||||
goto exit;
|
||||
}
|
||||
bRet = TRUE;
|
||||
|
||||
@@ -2251,7 +2251,7 @@ NtGdiExtCreateRegion(CONST XFORM *Xform,
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
Region = RGNDATA_LockRgn(hRgn);
|
||||
if (Region == NULL)
|
||||
{
|
||||
@@ -2270,7 +2270,7 @@ NtGdiExtCreateRegion(CONST XFORM *Xform,
|
||||
NtGdiDeleteObject(hRgn);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
RGNDATA_UnlockRgn(hRgn);
|
||||
|
||||
return hRgn;
|
||||
@@ -2312,7 +2312,7 @@ NtGdiFrameRgn(HDC hDC, HRGN hRgn, HBRUSH hBrush, INT Width, INT Height)
|
||||
{
|
||||
HRGN FrameRgn;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
if(!(FrameRgn = NtGdiCreateRectRgn(0, 0, 0, 0)))
|
||||
{
|
||||
return FALSE;
|
||||
@@ -2322,9 +2322,9 @@ NtGdiFrameRgn(HDC hDC, HRGN hRgn, HBRUSH hBrush, INT Width, INT Height)
|
||||
NtGdiDeleteObject(FrameRgn);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Ret = NtGdiFillRgn(hDC, FrameRgn, hBrush);
|
||||
|
||||
|
||||
NtGdiDeleteObject(FrameRgn);
|
||||
return Ret;
|
||||
}
|
||||
@@ -2382,17 +2382,17 @@ NtGdiInvertRgn(HDC hDC,
|
||||
PROSRGNDATA RgnData;
|
||||
ULONG i;
|
||||
PRECT rc;
|
||||
|
||||
|
||||
if(!(RgnData = RGNDATA_LockRgn(hRgn)))
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
rc = (PRECT)RgnData->Buffer;
|
||||
for(i = 0; i < RgnData->rdh.nCount; i++)
|
||||
{
|
||||
|
||||
|
||||
if(!NtGdiPatBlt(hDC, rc->left, rc->top, rc->right - rc->left, rc->bottom - rc->top, DSTINVERT))
|
||||
{
|
||||
RGNDATA_UnlockRgn(hRgn);
|
||||
@@ -2400,7 +2400,7 @@ NtGdiInvertRgn(HDC hDC,
|
||||
}
|
||||
rc++;
|
||||
}
|
||||
|
||||
|
||||
RGNDATA_UnlockRgn(hRgn);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -2497,7 +2497,7 @@ NtGdiPaintRgn(HDC hDC,
|
||||
pBrush = BRUSHOBJ_LockBrush(dc->w.hBrush);
|
||||
ASSERT(pBrush);
|
||||
IntGdiInitBrushInstance(&BrushInst, pBrush, dc->XlateBrush);
|
||||
|
||||
|
||||
BrushOrigin.x = dc->w.brushOrgX;
|
||||
BrushOrigin.y = dc->w.brushOrgY;
|
||||
BitmapObj = BITMAPOBJ_LockBitmap(dc->w.hBitmap);
|
||||
@@ -2529,7 +2529,7 @@ NtGdiPtInRegion(HRGN hRgn,
|
||||
|
||||
if(!(rgn = RGNDATA_LockRgn(hRgn) ) )
|
||||
return FALSE;
|
||||
|
||||
|
||||
if(rgn->rdh.nCount > 0 && INRECT(rgn->rdh.rcBound, X, Y)){
|
||||
r = (PRECT) rgn->Buffer;
|
||||
for(i = 0; i < rgn->rdh.nCount; i++) {
|
||||
@@ -2560,7 +2560,7 @@ UnsafeIntRectInRegion(PROSRGNDATA Rgn,
|
||||
if (pCurRect->top >= rc->bottom) break; // too far down
|
||||
if (pCurRect->right <= rc->left) continue; // not far enough over yet
|
||||
if (pCurRect->left >= rc->right) continue;
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -2575,7 +2575,7 @@ NtGdiRectInRegion(HRGN hRgn,
|
||||
PROSRGNDATA Rgn;
|
||||
RECT rc;
|
||||
BOOL Ret;
|
||||
|
||||
|
||||
if(!(Rgn = RGNDATA_LockRgn(hRgn)))
|
||||
{
|
||||
return ERROR;
|
||||
@@ -2587,7 +2587,7 @@ NtGdiRectInRegion(HRGN hRgn,
|
||||
DPRINT1("NtGdiRectInRegion: bogus rc\n");
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
|
||||
Ret = UnsafeIntRectInRegion(Rgn, &rc);
|
||||
RGNDATA_UnlockRgn(hRgn);
|
||||
return Ret;
|
||||
@@ -2634,7 +2634,7 @@ NtGdiUnionRectWithRgn(HRGN hDest, CONST PRECT UnsafeRect)
|
||||
{
|
||||
RECT SafeRect;
|
||||
PROSRGNDATA Rgn;
|
||||
|
||||
|
||||
if(!(Rgn = (PROSRGNDATA)RGNDATA_LockRgn(hDest)))
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
@@ -2647,7 +2647,7 @@ NtGdiUnionRectWithRgn(HRGN hDest, CONST PRECT UnsafeRect)
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
UnsafeIntUnionRectWithRgn(Rgn, &SafeRect);
|
||||
RGNDATA_UnlockRgn(hDest);
|
||||
return hDest;
|
||||
@@ -2939,7 +2939,7 @@ static int FASTCALL REGION_PtsToRegion(int numFullPtBlocks, int iCurPtBlock,
|
||||
ExFreePool(reg->Buffer);
|
||||
}
|
||||
reg->Buffer = temp;
|
||||
|
||||
|
||||
reg->rdh.nCount = numRects;
|
||||
CurPtBlock = FirstPtBlock;
|
||||
rects = reg->Buffer - 1;
|
||||
@@ -3292,27 +3292,27 @@ NtGdiCreatePolygonRgn(CONST PPOINT pt,
|
||||
POINT *SafePoints;
|
||||
NTSTATUS Status;
|
||||
HRGN hRgn;
|
||||
|
||||
|
||||
|
||||
|
||||
if (pt == NULL || Count == 0 ||
|
||||
(PolyFillMode != WINDING && PolyFillMode != ALTERNATE))
|
||||
{
|
||||
/* Windows doesn't set a last error here */
|
||||
return (HRGN)0;
|
||||
}
|
||||
|
||||
|
||||
if (Count == 1)
|
||||
{
|
||||
/* can't create a region with only one point! */
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return (HRGN)0;
|
||||
}
|
||||
|
||||
|
||||
if (Count == 2)
|
||||
{
|
||||
/* Windows creates an empty region! */
|
||||
ROSRGNDATA *rgn;
|
||||
|
||||
|
||||
if(!(hRgn = RGNDATA_AllocRgn(1)))
|
||||
{
|
||||
return (HRGN)0;
|
||||
@@ -3322,19 +3322,19 @@ NtGdiCreatePolygonRgn(CONST PPOINT pt,
|
||||
NtGdiDeleteObject(hRgn);
|
||||
return (HRGN)0;
|
||||
}
|
||||
|
||||
|
||||
EMPTY_REGION(rgn);
|
||||
|
||||
|
||||
RGNDATA_UnlockRgn(hRgn);
|
||||
return hRgn;
|
||||
}
|
||||
|
||||
|
||||
if (!(SafePoints = ExAllocatePoolWithTag(PagedPool, Count * sizeof(POINT), TAG_REGION)))
|
||||
{
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return (HRGN)0;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(SafePoints, pt, Count * sizeof(POINT));
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -3342,9 +3342,9 @@ NtGdiCreatePolygonRgn(CONST PPOINT pt,
|
||||
SetLastNtError(Status);
|
||||
return (HRGN)0;
|
||||
}
|
||||
|
||||
|
||||
hRgn = IntCreatePolyPolgonRgn(SafePoints, &Count, 1, PolyFillMode);
|
||||
|
||||
|
||||
ExFreePool(SafePoints);
|
||||
return hRgn;
|
||||
}
|
||||
@@ -3361,20 +3361,20 @@ NtGdiCreatePolyPolygonRgn(CONST PPOINT pt,
|
||||
INT nPoints, nEmpty, nInvalid, i;
|
||||
HRGN hRgn;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
if (pt == NULL || PolyCounts == NULL || Count == 0 ||
|
||||
(PolyFillMode != WINDING && PolyFillMode != ALTERNATE))
|
||||
{
|
||||
/* Windows doesn't set a last error here */
|
||||
return (HRGN)0;
|
||||
}
|
||||
|
||||
|
||||
if (!(SafePolyCounts = ExAllocatePoolWithTag(PagedPool, Count * sizeof(INT), TAG_REGION)))
|
||||
{
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return (HRGN)0;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(SafePolyCounts, PolyCounts, Count * sizeof(INT));
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -3382,7 +3382,7 @@ NtGdiCreatePolyPolygonRgn(CONST PPOINT pt,
|
||||
SetLastNtError(Status);
|
||||
return (HRGN)0;
|
||||
}
|
||||
|
||||
|
||||
/* validate poligons */
|
||||
nPoints = 0;
|
||||
nEmpty = 0;
|
||||
@@ -3399,7 +3399,7 @@ NtGdiCreatePolyPolygonRgn(CONST PPOINT pt,
|
||||
}
|
||||
nPoints += SafePolyCounts[i];
|
||||
}
|
||||
|
||||
|
||||
if (nEmpty == Count)
|
||||
{
|
||||
/* if all polygon counts are zero, return without setting a last error code. */
|
||||
@@ -3413,7 +3413,7 @@ NtGdiCreatePolyPolygonRgn(CONST PPOINT pt,
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return (HRGN)0;
|
||||
}
|
||||
|
||||
|
||||
/* copy points */
|
||||
if (!(Safept = ExAllocatePoolWithTag(PagedPool, nPoints * sizeof(POINT), TAG_REGION)))
|
||||
{
|
||||
@@ -3421,7 +3421,7 @@ NtGdiCreatePolyPolygonRgn(CONST PPOINT pt,
|
||||
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return (HRGN)0;
|
||||
}
|
||||
|
||||
|
||||
Status = MmCopyFromCaller(Safept, pt, nPoints * sizeof(POINT));
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
@@ -3430,10 +3430,10 @@ NtGdiCreatePolyPolygonRgn(CONST PPOINT pt,
|
||||
SetLastNtError(Status);
|
||||
return (HRGN)0;
|
||||
}
|
||||
|
||||
|
||||
/* now we're ready to calculate the region safely */
|
||||
hRgn = IntCreatePolyPolgonRgn(Safept, SafePolyCounts, Count, PolyFillMode);
|
||||
|
||||
|
||||
ExFreePool(Safept);
|
||||
ExFreePool(SafePolyCounts);
|
||||
return hRgn;
|
||||
|
||||
@@ -184,7 +184,7 @@ IntSetSysColors(UINT nColors, INT *Elements, COLORREF *Colors)
|
||||
Elements++;
|
||||
Colors++;
|
||||
}
|
||||
|
||||
|
||||
return nColors > 0;
|
||||
}
|
||||
|
||||
@@ -192,20 +192,20 @@ BOOL FASTCALL
|
||||
IntGetSysColorBrushes(HBRUSH *Brushes, UINT nBrushes)
|
||||
{
|
||||
UINT i;
|
||||
|
||||
|
||||
ASSERT(Brushes);
|
||||
|
||||
|
||||
if(nBrushes > NUM_SYSCOLORS)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
for(i = 0; i < nBrushes; i++)
|
||||
{
|
||||
*(Brushes++) = SysColorBrushes[i];
|
||||
}
|
||||
|
||||
|
||||
return nBrushes > 0;
|
||||
}
|
||||
|
||||
@@ -213,7 +213,7 @@ BOOL FASTCALL
|
||||
IntGetSysColorPens(HPEN *Pens, UINT nPens)
|
||||
{
|
||||
UINT i;
|
||||
|
||||
|
||||
ASSERT(Pens);
|
||||
|
||||
if(nPens > NUM_SYSCOLORS)
|
||||
@@ -235,21 +235,21 @@ IntGetSysColors(COLORREF *Colors, UINT nColors)
|
||||
{
|
||||
UINT i;
|
||||
COLORREF *col;
|
||||
|
||||
|
||||
ASSERT(Colors);
|
||||
|
||||
|
||||
if(nColors > NUM_SYSCOLORS)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
col = &SysColors[0];
|
||||
for(i = 0; i < nColors; i++)
|
||||
{
|
||||
*(Colors++) = *(col++);
|
||||
}
|
||||
|
||||
|
||||
return nColors > 0;
|
||||
}
|
||||
|
||||
@@ -258,7 +258,7 @@ CreateSysColorObjects(VOID)
|
||||
{
|
||||
UINT i;
|
||||
LOGPEN Pen;
|
||||
|
||||
|
||||
/* Create the syscolor brushes */
|
||||
for(i = 0; i < NUM_SYSCOLORS; i++)
|
||||
{
|
||||
@@ -271,7 +271,7 @@ CreateSysColorObjects(VOID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Create the syscolor pens */
|
||||
Pen.lopnStyle = PS_SOLID;
|
||||
Pen.lopnWidth.x = 0;
|
||||
|
||||
@@ -43,7 +43,7 @@ NtGdiDescribePixelFormat(HDC hDC,
|
||||
UINT
|
||||
STDCALL
|
||||
NtGdiGetEnhMetaFilePixelFormat(HENHMETAFILE hEMF,
|
||||
DWORD BufSize,
|
||||
DWORD BufSize,
|
||||
CONST PPIXELFORMATDESCRIPTOR pfd)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
|
||||
Reference in New Issue
Block a user