63 NewBuffer->BitMapInfoLength = GraphicsInfo->Info.dwBitMapInfoLength;
66 if (NewBuffer->BitMapInfo ==
NULL)
73 if (GraphicsInfo->Info.lpBitMapInfo->bmiHeader.biHeight > 0)
74 GraphicsInfo->Info.lpBitMapInfo->bmiHeader.biHeight = -GraphicsInfo->Info.lpBitMapInfo->bmiHeader.biHeight;
77 if (GraphicsInfo->Info.lpBitMapInfo->bmiHeader.biCompression !=
BI_RGB)
79 DPRINT1(
"biCompression == %d != BI_RGB, fix that!\n",
80 GraphicsInfo->Info.lpBitMapInfo->bmiHeader.biCompression);
81 GraphicsInfo->Info.lpBitMapInfo->bmiHeader.biCompression =
BI_RGB;
85 GraphicsInfo->Info.lpBitMapInfo,
86 GraphicsInfo->Info.dwBitMapInfoLength);
88 NewBuffer->BitMapUsage = GraphicsInfo->Info.dwUsage;
91 if ( GraphicsInfo->Info.lpBitMapInfo->bmiHeader.biWidth <= 0xFFFF &&
92 -GraphicsInfo->Info.lpBitMapInfo->bmiHeader.biHeight <= 0xFFFF )
129 &NewBuffer->ClientMutex,
143 SectionSize.
QuadPart = NewBuffer->BitMapInfo->bmiHeader.biSizeImage;
153 DPRINT1(
"Error: Impossible to create a shared section, Status = 0x%08lx\n",
Status);
166 NewBuffer->BitMap =
NULL;
169 (
PVOID*)&NewBuffer->BitMap,
179 DPRINT1(
"Error: Impossible to map the shared section, Status = 0x%08lx\n",
Status);
194 NewBuffer->ClientBitMap =
NULL;
197 (
PVOID*)&NewBuffer->ClientBitMap,
207 DPRINT1(
"Error: Impossible to map the shared section, Status = 0x%08lx\n",
Status);
#define DUPLICATE_CLOSE_SOURCE
NTSTATUS NTAPI NtUnmapViewOfSection(IN HANDLE ProcessHandle, IN PVOID BaseAddress)
#define STATUS_INSUFFICIENT_RESOURCES
NTSTATUS NTAPI NtCreateSection(OUT PHANDLE SectionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER MaximumSize OPTIONAL, IN ULONG SectionPageProtection OPTIONAL, IN ULONG AllocationAttributes, IN HANDLE FileHandle OPTIONAL)
#define STATUS_INVALID_PARAMETER
#define ConsoleAllocHeap(Flags, Size)
IN PVOID IN PVOID IN USHORT IN USHORT Size
COORD OldScreenBufferSize
NTSTATUS GRAPHICS_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER *Buffer, IN PCONSOLE Console, IN HANDLE ProcessHandle, IN PGRAPHICS_BUFFER_INFO GraphicsInfo)
#define SECTION_ALL_ACCESS
#define DUPLICATE_SAME_ACCESS
#define MUTANT_ALL_ACCESS
NTSTATUS NTAPI NtMapViewOfSection(IN HANDLE SectionHandle, IN HANDLE ProcessHandle, IN OUT PVOID *BaseAddress, IN ULONG_PTR ZeroBits, IN SIZE_T CommitSize, IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, IN OUT PSIZE_T ViewSize, IN SECTION_INHERIT InheritDisposition, IN ULONG AllocationType, IN ULONG Protect)
VOID CONSOLE_SCREEN_BUFFER_Destroy(IN OUT PCONSOLE_SCREEN_BUFFER Buffer)
struct _CONSOLE_SCREEN_BUFFER * PCONSOLE_SCREEN_BUFFER
VOID GRAPHICS_BUFFER_Destroy(IN OUT PCONSOLE_SCREEN_BUFFER Buffer)
#define NtCurrentProcess()
#define NT_SUCCESS(StatCode)
NTSTATUS NTAPI NtCreateMutant(OUT PHANDLE MutantHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN BOOLEAN InitialOwner)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
struct _GRAPHICS_SCREEN_BUFFER * PGRAPHICS_SCREEN_BUFFER
NTSTATUS CONSOLE_SCREEN_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER *Buffer, IN PCONSOLE Console, IN CONSOLE_IO_OBJECT_TYPE Type, IN SIZE_T Size)
#define ConsoleFreeHeap(HeapBase)
NTSTATUS NTAPI NtDuplicateObject(IN HANDLE SourceProcessHandle, IN HANDLE SourceHandle, IN HANDLE TargetProcessHandle OPTIONAL, OUT PHANDLE TargetHandle OPTIONAL, IN ACCESS_MASK DesiredAccess, IN ULONG HandleAttributes, IN ULONG Options)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
#define RtlCopyMemory(Destination, Source, Length)
_In_ HANDLE ProcessHandle
CONSOLE_CURSOR_INFO CursorInfo
enum _CONSOLE_IO_OBJECT_TYPE CONSOLE_IO_OBJECT_TYPE