24#define SacAllocatePool(Length, Tag) \
25 MyAllocatePool(Length, Tag, __FILE__, __LINE__)
26#define SacFreePool(Pointer) \
27 MyFreePool((PVOID*)(&Pointer))
32#define SAC_DBG_ENTRY_EXIT 0x01
33#define SAC_DBG_UTIL 0x02
34#define SAC_DBG_INIT 0x04
35#define SAC_DBG_MM 0x1000
36#define SAC_DBG_MACHINE 0x2000
37#define SAC_DBG(x, ...) \
40 DbgPrint("SAC %s: ", __FUNCTION__); \
41 DbgPrint(__VA_ARGS__); \
47#define CHECK_PARAMETER_WITH_STATUS(Condition, Status) \
49 if (!NT_VERIFY(Condition)) \
54#define CHECK_PARAMETER(x) \
55 CHECK_PARAMETER_WITH_STATUS(x, STATUS_INVALID_PARAMETER)
56#define CHECK_PARAMETER1(x) \
57 CHECK_PARAMETER_WITH_STATUS(x, STATUS_INVALID_PARAMETER_1)
58#define CHECK_PARAMETER2(x) \
59 CHECK_PARAMETER_WITH_STATUS(x, STATUS_INVALID_PARAMETER_2)
60#define CHECK_PARAMETER3(x) \
61 CHECK_PARAMETER_WITH_STATUS(x, STATUS_INVALID_PARAMETER_3)
62#define CHECK_PARAMETER4(x) \
63 CHECK_PARAMETER_WITH_STATUS(x, STATUS_INVALID_PARAMETER_4)
64#define CHECK_ALLOCATION(x) \
65 CHECK_PARAMETER_WITH_STATUS(x, STATUS_NO_MEMORY)
70#define ChannelInitializeEvent(Channel, Attributes, x) \
72 PVOID Object, WaitObject; \
75 if (!VerifyEventWaitable(Attributes->x, &Object, &WaitObject)) \
77 Status = STATUS_INVALID_HANDLE; \
80 Channel->x = Attributes->x; \
81 Channel->x##ObjectBody = Object; \
82 Channel->x##WaitObjectBody = WaitObject; \
85#define ChannelUninitializeEvent(Channel, x, f) \
87 ASSERT(ChannelGetFlags(Channel) & (f)); \
88 ASSERT(Channel->x##ObjectBody); \
89 ASSERT(Channel->x##WaitObjectBody); \
90 if (Channel->x##ObjectBody) \
92 ObDereferenceObject(Channel->x##ObjectBody); \
93 Channel->Flags &= ~(f); \
95 Channel->x##ObjectBody = NULL; \
96 Channel->x##WaitObjectBody = NULL; \
99#define ChannelSetEvent(Channel, x) \
101 ASSERT(Channel->x); \
102 ASSERT(Channel->x##ObjectBody); \
103 ASSERT(Channel->x##WaitObjectBody); \
104 if (Channel->x##WaitObjectBody) \
106 KeSetEvent(Channel->x##WaitObjectBody, EVENT_INCREMENT, FALSE); \
107 Status = STATUS_SUCCESS; \
111 Status = STATUS_UNSUCCESSFUL; \
114#define ChannelClearEvent(Channel, x) \
116 ASSERT(Channel->x); \
117 ASSERT(Channel->x##ObjectBody); \
118 ASSERT(Channel->x##WaitObjectBody); \
119 if (Channel->x##WaitObjectBody) \
121 KeClearEvent(Channel->x##WaitObjectBody); \
122 Status = STATUS_SUCCESS; \
126 Status = STATUS_UNSUCCESSFUL; \
137#define GENERIC_TAG '?pcR'
138#define ALLOC_BLOCK_TAG 'ApcR'
139#define INITIAL_BLOCK_TAG 'IpcR'
140#define SECURITY_BLOCK_TAG 'SpcR'
141#define FREE_POOL_TAG 'FpcR'
142#define GLOBAL_BLOCK_TAG 'GpcR'
143#define CHANNEL_BLOCK_TAG 'CpcR'
144#define LOCAL_MEMORY_SIGNATURE 'SSEL'
145#define GLOBAL_MEMORY_SIGNATURE 'DAEH'
150#define SAC_MEMORY_LIST_SIZE (1 * 1024 * 1024)
151#define SAC_OBUFFER_SIZE (2 * 1024)
152#define SAC_CHANNEL_NAME_SIZE 64
153#define SAC_CHANNEL_DESCRIPTION_SIZE 256
154#define SAC_MAX_CHANNELS 10
155#define SAC_SERIAL_PORT_BUFFER_SIZE 1024
156#define SAC_MAX_MESSAGES 200
157#define SAC_VTUTF8_COL_WIDTH 80
158#define SAC_VTUTF8_COL_HEIGHT 25
159#define SAC_VTUTF8_ROW_HEIGHT 24
160#define MAX_UTF8_ENCODE_BLOCK_LENGTH (Utf8ConversionBufferSize / 3 - 1)
161#define SAC_VTUTF8_OBUFFER_SIZE 0x2D00
162#define SAC_VTUTF8_IBUFFER_SIZE 0x2000
163#define SAC_RAW_OBUFFER_SIZE 0x2000
164#define SAC_RAW_IBUFFER_SIZE 0x2000
169#define SAC_CHANNEL_FLAG_INTERNAL 0x1
170#define SAC_CHANNEL_FLAG_CLOSE_EVENT 0x2
171#define SAC_CHANNEL_FLAG_HAS_NEW_DATA_EVENT 0x4
172#define SAC_CHANNEL_FLAG_LOCK_EVENT 0x8
173#define SAC_CHANNEL_FLAG_REDRAW_EVENT 0x10
174#define SAC_CHANNEL_FLAG_APPLICATION 0x20
179#define SAC_CELL_FLAG_BLINK 1
180#define SAC_CELL_FLAG_BOLD 2
181#define SAC_CELL_FLAG_INVERTED 4
1330#define ChannelLockCreates() SacAcquireLock(&ChannelCreateLock);
1331#define ChannelUnlockCreates() SacReleaseLock(&ChannelCreateLock);
1332#define ChannelLockOBuffer(x) SacAcquireLock(&x->ChannelOBufferLock);
1333#define ChannelUnlockOBuffer(x) SacReleaseLock(&x->ChannelOBufferLock);
1334#define ChannelLockIBuffer(x) SacAcquireLock(&x->ChannelIBufferLock);
1335#define ChannelUnlockIBuffer(x) SacReleaseLock(&x->ChannelIBufferLock);
1336#define ChannelLockAttributes(x) SacAcquireLock(&x->ChannelAttributeLock);
1337#define ChannelUnlockAttributes(x) SacReleaseLock(&x->ChannelAttributeLock);
1338#define ChannelSlotLock(x) SacAcquireLock(&ChannelSlotLock[x]);
1339#define ChannelSlotUnlock(x) SacReleaseLock(&ChannelSlotLock[x]);
1348 return Channel->Flags;
1356 return Channel->Index;
1364 return Channel->ChannelHasNewIBufferData;
1484#define VT_ANSI_ESCAPE L'\x1B'
1485#define VT_ANSI_COMMAND L'['
1487#define VT_ANSI_CURSOR_UP_CHAR L'A'
1488#define VT_ANSI_CURSOR_UP L"[A"
1490#define VT_ANSI_CURSOR_DOWN_CHAR L'B'
1491#define VT_ANSI_CURSOR_DOWN L"[B"
1493#define VT_ANSI_CURSOR_RIGHT_CHAR L'C'
1494#define VT_ANSI_CURSOR_RIGHT L"[C"
1496#define VT_ANSI_CURSOR_LEFT_CHAR L'D'
1497#define VT_ANSI_CURSOR_LEFT L"[D"
1499#define VT_ANSI_ERASE_LINE_CHAR L'K'
1500#define VT_ANSI_ERASE_END_LINE L"[K"
1501#define VT_ANSI_ERASE_START_LINE L"[1K"
1502#define VT_ANSI_ERASE_ENTIRE_LINE L"[2K"
1504#define VT_ANSI_ERASE_SCREEN_CHAR L'J'
1505#define VT_ANSI_ERASE_DOWN_SCREEN L"[J"
1506#define VT_ANSI_ERASE_UP_SCREEN L"[1J"
1507#define VT_ANSI_ERASE_ENTIRE_SCREEN L"[2J"
1509#define VT_ANSI_BACKTAB_CHAR L'Z'
1510#define VT_220_BACKTAB L"[0Z"
1512#define VT_ANSI_SET_ATTRIBUTE_CHAR L'm'
1513#define VT_ANSI_SEPARATOR_CHAR L';'
1514#define VT_ANSI_HVP_CURSOR_CHAR L'f'
1515#define VT_ANSI_CUP_CURSOR_CHAR L'H'
1516#define VT_ANSI_SCROLL_CHAR L'r'
PSAC_CHANNEL CurrentChannel
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
long __cdecl _InterlockedIncrement(_Interlocked_operand_ long volatile *_Addend)
long __cdecl _InterlockedDecrement(_Interlocked_operand_ long volatile *_Addend)
_In_ PDRIVER_UNLOAD UnloadHandler
_In_ NDIS_STATUS EventCode
_In_ ULONG _In_ ULONG _In_ ULONG Length
VOID NTAPI KeInitializeMutex(IN PKMUTEX Mutex, IN ULONG Level)
LONG NTAPI KeReleaseMutex(IN PKMUTEX Mutex, IN BOOLEAN Wait)
struct _SAC_CHANNEL * PSAC_CHANNEL
NTSTATUS NTAPI ChannelClose(IN PSAC_CHANNEL Channel)
#define SAC_CHANNEL_DESCRIPTION_SIZE
NTSTATUS NTAPI VTUTF8ChannelOEcho(IN PSAC_CHANNEL Channel, IN PCHAR String, IN ULONG Length)
NTSTATUS NTAPI ChanMgrGetNextActiveChannel(IN PSAC_CHANNEL CurrentChannel, IN PULONG TargetIndex, OUT PSAC_CHANNEL *TargetChannel)
NTSTATUS NTAPI UTF8EncodeAndSend(IN PWCHAR String)
BOOLEAN NTAPI ConMgrSimpleEventMessage(IN ULONG MessageIndex, IN BOOLEAN LockHeld)
VOID NTAPI ConMgrWorkerProcessEvents(IN PSAC_DEVICE_EXTENSION DeviceExtension)
NTSTATUS(NTAPI * PSAC_CHANNEL_DESTROY)(IN struct _SAC_CHANNEL *Channel)
ULONG NTAPI RawChannelIBufferLength(IN PSAC_CHANNEL Channel)
VOID NTAPI DoRaisePriorityCommand(IN PCHAR PrioString)
BOOLEAN NTAPI VerifyEventWaitable(IN HANDLE Handle, OUT PVOID *WaitObject, OUT PVOID *ActualWaitObject)
VOID NTAPI DoChannelCommand(IN PCHAR ChannelString)
NTSTATUS NTAPI VTUTF8ChannelOFlush(IN PSAC_CHANNEL Channel)
NTSTATUS NTAPI ImposeSacCmdServiceStartTypePolicy(VOID)
BOOLEAN NTAPI InitializeDeviceData(IN PDEVICE_OBJECT DeviceObject)
VOID NTAPI DoCrashCommand(VOID)
VOID NTAPI MyFreePool(IN PVOID *Block)
enum _SAC_POST_COMMANDS SAC_POST_COMMANDS
VOID NTAPI FreeMemoryManagement(VOID)
LONG CurrentChannelRefCount
WCHAR(NTAPI * PSAC_CHANNEL_IREAD_LAST)(IN struct _SAC_CHANNEL *Channel)
VOID NTAPI DoGetNetInfo(IN BOOLEAN DoPrint)
ULONG Utf8ConversionBufferSize
VOID NTAPI DoLimitMemoryCommand(IN PCHAR LimitString)
ULONG NTAPI ChannelIBufferLength(IN PSAC_CHANNEL Channel)
enum _SAC_CHANNEL_STATUS * PSAC_CHANNEL_STATUS
NTSTATUS(NTAPI * PSAC_CHANNEL_IREAD)(IN struct _SAC_CHANNEL *Channel, IN PCHAR Buffer, IN ULONG BufferSize, IN PULONG ReturnBufferSize)
struct _SAC_MEMORY_LIST SAC_MEMORY_LIST
BOOLEAN NTAPI ConMgrIsWriteEnabled(IN PSAC_CHANNEL Channel)
FORCEINLINE ULONG ChannelGetFlags(IN PSAC_CHANNEL Channel)
FORCEINLINE VOID SacAcquireMutexLock(VOID)
NTSTATUS NTAPI PreloadGlobalMessageTable(IN PVOID ImageBase)
NTSTATUS NTAPI ChannelGetName(IN PSAC_CHANNEL Channel, OUT PWCHAR *Name)
FORCEINLINE VOID SacAcquireLock(IN PSAC_CHANNEL_LOCK Lock)
LONG SerialPortProducerIndex
NTSTATUS NTAPI RegisterBlueScreenMachineInformation(VOID)
BOOLEAN GlobalPagingNeeded
NTSTATUS NTAPI ChanMgrReleaseChannel(IN PSAC_CHANNEL Channel)
struct _SAC_CHANNEL_ATTRIBUTES * PSAC_CHANNEL_ATTRIBUTES
struct _SAC_MACHINE_INFO SAC_MACHINE_INFO
struct _SAC_DEVICE_EXTENSION SAC_DEVICE_EXTENSION
NTSTATUS NTAPI RawChannelIRead(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize, IN PULONG ReturnBufferSize)
NTSTATUS NTAPI DispatchDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
FORCEINLINE VOID SacReleaseLock(IN PSAC_CHANNEL_LOCK Lock)
KMUTEX CurrentChannelLock
VOID NTAPI DoLockCommand(VOID)
BOOLEAN NTAPI SacTranslateUtf8ToUnicode(IN CHAR Utf8Char, IN PCHAR Utf8Buffer, OUT PWCHAR Utf8Value)
VOID NTAPI DoMachineInformationCommand(VOID)
NTSTATUS(NTAPI * PSAC_CHANNEL_IBUFFER_FULL)(IN struct _SAC_CHANNEL *Channel, OUT PBOOLEAN BufferStatus)
VOID NTAPI DoFullInfoCommand(VOID)
struct _SAC_CHANNEL_LOCK * PSAC_CHANNEL_LOCK
NTSTATUS NTAPI ChannelIRead(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize, IN OUT PULONG ResultBufferSize)
VOID NTAPI FreeMachineInformation(VOID)
NTSTATUS(NTAPI * PSAC_CHANNEL_OWRITE)(IN struct _SAC_CHANNEL *Channel, IN PCHAR String, IN ULONG Length)
LONG SerialPortConsumerIndex
BOOLEAN NTAPI SacTranslateUnicodeToUtf8(IN PWCHAR SourceBuffer, IN ULONG SourceBufferLength, OUT PCHAR DestinationBuffer, IN ULONG DestinationBufferSize, OUT PULONG UTF8Count, OUT PULONG ProcessedCount)
NTSTATUS NTAPI RawChannelOWrite(IN PSAC_CHANNEL Channel, IN PCHAR String, IN ULONG Length)
FORCEINLINE VOID SacInitializeLock(IN PSAC_CHANNEL_LOCK Lock)
struct _SAC_MEMORY_LIST * PSAC_MEMORY_LIST
PSAC_MESSAGE_ENTRY GlobalMessageTable
VOID NTAPI SacPutString(IN PWCHAR String)
VOID NTAPI DoRebootCommand(IN BOOLEAN Reboot)
NTSTATUS NTAPI RawChannelDestroy(IN PSAC_CHANNEL Channel)
struct _SAC_MACHINE_INFO * PSAC_MACHINE_INFO
BOOLEAN NTAPI InitializeMemoryManagement(VOID)
struct _SAC_MEMORY_ENTRY SAC_MEMORY_ENTRY
VOID NTAPI DoSetIpAddressCommand(IN PCHAR IpString)
NTSTATUS(NTAPI * PSAC_CHANNEL_OECHO)(IN struct _SAC_CHANNEL *Channel, IN PCHAR String, IN ULONG Length)
enum _SAC_ANSI_COMMANDS SAC_ANSI_COMMANDS
ULONG NTAPI GetMessageLineCount(IN ULONG MessageIndex)
struct _SAC_MESSAGE_ENTRY * PSAC_MESSAGE_ENTRY
VOID NTAPI DoTlistCommand(VOID)
NTSTATUS NTAPI GetCommandConsoleLaunchingPermission(OUT PBOOLEAN Permission)
NTSTATUS NTAPI ChanMgrInitialize(VOID)
NTSTATUS NTAPI VTUTF8ChannelIWrite(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize)
NTSTATUS NTAPI ChanMgrCreateChannel(OUT PSAC_CHANNEL *Channel, IN PSAC_CHANNEL_ATTRIBUTES Attributes)
NTSTATUS NTAPI ChanMgrShutdown(VOID)
NTSTATUS NTAPI ChannelIWrite(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize)
NTSTATUS NTAPI VTUTF8ChannelORead(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize, OUT PULONG ByteCount)
VOID NTAPI InitializeMachineInformation(VOID)
NTSTATUS(NTAPI * PSAC_CHANNEL_OREAD)(IN struct _SAC_CHANNEL *Channel, IN PCHAR Buffer, IN ULONG BufferSize, OUT PULONG ByteCount)
NTSTATUS(NTAPI * PSAC_CHANNEL_OFLUSH)(IN struct _SAC_CHANNEL *Channel)
VOID NTAPI InitializeCmdEventInfo(VOID)
enum _SAC_CHANNEL_TYPE SAC_CHANNEL_TYPE
VOID NTAPI TimerDpcRoutine(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
VOID NTAPI FreeGlobalData(VOID)
NTSTATUS NTAPI ChannelDestroy(IN PSAC_CHANNEL Channel)
#define SAC_CHANNEL_NAME_SIZE
NTSTATUS NTAPI ConMgrInitialize(VOID)
FORCEINLINE BOOLEAN ChannelHasNewIBufferData(IN PSAC_CHANNEL Channel)
PCHAR Utf8ConversionBuffer
NTSTATUS NTAPI ConMgrWriteData(IN PSAC_CHANNEL Channel, IN PVOID Buffer, IN ULONG BufferLength)
NTSTATUS NTAPI VTUTF8ChannelCreate(IN PSAC_CHANNEL Channel)
ULONG(NTAPI * PSAC_CHANNEL_IBUFFER_LENGTH)(IN struct _SAC_CHANNEL *Channel)
FORCEINLINE VOID SacReleaseMutexLock(VOID)
struct _SAC_CELL_DATA SAC_CELL_DATA
NTSTATUS NTAPI RawChannelOEcho(IN PSAC_CHANNEL Channel, IN PCHAR String, IN ULONG Length)
NTSTATUS NTAPI ConMgrShutdown(VOID)
WCHAR NTAPI RawChannelIReadLast(IN PSAC_CHANNEL Channel)
NTSTATUS NTAPI VTUTF8ChannelIBufferIsFull(IN PSAC_CHANNEL Channel, OUT PBOOLEAN BufferStatus)
NTSTATUS NTAPI RawChannelCreate(IN PSAC_CHANNEL Channel)
NTSTATUS NTAPI ChanMgrCloseChannel(IN PSAC_CHANNEL Channel)
ULONG NTAPI VTUTF8ChannelIBufferLength(IN PSAC_CHANNEL Channel)
@ SacSetColorsAndAttributes
NTSTATUS NTAPI RawChannelIWrite(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize)
NTSTATUS(NTAPI * PSAC_CHANNEL_CREATE)(IN struct _SAC_CHANNEL *Channel)
VOID NTAPI DoSetTimeCommand(IN PCHAR InputTime)
NTSTATUS NTAPI ChannelOFlush(IN PSAC_CHANNEL Channel)
VOID NTAPI DoLowerPriorityCommand(IN PCHAR PrioString)
NTSTATUS NTAPI ConMgrFlushData(IN PSAC_CHANNEL Channel)
struct _SAC_VTUTF8_SCREEN SAC_VTUTF8_SCREEN
BOOLEAN NTAPI ChannelIsEqual(IN PSAC_CHANNEL Channel, IN PSAC_CHANNEL_ID ChannelId)
BOOLEAN CommandConsoleLaunchingEnabled
struct _SAC_MEMORY_ENTRY * PSAC_MEMORY_ENTRY
struct _SAC_CELL_DATA * PSAC_CELL_DATA
enum _SAC_CHANNEL_STATUS SAC_CHANNEL_STATUS
struct _SAC_STATIC_ESCAPE_STRING SAC_STATIC_ESCAPE_STRING
struct _SAC_CHANNEL_ATTRIBUTES SAC_CHANNEL_ATTRIBUTES
struct _SAC_VTUTF8_SCREEN * PSAC_VTUTF8_SCREEN
VOID NTAPI FreeDeviceData(IN PDEVICE_OBJECT DeviceObject)
FORCEINLINE LONG ChannelGetIndex(IN PSAC_CHANNEL Channel)
VOID NTAPI DoCmdCommand(IN PCHAR InputString)
NTSTATUS(NTAPI * PSAC_CHANNEL_IWRITE)(IN struct _SAC_CHANNEL *Channel, IN PCHAR Buffer, IN ULONG BufferSize)
NTSTATUS NTAPI ChannelCreate(IN PSAC_CHANNEL Channel, IN PSAC_CHANNEL_ATTRIBUTES Attributes, IN SAC_CHANNEL_ID ChannelId)
struct _SAC_CHANNEL_LOCK SAC_CHANNEL_LOCK
VOID NTAPI DoPagingCommand(VOID)
struct _SAC_CHANNEL_ID * PSAC_CHANNEL_ID
NTSTATUS NTAPI ChannelHasRedrawEvent(IN PSAC_CHANNEL Channel, OUT PBOOLEAN Present)
NTSTATUS NTAPI SerialBufferGetChar(OUT PCHAR Char)
NTSTATUS NTAPI ConMgrHandleEvent(IN ULONG EventCode, IN PSAC_CHANNEL Channel, OUT PVOID Data)
enum _SAC_ANSI_DISPATCH SAC_ANSI_DISPATCH
struct _SAC_CHANNEL SAC_CHANNEL
NTSTATUS NTAPI ChannelClearRedrawEvent(IN PSAC_CHANNEL Channel)
NTSTATUS NTAPI ChannelOWrite(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize)
NTSTATUS NTAPI VTUTF8ChannelOWrite(IN PSAC_CHANNEL Channel, IN PCHAR String, IN ULONG Length)
@ SacAnsiClearBlinkAttribute
@ SacAnsiSetInverseAttribute
@ SacAnsiSetBoldAttribute
@ SacAnsiClearInverseAttribute
@ SacAnsiClearBoldAttribute
@ SacAnsiSetBlinkAttribute
@ SacAnsiClearEndOfScreen
struct _SAC_MESSAGE_ENTRY SAC_MESSAGE_ENTRY
NTSTATUS NTAPI RawChannelIBufferIsFull(IN PSAC_CHANNEL Channel, OUT PBOOLEAN BufferStatus)
NTSTATUS NTAPI TearDownGlobalMessageTable(VOID)
NTSTATUS NTAPI VTUTF8ChannelIRead(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize, IN PULONG ReturnBufferSize)
BOOLEAN NTAPI InitializeGlobalData(IN PUNICODE_STRING RegistryPath, IN PDRIVER_OBJECT DriverObject)
WCHAR NTAPI ChannelIReadLast(IN PSAC_CHANNEL Channel)
VOID NTAPI DoHelpCommand(VOID)
NTSTATUS NTAPI RawChannelORead(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize, OUT PULONG ByteCount)
FORCEINLINE VOID SacInitializeMutexLock(VOID)
WCHAR NTAPI VTUTF8ChannelIReadLast(IN PSAC_CHANNEL Channel)
#define SAC_VTUTF8_ROW_HEIGHT
NTSTATUS NTAPI TranslateMachineInformationXML(IN PWCHAR *Buffer, IN PWCHAR ExtraData)
NTSTATUS NTAPI DispatchShutdownControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct _SAC_DEVICE_EXTENSION * PSAC_DEVICE_EXTENSION
BOOLEAN NTAPI ChannelIsActive(IN PSAC_CHANNEL Channel)
PVOID NTAPI MyAllocatePool(IN SIZE_T PoolSize, IN ULONG Tag, IN PCHAR File, IN ULONG Line)
struct _SAC_CHANNEL_ID SAC_CHANNEL_ID
#define SAC_VTUTF8_COL_WIDTH
struct _SAC_STATIC_ESCAPE_STRING * PSAC_STATIC_ESCAPE_STRING
NTSTATUS NTAPI ChannelSetRedrawEvent(IN PSAC_CHANNEL Channel)
NTSTATUS NTAPI ChanMgrGetByHandle(IN SAC_CHANNEL_ID ChannelId, OUT PSAC_CHANNEL *TargetChannel)
NTSTATUS NTAPI VTUTF8ChannelDestroy(IN PSAC_CHANNEL Channel)
FORCEINLINE VOID SacAssertMutexLockHeld(VOID)
enum _VT_ANSI_ATTRIBUTES VT_ANSI_ATTRIBUTES
BOOLEAN NTAPI SacPutSimpleMessage(IN ULONG MessageIndex)
NTSTATUS NTAPI RawChannelOFlush(IN PSAC_CHANNEL Channel)
VOID NTAPI DoKillCommand(IN PCHAR KillString)
VOID NTAPI KeInitializeSemaphore(IN PKSEMAPHORE Semaphore, IN LONG Count, IN LONG Limit)
LONG NTAPI KeReleaseSemaphore(IN PKSEMAPHORE Semaphore, IN KPRIORITY Increment, IN LONG Adjustment, IN BOOLEAN Wait)
_In_ DWORD _In_ DWORD ReturnBufferSize
SAC_CHANNEL_TYPE ChannelType
WCHAR DescriptionBuffer[SAC_CHANNEL_DESCRIPTION_SIZE+1]
WCHAR NameBuffer[SAC_CHANNEL_NAME_SIZE+1]
PSAC_CHANNEL_OECHO ChannelOutputEcho
PSAC_CHANNEL_OREAD ChannelOutputRead
PVOID CloseEventObjectBody
PVOID RedrawEventObjectBody
SAC_CHANNEL_TYPE ChannelType
PKEVENT HasNewDataEventWaitObjectBody
PSAC_CHANNEL_IWRITE ChannelInputWrite
SAC_CHANNEL_LOCK ChannelOBufferLock
WCHAR NameBuffer[SAC_CHANNEL_NAME_SIZE+1]
LONG ChannelHasNewIBufferData
PSAC_CHANNEL_OFLUSH ChannelOutputFlush
PSAC_CHANNEL_IREAD ChannelInputRead
PSAC_CHANNEL_IREAD_LAST ChannelInputReadLast
SAC_CHANNEL_LOCK ChannelAttributeLock
PSAC_CHANNEL_DESTROY ChannelDestroy
SAC_CHANNEL_STATUS ChannelStatus
PKEVENT LockEventWaitObjectBody
LONG ChannelHasNewOBufferData
PKEVENT RedrawEventWaitObjectBody
ULONG OBufferFirstGoodIndex
PSAC_CHANNEL_IBUFFER_FULL ChannelInputBufferIsFull
PSAC_CHANNEL_OWRITE ChannelOutputWrite
SAC_CHANNEL_LOCK ChannelIBufferLock
PSAC_CHANNEL_CREATE ChannelCreate
PSAC_CHANNEL_IBUFFER_LENGTH ChannelInputBufferLength
PVOID LockEventObjectBody
WCHAR DescriptionBuffer[SAC_CHANNEL_DESCRIPTION_SIZE+1]
PVOID HasNewDataEventObjectBody
PKEVENT CloseEventWaitObjectBody
HANDLE WorkerThreadHandle
BOOLEAN RundownInProgress
PDEVICE_OBJECT DeviceObject
PWCHAR ProcessorArchitecture
PSAC_MEMORY_ENTRY LocalDescriptor
struct _SAC_MEMORY_LIST * Next
SAC_CELL_DATA Cell[SAC_VTUTF8_ROW_HEIGHT][SAC_VTUTF8_COL_WIDTH]
_In_ ULONG _In_ ULONG _In_ ULONG DestinationBufferSize
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWAITLOCK * Lock
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH * Dispatch
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _In_ LARGE_INTEGER ByteCount
#define SEMAPHORE_INCREMENT
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
_In_opt_ PVOID DeferredContext
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
_In_ ULONG _In_ BOOLEAN Active