2019-05-03 00:29:04 +02:00
|
|
|
/*++
|
|
|
|
Copyright (c) Microsoft Corporation
|
|
|
|
Licensed under the MIT license.
|
|
|
|
|
|
|
|
Module Name:
|
|
|
|
- server.h
|
|
|
|
|
|
|
|
Abstract:
|
|
|
|
- This module contains the internal structures and definitions used by the console server.
|
|
|
|
|
|
|
|
Author:
|
|
|
|
- Therese Stowell (ThereseS) 12-Nov-1990
|
|
|
|
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "IIoProvider.hpp"
|
|
|
|
|
|
|
|
#include "settings.hpp"
|
|
|
|
|
|
|
|
#include "conimeinfo.h"
|
|
|
|
#include "VtIo.hpp"
|
|
|
|
#include "CursorBlinker.hpp"
|
|
|
|
|
|
|
|
#include "..\server\ProcessList.h"
|
|
|
|
#include "..\server\WaitQueue.h"
|
|
|
|
|
|
|
|
#include "..\host\RenderData.hpp"
|
Add support for the "blink" graphic rendition attribute (#7490)
This PR adds support for the _blink_ graphic rendition attribute. When a
character is output with this attribute set, it "blinks" at a regular
interval, by cycling its color between the normal rendition and a dimmer
shade of that color.
The majority of the blinking mechanism is encapsulated in a new
`BlinkingState` class, which is shared between the Terminal and Conhost
implementations. This class keeps track of the position in the blinking
cycle, which determines whether characters are rendered as normal or
faint.
In Windows Terminal, the state is stored in the `Terminal` class, and in
Conhost it's stored in the `CONSOLE_INFORMATION` class. In both cases,
the `IsBlinkingFaint` method is used to determine the current blinking
rendition, and that is passed on as a parameter to the
`TextAttribute::CalculateRgbColors` method when these classes are
looking up attribute colors.
Prior to calculating the colors, the current attribute is also passed to
the `RecordBlinkingUsage` method, which keeps track of whether there are
actually any blink attributes in use. This is used to determine whether
the screen needs to be refreshed when the blinking cycle toggles between
the normal and faint renditions.
The refresh itself is handled by the `ToggleBlinkingRendition` method,
which is triggered by a timer. In Conhost this is just piggybacking on
the existing cursor blink timer, but in Windows Terminal it needs to
have its own separate timer, since the cursor timer is reset whenever a
key is pressed, which is not something we want for attribute blinking.
Although the `ToggleBlinkingRendition` is called at the same rate as the
cursor blinking, we actually only want the cells to blink at half that
frequency. We thus have a counter that cycles through four phases, and
blinking is rendered as faint for two of those four. Then every two
cycles - when the state changes - a redraw is triggered, but only if
there are actually blinking attributes in use (as previously recorded).
As mentioned earlier, the blinking frequency is based on the cursor
blink rate, so that means it'll automatically be disabled if a user has
set their cursor blink rate to none. It can also be disabled by turning
off the _Show animations in Windows_ option. In Conhost these settings
take effect immediately, but in Windows Terminal they only apply when a
new tab is opened.
This PR also adds partial support for the `SGR 6` _rapid blink_
attribute. This is not used by DEC terminals, but was defined in the
ECMA/ANSI standards. It's not widely supported, but many terminals just
it implement it as an alias for the regular `SGR 5` blink attribute, so
that's what I've done here too.
## Validation Steps Performed
I've checked the _Graphic rendition test pattern_ in Vttest, and
compared our representation of the blink attribute to that of an actual
DEC VT220 terminal as seen on [YouTube]. With the right color scheme
it's a reasonably close match.
[YouTube]: https://www.youtube.com/watch?v=03Pz5AmxbE4&t=1m55s
Closes #7388
2020-09-22 01:21:33 +02:00
|
|
|
#include "..\renderer\inc\BlinkingState.hpp"
|
2019-05-03 00:29:04 +02:00
|
|
|
|
2019-06-11 22:27:09 +02:00
|
|
|
// clang-format off
|
2019-05-03 00:29:04 +02:00
|
|
|
// Flags flags
|
|
|
|
#define CONSOLE_IS_ICONIC 0x00000001
|
|
|
|
#define CONSOLE_OUTPUT_SUSPENDED 0x00000002
|
|
|
|
#define CONSOLE_HAS_FOCUS 0x00000004
|
|
|
|
#define CONSOLE_IGNORE_NEXT_MOUSE_INPUT 0x00000008
|
|
|
|
#define CONSOLE_SELECTING 0x00000010
|
|
|
|
#define CONSOLE_SCROLLING 0x00000020
|
|
|
|
// unused (CONSOLE_DISABLE_CLOSE) 0x00000040
|
|
|
|
// unused (CONSOLE_USE_POLY_TEXT) 0x00000080
|
|
|
|
|
|
|
|
// Removed Oct 2017 - added a headless mode, which revealed that the consumption
|
|
|
|
// of this flag was redundant.
|
|
|
|
// unused (CONSOLE_NO_WINDOW) 0x00000100
|
|
|
|
|
|
|
|
// unused (CONSOLE_VDM_REGISTERED) 0x00000200
|
|
|
|
#define CONSOLE_UPDATING_SCROLL_BARS 0x00000400
|
|
|
|
#define CONSOLE_QUICK_EDIT_MODE 0x00000800
|
|
|
|
#define CONSOLE_CONNECTED_TO_EMULATOR 0x00002000
|
|
|
|
// unused (CONSOLE_FULLSCREEN_NOPAINT) 0x00004000
|
|
|
|
#define CONSOLE_QUIT_POSTED 0x00008000
|
|
|
|
#define CONSOLE_AUTO_POSITION 0x00010000
|
|
|
|
#define CONSOLE_IGNORE_NEXT_KEYUP 0x00020000
|
|
|
|
// unused (CONSOLE_WOW_REGISTERED) 0x00040000
|
|
|
|
#define CONSOLE_HISTORY_NODUP 0x00100000
|
|
|
|
#define CONSOLE_SCROLLBAR_TRACKING 0x00200000
|
|
|
|
#define CONSOLE_SETTING_WINDOW_SIZE 0x00800000
|
|
|
|
// unused (CONSOLE_VDM_HIDDEN_WINDOW) 0x01000000
|
|
|
|
// unused (CONSOLE_OS2_REGISTERED) 0x02000000
|
|
|
|
// unused (CONSOLE_OS2_OEM_FORMAT) 0x04000000
|
|
|
|
// unused (CONSOLE_JUST_VDM_UNREGISTERED) 0x08000000
|
|
|
|
// unused (CONSOLE_FULLSCREEN_INITIALIZED) 0x10000000
|
|
|
|
#define CONSOLE_USE_PRIVATE_FLAGS 0x20000000
|
|
|
|
// unused (CONSOLE_TSF_ACTIVATED) 0x40000000
|
|
|
|
#define CONSOLE_INITIALIZED 0x80000000
|
|
|
|
|
|
|
|
#define CONSOLE_SUSPENDED (CONSOLE_OUTPUT_SUSPENDED)
|
2019-06-11 22:27:09 +02:00
|
|
|
// clang-format on
|
2019-05-03 00:29:04 +02:00
|
|
|
|
|
|
|
class COOKED_READ_DATA;
|
|
|
|
class CommandHistory;
|
|
|
|
|
|
|
|
class CONSOLE_INFORMATION :
|
|
|
|
public Settings,
|
Improve the propagation of color attributes over ConPTY (#6506)
This PR reimplements the VT rendering engines to do a better job of
preserving the original color types when propagating attributes over
ConPTY. For the 16-color renderers it provides better support for
default colors and improves the efficiency of the color narrowing
conversions. It also fixes problems with the ordering of character
renditions that could result in attributes being dropped.
Originally the base renderer would calculate the RGB color values and
legacy/extended attributes up front, passing that data on to the active
engine's `UpdateDrawingBrushes` method. With this new implementation,
the renderer now just passes through the original `TextAttribute` along
with an `IRenderData` interface, and leaves it to the engines to extract
the information they need.
The GDI and DirectX engines now have to lookup the RGB colors themselves
(via simple `IRenderData` calls), but have no need for the other
attributes. The VT engines extract the information that they need from
the `TextAttribute`, instead of having to reverse engineer it from
`COLORREF`s.
The process for the 256-color Xterm engine starts with a check for
default colors. If both foreground and background are default, it
outputs a SGR 0 reset, and clears the `_lastTextAttribute` completely to
make sure any reset state is reapplied. With that out the way, the
foreground and background are updated (if changed) in one of 4 ways.
They can either be a default value (SGR 39 and 49), a 16-color index
(using ANSI or AIX sequences), a 256-color index, or a 24-bit RGB value
(both using SGR 38 and 48 sequences).
Then once the colors are accounted for, there is a separate step that
handles the character rendition attributes (bold, italics, underline,
etc.) This step must come _after_ the color sequences, in case a SGR
reset is required, which would otherwise have cleared any character
rendition attributes if it came last (which is what happened in the
original implementation).
The process for the 16-color engines is a little different. The target
client in this case (Windows telnet) is incapable of setting default
colors individually, so we need to output an SGR 0 reset if _either_
color has changed to default. With that out the way, we use the
`TextColor::GetLegacyIndex` method to obtain an approximate 16-color
index for each color, and apply the bold attribute by brightening the
foreground index (setting bit 8) if the color type permits that.
However, since Windows telnet only supports the 8 basic ANSI colors, the
best we can do for bright colors is to output an SGR 1 attribute to get
a bright foreground. There is nothing we can do about a bright
background, so after that we just have to drop the high bit from the
colors. If the resulting index values have changed from what they were
before, we then output ANSI 8-color SGR sequences to update them.
As with the 256-color engine, there is also a final step to handle the
character rendition attributes. But in this case, the only supported
attributes are underline and reversed video.
Since the VT engines no longer depend on the active color table and
default color values, there was quite a lot of code that could now be
removed. This included the `IDefaultColorProvider` interface and
implementations, the `Find(Nearest)TableIndex` functions, and also the
associated HLS conversion and difference calculations.
VALIDATION
Other than simple API parameter changes, the majority of updates
required in the unit tests were to correct assumptions about the way the
colors should be rendered, which were the source of the narrowing bugs
this PR was trying to fix. Like passing white on black to the
`UpdateDrawingBrushes` API, and expecting it to output the default `SGR
0` sequence, or passing an RGB color and expecting an indexed SGR
sequence.
In addition to that, I've added some VT renderer tests to make sure the
rendition attributes (bold, underline, etc) are correctly retained when
a default color update causes an `SGR 0` sequence to be generated (the
source of bug #3076). And I've extended the VT renderer color tests
(both 256-color and 16-color) to make sure we're covering all of the
different color types (default, RGB, and both forms of indexed colors).
I've also tried to manually verify that all of the test cases in the
linked bug reports (and their associated duplicates) are now fixed when
this PR is applied.
Closes #2661
Closes #3076
Closes #3717
Closes #5384
Closes #5864
This is only a partial fix for #293, but I suspect the remaining cases
are unfixable.
2020-07-01 20:10:36 +02:00
|
|
|
public Microsoft::Console::IIoProvider
|
2019-05-03 00:29:04 +02:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
CONSOLE_INFORMATION();
|
|
|
|
~CONSOLE_INFORMATION();
|
|
|
|
CONSOLE_INFORMATION(const CONSOLE_INFORMATION& c) = delete;
|
|
|
|
CONSOLE_INFORMATION& operator=(const CONSOLE_INFORMATION& c) = delete;
|
|
|
|
|
|
|
|
ConsoleProcessList ProcessHandleList;
|
|
|
|
InputBuffer* pInputBuffer;
|
|
|
|
|
2019-06-11 22:27:09 +02:00
|
|
|
SCREEN_INFORMATION* ScreenBuffers; // singly linked list
|
2019-05-03 00:29:04 +02:00
|
|
|
ConsoleWaitQueue OutputQueue;
|
|
|
|
|
|
|
|
DWORD Flags;
|
|
|
|
|
|
|
|
std::atomic<WORD> PopupCount;
|
|
|
|
|
|
|
|
// the following fields are used for ansi-unicode translation
|
|
|
|
UINT CP;
|
|
|
|
UINT OutputCP;
|
|
|
|
|
2019-06-11 22:27:09 +02:00
|
|
|
ULONG CtrlFlags; // indicates outstanding ctrl requests
|
2019-05-03 00:29:04 +02:00
|
|
|
ULONG LimitingProcessId;
|
|
|
|
|
|
|
|
CPINFO CPInfo;
|
|
|
|
CPINFO OutputCPInfo;
|
|
|
|
|
|
|
|
ConsoleImeInfo ConsoleIme;
|
|
|
|
|
|
|
|
void LockConsole();
|
|
|
|
bool TryLockConsole();
|
|
|
|
void UnlockConsole();
|
|
|
|
bool IsConsoleLocked() const;
|
|
|
|
ULONG GetCSRecursionCount();
|
|
|
|
|
|
|
|
Microsoft::Console::VirtualTerminal::VtIo* GetVtIo();
|
|
|
|
|
|
|
|
SCREEN_INFORMATION& GetActiveOutputBuffer() override;
|
|
|
|
const SCREEN_INFORMATION& GetActiveOutputBuffer() const override;
|
|
|
|
bool HasActiveOutputBuffer() const;
|
|
|
|
|
|
|
|
InputBuffer* const GetActiveInputBuffer() const;
|
|
|
|
|
|
|
|
bool IsInVtIoMode() const;
|
|
|
|
bool HasPendingCookedRead() const noexcept;
|
|
|
|
const COOKED_READ_DATA& CookedReadData() const noexcept;
|
|
|
|
COOKED_READ_DATA& CookedReadData() noexcept;
|
|
|
|
void SetCookedReadData(COOKED_READ_DATA* readData) noexcept;
|
|
|
|
|
|
|
|
COLORREF GetDefaultForeground() const noexcept;
|
|
|
|
COLORREF GetDefaultBackground() const noexcept;
|
Add support for the "blink" graphic rendition attribute (#7490)
This PR adds support for the _blink_ graphic rendition attribute. When a
character is output with this attribute set, it "blinks" at a regular
interval, by cycling its color between the normal rendition and a dimmer
shade of that color.
The majority of the blinking mechanism is encapsulated in a new
`BlinkingState` class, which is shared between the Terminal and Conhost
implementations. This class keeps track of the position in the blinking
cycle, which determines whether characters are rendered as normal or
faint.
In Windows Terminal, the state is stored in the `Terminal` class, and in
Conhost it's stored in the `CONSOLE_INFORMATION` class. In both cases,
the `IsBlinkingFaint` method is used to determine the current blinking
rendition, and that is passed on as a parameter to the
`TextAttribute::CalculateRgbColors` method when these classes are
looking up attribute colors.
Prior to calculating the colors, the current attribute is also passed to
the `RecordBlinkingUsage` method, which keeps track of whether there are
actually any blink attributes in use. This is used to determine whether
the screen needs to be refreshed when the blinking cycle toggles between
the normal and faint renditions.
The refresh itself is handled by the `ToggleBlinkingRendition` method,
which is triggered by a timer. In Conhost this is just piggybacking on
the existing cursor blink timer, but in Windows Terminal it needs to
have its own separate timer, since the cursor timer is reset whenever a
key is pressed, which is not something we want for attribute blinking.
Although the `ToggleBlinkingRendition` is called at the same rate as the
cursor blinking, we actually only want the cells to blink at half that
frequency. We thus have a counter that cycles through four phases, and
blinking is rendered as faint for two of those four. Then every two
cycles - when the state changes - a redraw is triggered, but only if
there are actually blinking attributes in use (as previously recorded).
As mentioned earlier, the blinking frequency is based on the cursor
blink rate, so that means it'll automatically be disabled if a user has
set their cursor blink rate to none. It can also be disabled by turning
off the _Show animations in Windows_ option. In Conhost these settings
take effect immediately, but in Windows Terminal they only apply when a
new tab is opened.
This PR also adds partial support for the `SGR 6` _rapid blink_
attribute. This is not used by DEC terminals, but was defined in the
ECMA/ANSI standards. It's not widely supported, but many terminals just
it implement it as an alias for the regular `SGR 5` blink attribute, so
that's what I've done here too.
## Validation Steps Performed
I've checked the _Graphic rendition test pattern_ in Vttest, and
compared our representation of the blink attribute to that of an actual
DEC VT220 terminal as seen on [YouTube]. With the right color scheme
it's a reasonably close match.
[YouTube]: https://www.youtube.com/watch?v=03Pz5AmxbE4&t=1m55s
Closes #7388
2020-09-22 01:21:33 +02:00
|
|
|
std::pair<COLORREF, COLORREF> LookupAttributeColors(const TextAttribute& attr) const noexcept;
|
2019-05-03 00:29:04 +02:00
|
|
|
|
|
|
|
void SetTitle(const std::wstring_view newTitle);
|
|
|
|
void SetTitlePrefix(const std::wstring& newTitlePrefix);
|
|
|
|
void SetOriginalTitle(const std::wstring& originalTitle);
|
|
|
|
void SetLinkTitle(const std::wstring& linkTitle);
|
|
|
|
const std::wstring& GetTitle() const noexcept;
|
|
|
|
const std::wstring& GetOriginalTitle() const noexcept;
|
|
|
|
const std::wstring& GetLinkTitle() const noexcept;
|
|
|
|
const std::wstring GetTitleAndPrefix() const;
|
|
|
|
|
2019-06-11 22:27:09 +02:00
|
|
|
[[nodiscard]] static NTSTATUS AllocateConsole(const std::wstring_view title);
|
2019-05-03 00:29:04 +02:00
|
|
|
// MSFT:16886775 : get rid of friends
|
|
|
|
friend void SetActiveScreenBuffer(_Inout_ SCREEN_INFORMATION& screenInfo);
|
|
|
|
friend class SCREEN_INFORMATION;
|
|
|
|
friend class CommonState;
|
|
|
|
Microsoft::Console::CursorBlinker& GetCursorBlinker() noexcept;
|
Add support for the "blink" graphic rendition attribute (#7490)
This PR adds support for the _blink_ graphic rendition attribute. When a
character is output with this attribute set, it "blinks" at a regular
interval, by cycling its color between the normal rendition and a dimmer
shade of that color.
The majority of the blinking mechanism is encapsulated in a new
`BlinkingState` class, which is shared between the Terminal and Conhost
implementations. This class keeps track of the position in the blinking
cycle, which determines whether characters are rendered as normal or
faint.
In Windows Terminal, the state is stored in the `Terminal` class, and in
Conhost it's stored in the `CONSOLE_INFORMATION` class. In both cases,
the `IsBlinkingFaint` method is used to determine the current blinking
rendition, and that is passed on as a parameter to the
`TextAttribute::CalculateRgbColors` method when these classes are
looking up attribute colors.
Prior to calculating the colors, the current attribute is also passed to
the `RecordBlinkingUsage` method, which keeps track of whether there are
actually any blink attributes in use. This is used to determine whether
the screen needs to be refreshed when the blinking cycle toggles between
the normal and faint renditions.
The refresh itself is handled by the `ToggleBlinkingRendition` method,
which is triggered by a timer. In Conhost this is just piggybacking on
the existing cursor blink timer, but in Windows Terminal it needs to
have its own separate timer, since the cursor timer is reset whenever a
key is pressed, which is not something we want for attribute blinking.
Although the `ToggleBlinkingRendition` is called at the same rate as the
cursor blinking, we actually only want the cells to blink at half that
frequency. We thus have a counter that cycles through four phases, and
blinking is rendered as faint for two of those four. Then every two
cycles - when the state changes - a redraw is triggered, but only if
there are actually blinking attributes in use (as previously recorded).
As mentioned earlier, the blinking frequency is based on the cursor
blink rate, so that means it'll automatically be disabled if a user has
set their cursor blink rate to none. It can also be disabled by turning
off the _Show animations in Windows_ option. In Conhost these settings
take effect immediately, but in Windows Terminal they only apply when a
new tab is opened.
This PR also adds partial support for the `SGR 6` _rapid blink_
attribute. This is not used by DEC terminals, but was defined in the
ECMA/ANSI standards. It's not widely supported, but many terminals just
it implement it as an alias for the regular `SGR 5` blink attribute, so
that's what I've done here too.
## Validation Steps Performed
I've checked the _Graphic rendition test pattern_ in Vttest, and
compared our representation of the blink attribute to that of an actual
DEC VT220 terminal as seen on [YouTube]. With the right color scheme
it's a reasonably close match.
[YouTube]: https://www.youtube.com/watch?v=03Pz5AmxbE4&t=1m55s
Closes #7388
2020-09-22 01:21:33 +02:00
|
|
|
Microsoft::Console::Render::BlinkingState& GetBlinkingState() const noexcept;
|
2019-05-03 00:29:04 +02:00
|
|
|
|
|
|
|
CHAR_INFO AsCharInfo(const OutputCellView& cell) const noexcept;
|
|
|
|
|
|
|
|
RenderData renderData;
|
|
|
|
|
|
|
|
private:
|
2019-06-11 22:27:09 +02:00
|
|
|
CRITICAL_SECTION _csConsoleLock; // serialize input and output using this
|
2019-05-03 00:29:04 +02:00
|
|
|
std::wstring _Title;
|
|
|
|
std::wstring _TitlePrefix; // Eg Select, Mark - things that we manually prepend to the title.
|
|
|
|
std::wstring _OriginalTitle;
|
2019-06-11 22:27:09 +02:00
|
|
|
std::wstring _LinkTitle; // Path to .lnk file
|
2019-05-03 00:29:04 +02:00
|
|
|
SCREEN_INFORMATION* pCurrentScreenBuffer;
|
|
|
|
COOKED_READ_DATA* _cookedReadData; // non-ownership pointer
|
|
|
|
|
|
|
|
Microsoft::Console::VirtualTerminal::VtIo _vtIo;
|
|
|
|
Microsoft::Console::CursorBlinker _blinker;
|
Add support for the "blink" graphic rendition attribute (#7490)
This PR adds support for the _blink_ graphic rendition attribute. When a
character is output with this attribute set, it "blinks" at a regular
interval, by cycling its color between the normal rendition and a dimmer
shade of that color.
The majority of the blinking mechanism is encapsulated in a new
`BlinkingState` class, which is shared between the Terminal and Conhost
implementations. This class keeps track of the position in the blinking
cycle, which determines whether characters are rendered as normal or
faint.
In Windows Terminal, the state is stored in the `Terminal` class, and in
Conhost it's stored in the `CONSOLE_INFORMATION` class. In both cases,
the `IsBlinkingFaint` method is used to determine the current blinking
rendition, and that is passed on as a parameter to the
`TextAttribute::CalculateRgbColors` method when these classes are
looking up attribute colors.
Prior to calculating the colors, the current attribute is also passed to
the `RecordBlinkingUsage` method, which keeps track of whether there are
actually any blink attributes in use. This is used to determine whether
the screen needs to be refreshed when the blinking cycle toggles between
the normal and faint renditions.
The refresh itself is handled by the `ToggleBlinkingRendition` method,
which is triggered by a timer. In Conhost this is just piggybacking on
the existing cursor blink timer, but in Windows Terminal it needs to
have its own separate timer, since the cursor timer is reset whenever a
key is pressed, which is not something we want for attribute blinking.
Although the `ToggleBlinkingRendition` is called at the same rate as the
cursor blinking, we actually only want the cells to blink at half that
frequency. We thus have a counter that cycles through four phases, and
blinking is rendered as faint for two of those four. Then every two
cycles - when the state changes - a redraw is triggered, but only if
there are actually blinking attributes in use (as previously recorded).
As mentioned earlier, the blinking frequency is based on the cursor
blink rate, so that means it'll automatically be disabled if a user has
set their cursor blink rate to none. It can also be disabled by turning
off the _Show animations in Windows_ option. In Conhost these settings
take effect immediately, but in Windows Terminal they only apply when a
new tab is opened.
This PR also adds partial support for the `SGR 6` _rapid blink_
attribute. This is not used by DEC terminals, but was defined in the
ECMA/ANSI standards. It's not widely supported, but many terminals just
it implement it as an alias for the regular `SGR 5` blink attribute, so
that's what I've done here too.
## Validation Steps Performed
I've checked the _Graphic rendition test pattern_ in Vttest, and
compared our representation of the blink attribute to that of an actual
DEC VT220 terminal as seen on [YouTube]. With the right color scheme
it's a reasonably close match.
[YouTube]: https://www.youtube.com/watch?v=03Pz5AmxbE4&t=1m55s
Closes #7388
2020-09-22 01:21:33 +02:00
|
|
|
mutable Microsoft::Console::Render::BlinkingState _blinkingState;
|
2019-05-03 00:29:04 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
#define ConsoleLocked() (ServiceLocator::LocateGlobals()->getConsoleInformation()->ConsoleLock.OwningThread == NtCurrentTeb()->ClientId.UniqueThread)
|
|
|
|
|
|
|
|
#define CONSOLE_STATUS_WAIT 0xC0030001
|
|
|
|
#define CONSOLE_STATUS_READ_COMPLETE 0xC0030002
|
|
|
|
#define CONSOLE_STATUS_WAIT_NO_BLOCK 0xC0030003
|
|
|
|
|
|
|
|
#include "..\server\ObjectHandle.h"
|
|
|
|
|
|
|
|
void SetActiveScreenBuffer(SCREEN_INFORMATION& screenInfo);
|