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) // 1MB 151 #define SAC_OBUFFER_SIZE (2 * 1024) // 2KB 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 // 1KB 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' struct _SAC_MESSAGE_ENTRY SAC_MESSAGE_ENTRY
NTSTATUS NTAPI RawChannelIBufferIsFull(IN PSAC_CHANNEL Channel, OUT PBOOLEAN BufferStatus)
BOOLEAN NTAPI InitializeDeviceData(IN PDEVICE_OBJECT DeviceObject)
WCHAR DescriptionBuffer[SAC_CHANNEL_DESCRIPTION_SIZE+1]
PSAC_CHANNEL_OECHO ChannelOutputEcho
NTSTATUS NTAPI UTF8EncodeAndSend(IN PWCHAR String)
PCHAR Utf8ConversionBuffer
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
NTSTATUS NTAPI TranslateMachineInformationXML(IN PWCHAR *Buffer, IN PWCHAR ExtraData)
struct _SAC_DEVICE_EXTENSION SAC_DEVICE_EXTENSION
struct _SAC_CHANNEL_ATTRIBUTES * PSAC_CHANNEL_ATTRIBUTES
VOID NTAPI DoFullInfoCommand(VOID)
VOID NTAPI UnloadHandler(IN PDRIVER_OBJECT DriverObject)
NTSTATUS(NTAPI * PSAC_CHANNEL_IREAD)(IN struct _SAC_CHANNEL *Channel, IN PCHAR Buffer, IN ULONG BufferSize, IN PULONG ReturnBufferSize)
NTSTATUS(NTAPI * PSAC_CHANNEL_IBUFFER_FULL)(IN struct _SAC_CHANNEL *Channel, OUT PBOOLEAN BufferStatus)
ULONG Utf8ConversionBufferSize
_In_ ULONG _In_ ULONG _In_ ULONG Length
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
PSAC_CHANNEL_OREAD ChannelOutputRead
VOID NTAPI FreeMachineInformation(VOID)
NTSTATUS NTAPI VTUTF8ChannelORead(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize, OUT PULONG ByteCount)
NTSTATUS NTAPI RawChannelIWrite(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize)
NTSTATUS NTAPI ConMgrInitialize(VOID)
_In_ NDIS_STATUS EventCode
enum _SAC_ANSI_DISPATCH SAC_ANSI_DISPATCH
struct _SAC_VTUTF8_SCREEN * PSAC_VTUTF8_SCREEN
struct _SAC_MESSAGE_ENTRY * PSAC_MESSAGE_ENTRY
NTSTATUS(NTAPI * PSAC_CHANNEL_OFLUSH)(IN struct _SAC_CHANNEL *Channel)
PDEVICE_OBJECT DeviceObject
enum _SAC_CHANNEL_STATUS * PSAC_CHANNEL_STATUS
BOOLEAN CommandConsoleLaunchingEnabled
NTSTATUS NTAPI VTUTF8ChannelDestroy(IN PSAC_CHANNEL Channel)
IN BOOLEAN OUT PSTR Buffer
VOID NTAPI ConMgrWorkerProcessEvents(IN PSAC_DEVICE_EXTENSION DeviceExtension)
NTSTATUS NTAPI ChannelGetName(IN PSAC_CHANNEL Channel, OUT PWCHAR *Name)
WCHAR DescriptionBuffer[SAC_CHANNEL_DESCRIPTION_SIZE+1]
NTSTATUS NTAPI RawChannelDestroy(IN PSAC_CHANNEL Channel)
NTSTATUS NTAPI RawChannelIRead(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize, IN PULONG ReturnBufferSize)
VOID NTAPI DoHelpCommand(VOID)
FORCEINLINE ULONG ChannelGetFlags(IN PSAC_CHANNEL Channel)
struct _SAC_MEMORY_ENTRY SAC_MEMORY_ENTRY
NTSTATUS NTAPI ChanMgrInitialize(VOID)
PSAC_CHANNEL CurrentChannel
struct _SAC_DEVICE_EXTENSION * PSAC_DEVICE_EXTENSION
NTSTATUS NTAPI ConMgrHandleEvent(IN ULONG EventCode, IN PSAC_CHANNEL Channel, OUT PVOID Data)
PSAC_MESSAGE_ENTRY GlobalMessageTable
PKEVENT LockEventWaitObjectBody
WCHAR NTAPI RawChannelIReadLast(IN PSAC_CHANNEL Channel)
VOID NTAPI DoMachineInformationCommand(VOID)
PKEVENT RedrawEventWaitObjectBody
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
NTSTATUS NTAPI ChannelIRead(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize, IN OUT PULONG ResultBufferSize)
PKEVENT CloseEventWaitObjectBody
#define SAC_VTUTF8_ROW_HEIGHT
_In_ DWORD _In_ DWORD ReturnBufferSize
NTSTATUS NTAPI ConMgrWriteData(IN PSAC_CHANNEL Channel, IN PVOID Buffer, IN ULONG BufferLength)
NTSTATUS(NTAPI * PSAC_CHANNEL_DESTROY)(IN struct _SAC_CHANNEL *Channel)
LONG CurrentChannelRefCount
SAC_CHANNEL_STATUS ChannelStatus
NTSTATUS NTAPI VTUTF8ChannelIWrite(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize)
NTSTATUS NTAPI ChannelClearRedrawEvent(IN PSAC_CHANNEL Channel)
struct _SAC_CHANNEL_ATTRIBUTES SAC_CHANNEL_ATTRIBUTES
#define SAC_CHANNEL_DESCRIPTION_SIZE
struct _SAC_VTUTF8_SCREEN SAC_VTUTF8_SCREEN
BOOLEAN NTAPI SacTranslateUnicodeToUtf8(IN PWCHAR SourceBuffer, IN ULONG SourceBufferLength, OUT PCHAR DestinationBuffer, IN ULONG DestinationBufferSize, OUT PULONG UTF8Count, OUT PULONG ProcessedCount)
BOOLEAN NTAPI VerifyEventWaitable(IN HANDLE Handle, OUT PVOID *WaitObject, OUT PVOID *ActualWaitObject)
ULONG(NTAPI * PSAC_CHANNEL_IBUFFER_LENGTH)(IN struct _SAC_CHANNEL *Channel)
LONG NTAPI KeReleaseMutex(IN PKMUTEX Mutex, IN BOOLEAN Wait)
BOOLEAN NTAPI SacTranslateUtf8ToUnicode(IN CHAR Utf8Char, IN PCHAR Utf8Buffer, OUT PWCHAR Utf8Value)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
BOOLEAN NTAPI ChannelIsEqual(IN PSAC_CHANNEL Channel, IN PSAC_CHANNEL_ID ChannelId)
BOOLEAN NTAPI ConMgrSimpleEventMessage(IN ULONG MessageIndex, IN BOOLEAN LockHeld)
BOOLEAN NTAPI InitializeMemoryManagement(VOID)
struct _SAC_MACHINE_INFO * PSAC_MACHINE_INFO
VOID NTAPI DoCmdCommand(IN PCHAR InputString)
NTSTATUS NTAPI PreloadGlobalMessageTable(IN PVOID ImageBase)
WCHAR NameBuffer[SAC_CHANNEL_NAME_SIZE+1]
PWCHAR ProcessorArchitecture
NTSTATUS NTAPI ChannelSetRedrawEvent(IN PSAC_CHANNEL Channel)
SAC_CHANNEL_TYPE ChannelType
enum _VT_ANSI_ATTRIBUTES VT_ANSI_ATTRIBUTES
_In_ PDEVICE_OBJECT DeviceObject
LONG SerialPortConsumerIndex
NTSTATUS NTAPI ChannelOFlush(IN PSAC_CHANNEL Channel)
long __cdecl _InterlockedIncrement(_Interlocked_operand_ long volatile *_Addend)
struct _SAC_CHANNEL_ID * PSAC_CHANNEL_ID
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
NTSTATUS NTAPI GetCommandConsoleLaunchingPermission(OUT PBOOLEAN Permission)
NTSTATUS(NTAPI * PSAC_CHANNEL_IWRITE)(IN struct _SAC_CHANNEL *Channel, IN PCHAR Buffer, IN ULONG BufferSize)
enum _SAC_POST_COMMANDS SAC_POST_COMMANDS
enum _SAC_CHANNEL_TYPE SAC_CHANNEL_TYPE
ULONG NTAPI GetMessageLineCount(IN ULONG MessageIndex)
NTSTATUS NTAPI RawChannelORead(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize, OUT PULONG ByteCount)
NTSTATUS NTAPI VTUTF8ChannelCreate(IN PSAC_CHANNEL Channel)
NTSTATUS NTAPI VTUTF8ChannelIBufferIsFull(IN PSAC_CHANNEL Channel, OUT PBOOLEAN BufferStatus)
NTSTATUS NTAPI RawChannelOWrite(IN PSAC_CHANNEL Channel, IN PCHAR String, IN ULONG Length)
NTSTATUS NTAPI Dispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
FORCEINLINE VOID SacInitializeLock(IN PSAC_CHANNEL_LOCK Lock)
VOID NTAPI InitializeCmdEventInfo(VOID)
PVOID NTAPI MyAllocatePool(IN SIZE_T PoolSize, IN ULONG Tag, IN PCHAR File, IN ULONG Line)
WCHAR(NTAPI * PSAC_CHANNEL_IREAD_LAST)(IN struct _SAC_CHANNEL *Channel)
VOID NTAPI DoSetIpAddressCommand(IN PCHAR IpString)
VOID NTAPI DoKillCommand(IN PCHAR KillString)
BOOLEAN NTAPI ConMgrIsWriteEnabled(IN PSAC_CHANNEL Channel)
NTSTATUS(NTAPI * PSAC_CHANNEL_OREAD)(IN struct _SAC_CHANNEL *Channel, IN PCHAR Buffer, IN ULONG BufferSize, OUT PULONG ByteCount)
PSAC_CHANNEL_IREAD ChannelInputRead
long __cdecl _InterlockedDecrement(_Interlocked_operand_ long volatile *_Addend)
struct _SAC_MEMORY_LIST * PSAC_MEMORY_LIST
BOOLEAN NTAPI InitializeGlobalData(IN PUNICODE_STRING RegistryPath, IN PDRIVER_OBJECT DriverObject)
FORCEINLINE VOID SacAssertMutexLockHeld(VOID)
NTSTATUS NTAPI VTUTF8ChannelOFlush(IN PSAC_CHANNEL Channel)
PWCHAR NTAPI GetMessage(IN ULONG MessageIndex)
VOID NTAPI DoTlistCommand(VOID)
PVOID RedrawEventObjectBody
BOOLEAN GlobalPagingNeeded
NTSTATUS NTAPI ChanMgrCloseChannel(IN PSAC_CHANNEL Channel)
FORCEINLINE VOID SacReleaseLock(IN PSAC_CHANNEL_LOCK Lock)
NTSTATUS NTAPI ChannelOWrite(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize)
struct _SAC_STATIC_ESCAPE_STRING * PSAC_STATIC_ESCAPE_STRING
struct _SAC_MEMORY_LIST * Next
PVOID LockEventObjectBody
PSAC_CHANNEL_IWRITE ChannelInputWrite
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
NTSTATUS NTAPI ChannelClose(IN PSAC_CHANNEL Channel)
LONG ChannelHasNewOBufferData
ULONG NTAPI ChannelIBufferLength(IN PSAC_CHANNEL Channel)
NTSTATUS NTAPI TearDownGlobalMessageTable(VOID)
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
FORCEINLINE BOOLEAN ChannelHasNewIBufferData(IN PSAC_CHANNEL Channel)
SAC_CHANNEL_LOCK ChannelAttributeLock
FORCEINLINE LONG ChannelGetIndex(IN PSAC_CHANNEL Channel)
ULONG OBufferFirstGoodIndex
NTSTATUS(NTAPI * PSAC_CHANNEL_OECHO)(IN struct _SAC_CHANNEL *Channel, IN PCHAR String, IN ULONG Length)
VOID NTAPI KeInitializeSemaphore(IN PKSEMAPHORE Semaphore, IN LONG Count, IN LONG Limit)
enum _SAC_ANSI_COMMANDS SAC_ANSI_COMMANDS
VOID NTAPI DoSetTimeCommand(IN PCHAR InputTime)
VOID NTAPI TimerDpcRoutine(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
NTSTATUS NTAPI ChanMgrGetByHandle(IN SAC_CHANNEL_ID ChannelId, OUT PSAC_CHANNEL *TargetChannel)
VOID NTAPI InitializeMachineInformation(VOID)
struct _SAC_CHANNEL SAC_CHANNEL
SAC_CHANNEL_LOCK ChannelOBufferLock
struct _SAC_CHANNEL_LOCK * PSAC_CHANNEL_LOCK
FORCEINLINE VOID SacAcquireLock(IN PSAC_CHANNEL_LOCK Lock)
FORCEINLINE VOID SacReleaseMutexLock(VOID)
struct _SAC_MEMORY_ENTRY * PSAC_MEMORY_ENTRY
struct _SAC_CELL_DATA SAC_CELL_DATA
PSAC_CHANNEL_OFLUSH ChannelOutputFlush
VOID NTAPI MyFreePool(IN PVOID *Block)
NTSTATUS NTAPI DispatchShutdownControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
enum _SAC_CHANNEL_STATUS SAC_CHANNEL_STATUS
PSAC_CHANNEL_CREATE ChannelCreate
NTSTATUS NTAPI ChanMgrReleaseChannel(IN PSAC_CHANNEL Channel)
VOID NTAPI SacPutString(IN PWCHAR String)
WCHAR NTAPI VTUTF8ChannelIReadLast(IN PSAC_CHANNEL Channel)
FORCEINLINE VOID SacAcquireMutexLock(VOID)
struct _SAC_MEMORY_LIST SAC_MEMORY_LIST
SAC_CHANNEL_LOCK ChannelIBufferLock
BOOLEAN NTAPI ChannelIsActive(IN PSAC_CHANNEL Channel)
NTSTATUS NTAPI ChanMgrCreateChannel(OUT PSAC_CHANNEL *Channel, IN PSAC_CHANNEL_ATTRIBUTES Attributes)
SAC_CHANNEL_TYPE ChannelType
VOID NTAPI DoRebootCommand(IN BOOLEAN Reboot)
struct _SAC_CELL_DATA * PSAC_CELL_DATA
VOID NTAPI KeInitializeMutex(IN PKMUTEX Mutex, IN ULONG Level)
VOID NTAPI FreeMemoryManagement(VOID)
NTSTATUS NTAPI ChannelIWrite(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize)
VOID NTAPI FreeDeviceData(IN PDEVICE_OBJECT DeviceObject)
VOID NTAPI DoPagingCommand(VOID)
NTSTATUS NTAPI SerialBufferGetChar(OUT PCHAR Char)
NTSTATUS NTAPI RegisterBlueScreenMachineInformation(VOID)
VOID NTAPI DoGetNetInfo(IN BOOLEAN DoPrint)
NTSTATUS NTAPI ImposeSacCmdServiceStartTypePolicy(VOID)
NTSTATUS NTAPI ConMgrShutdown(VOID)
NTSTATUS NTAPI ChanMgrGetNextActiveChannel(IN PSAC_CHANNEL CurrentChannel, IN PULONG TargetIndex, OUT PSAC_CHANNEL *TargetChannel)
NTSTATUS NTAPI VTUTF8ChannelIRead(IN PSAC_CHANNEL Channel, IN PCHAR Buffer, IN ULONG BufferSize, IN PULONG ReturnBufferSize)
#define SAC_VTUTF8_COL_WIDTH
struct _SAC_CHANNEL * PSAC_CHANNEL
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
ULONG NTAPI VTUTF8ChannelIBufferLength(IN PSAC_CHANNEL Channel)
HANDLE WorkerThreadHandle
struct _SAC_STATIC_ESCAPE_STRING SAC_STATIC_ESCAPE_STRING
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _In_ LARGE_INTEGER ByteCount
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
VOID NTAPI DoLimitMemoryCommand(IN PCHAR LimitString)
BOOLEAN RundownInProgress
PSAC_CHANNEL_IREAD_LAST ChannelInputReadLast
NTSTATUS(NTAPI * PSAC_CHANNEL_OWRITE)(IN struct _SAC_CHANNEL *Channel, IN PCHAR String, IN ULONG Length)
VOID NTAPI FreeGlobalData(VOID)
PSAC_CHANNEL_DESTROY ChannelDestroy
PKEVENT HasNewDataEventWaitObjectBody
_In_ ULONG _In_ ULONG _In_ ULONG DestinationBufferSize
NTSTATUS NTAPI ChannelHasRedrawEvent(IN PSAC_CHANNEL Channel, OUT PBOOLEAN Present)
LONG NTAPI KeReleaseSemaphore(IN PKSEMAPHORE Semaphore, IN KPRIORITY Increment, IN LONG Adjustment, IN BOOLEAN Wait)
struct _SAC_CHANNEL_ID SAC_CHANNEL_ID
VOID NTAPI DoCrashCommand(VOID)
NTSTATUS NTAPI DispatchDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
KMUTEX CurrentChannelLock
C_ASSERT(sizeof(SAC_CELL_DATA)==6)
LONG ChannelHasNewIBufferData
NTSTATUS NTAPI RawChannelCreate(IN PSAC_CHANNEL Channel)
VOID NTAPI DoRaisePriorityCommand(IN PCHAR PrioString)
NTSTATUS NTAPI ConMgrFlushData(IN PSAC_CHANNEL Channel)
NTSTATUS NTAPI RawChannelOEcho(IN PSAC_CHANNEL Channel, IN PCHAR String, IN ULONG Length)
#define SEMAPHORE_INCREMENT
VOID NTAPI DoLowerPriorityCommand(IN PCHAR PrioString)
PSAC_CHANNEL_OWRITE ChannelOutputWrite
SAC_CELL_DATA Cell[SAC_VTUTF8_ROW_HEIGHT][SAC_VTUTF8_COL_WIDTH]
WCHAR NameBuffer[SAC_CHANNEL_NAME_SIZE+1]
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWAITLOCK * Lock
PSAC_MEMORY_ENTRY LocalDescriptor
NTSTATUS NTAPI ChannelCreate(IN PSAC_CHANNEL Channel, IN PSAC_CHANNEL_ATTRIBUTES Attributes, IN SAC_CHANNEL_ID ChannelId)
_In_ ULONG _In_ BOOLEAN Active
VOID NTAPI DoChannelCommand(IN PCHAR ChannelString)
PSAC_CHANNEL_IBUFFER_FULL ChannelInputBufferIsFull
VOID NTAPI DoLockCommand(VOID)
NTSTATUS NTAPI VTUTF8ChannelOWrite(IN PSAC_CHANNEL Channel, IN PCHAR String, IN ULONG Length)
WCHAR NTAPI ChannelIReadLast(IN PSAC_CHANNEL Channel)
NTSTATUS NTAPI RawChannelOFlush(IN PSAC_CHANNEL Channel)
PSAC_CHANNEL_IBUFFER_LENGTH ChannelInputBufferLength
PVOID HasNewDataEventObjectBody
ULONG NTAPI RawChannelIBufferLength(IN PSAC_CHANNEL Channel)
BOOLEAN NTAPI SacPutSimpleMessage(IN ULONG MessageIndex)
FORCEINLINE VOID SacInitializeMutexLock(VOID)
NTSTATUS NTAPI VTUTF8ChannelOEcho(IN PSAC_CHANNEL Channel, IN PCHAR String, IN ULONG Length)
#define SAC_CHANNEL_NAME_SIZE
NTSTATUS NTAPI ChanMgrShutdown(VOID)
LONG SerialPortProducerIndex
NTSTATUS(NTAPI * PSAC_CHANNEL_CREATE)(IN struct _SAC_CHANNEL *Channel)
struct _SAC_MACHINE_INFO SAC_MACHINE_INFO
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
NTSTATUS NTAPI ChannelDestroy(IN PSAC_CHANNEL Channel)
struct _SAC_CHANNEL_LOCK SAC_CHANNEL_LOCK
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
PVOID CloseEventObjectBody
_In_opt_ PVOID DeferredContext