remove whitespace from end of lines

svn path=/trunk/; revision=15106
This commit is contained in:
Steven Edwards
2005-05-08 02:11:54 +00:00
parent f6b87bd320
commit 476cbed37c
82 changed files with 2144 additions and 2144 deletions
+4 -4
View File
@@ -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;
+25 -25
View File
@@ -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;
}
+8 -8
View File
@@ -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)
+10 -10
View File
@@ -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;
}
+20 -20
View File
@@ -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;
}
+11 -11
View File
@@ -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)
+18 -18
View File
@@ -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;
}
+15 -15
View File
@@ -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;
+9 -9
View File
@@ -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;
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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;
}
+2 -2
View File
@@ -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)
+45 -45
View File
@@ -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;
+11 -11
View File
@@ -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 */
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+5 -5
View File
@@ -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;
}
+24 -24
View File
@@ -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)
{
+8 -8
View File
@@ -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;
}
+3 -3
View File
@@ -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);
+1 -1
View File
@@ -107,7 +107,7 @@ XLATEOBJ* FASTCALL
IntEngCreateSrcMonoXlate(HPALETTE PaletteDest,
ULONG ForegroundColor,
ULONG BackgroundColor);
BOOL STDCALL
IntEngPolyline(BITMAPOBJ *DestSurf,
CLIPOBJ *Clip,
+1 -1
View File
@@ -213,7 +213,7 @@ IntEnumDisplaySettings(
IN DWORD iModeNum,
IN OUT LPDEVMODEW pDevMode,
IN DWORD dwFlags);
LONG
FASTCALL
IntChangeDisplaySettings(
+7 -7
View File
@@ -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);
+4 -4
View File
@@ -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;
+2 -2
View File
@@ -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 */
+5 -5
View File
@@ -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,
+2 -2
View File
@@ -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);
+17 -17
View File
@@ -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;
+1 -1
View File
@@ -35,7 +35,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* $Id$
*
*
* Entry Point for win32k.sys
*/
+15 -15
View File
@@ -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;
}
+56 -56
View File
@@ -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;
}
+22 -22
View File
@@ -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)
+25 -25
View File
@@ -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;
+50 -50
View File
@@ -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
+4 -4
View File
@@ -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);
+18 -18
View File
@@ -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;
+46 -46
View File
@@ -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;
}
+23 -23
View File
@@ -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;
}
+1 -1
View File
@@ -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)
+115 -115
View File
@@ -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;
+51 -51
View File
@@ -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;
+8 -8
View File
@@ -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;
+2 -2
View File
@@ -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;
+9 -9
View File
@@ -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);
+14 -14
View File
@@ -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;
}
+44 -44
View File
@@ -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;
}
+77 -77
View File
@@ -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? */
{
+93 -93
View File
@@ -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;
}
+56 -56
View File
@@ -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
View File
@@ -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;
}
+2 -2
View File
@@ -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)
{
+96 -96
View File
@@ -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);
+20 -20
View File
@@ -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;
}
+16 -16
View File
@@ -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;
}
+64 -64
View File
@@ -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;
}
+15 -15
View File
@@ -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;
}
+5 -5
View File
@@ -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;
+7 -7
View File
@@ -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);
}
+26 -26
View File
@@ -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
+54 -54
View File
@@ -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;
}
+66 -66
View File
@@ -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;
+9 -9
View File
@@ -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
+21 -21
View File
@@ -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;
}
+23 -23
View File
@@ -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);
+10 -10
View File
@@ -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);
}
+53 -53
View File
@@ -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;
+65 -65
View File
@@ -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;
}
+8 -8
View File
@@ -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)
{
+51 -51
View File
@@ -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;
+6 -6
View File
@@ -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;
}
+8 -8
View File
@@ -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)
{
+49 -49
View File
@@ -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;
}
+7 -7
View File
@@ -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
+1 -1
View File
@@ -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 )
{
+5 -5
View File
@@ -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);
}
+11 -11
View File
@@ -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 )
+52 -52
View File
@@ -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 != &reg->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;
+12 -12
View File
@@ -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;
+1 -1
View File
@@ -43,7 +43,7 @@ NtGdiDescribePixelFormat(HDC hDC,
UINT
STDCALL
NtGdiGetEnhMetaFilePixelFormat(HENHMETAFILE hEMF,
DWORD BufSize,
DWORD BufSize,
CONST PPIXELFORMATDESCRIPTOR pfd)
{
UNIMPLEMENTED;