From 4165ea276623a933e9d8a71ed18b593452c8dc2a Mon Sep 17 00:00:00 2001 From: PatrickvL Date: Mon, 19 Dec 2016 17:32:09 +0100 Subject: [PATCH] Started logging some flags (#37) --- src/Common/Logging.h | 6 ++ src/CxbxKrnl/EmuFile.cpp | 10 +++ src/CxbxKrnl/EmuFile.h | 3 + src/CxbxKrnl/EmuKrnlIo.cpp | 4 +- src/CxbxKrnl/EmuKrnlLogging.cpp | 137 ++++++++++++++++++++++++-------- src/CxbxKrnl/EmuKrnlLogging.h | 135 ++++++++++++++++--------------- 6 files changed, 194 insertions(+), 101 deletions(-) diff --git a/src/Common/Logging.h b/src/Common/Logging.h index 1d48b2823..bf60c1495 100644 --- a/src/Common/Logging.h +++ b/src/Common/Logging.h @@ -159,6 +159,11 @@ extern thread_local std::string _logPrefix; _had_arg = true; \ msg << "\n " << std::setw(25) << std::left << std::setfill(' ') << #arg << " : " << _log_sanitize(arg); + // LOG_FUNC_ARG_TYPE writes output using the overloaded << operator of the given type + #define LOG_FUNC_ARG_TYPE(type, arg) \ + _had_arg = true; \ + msg << "\n " << std::setw(25) << std::left << std::setfill(' ') << #arg << " : " << (type)arg; + // LOG_FUNC_ARG_OUT prevents expansion of types, by only rendering as a pointer #define LOG_FUNC_ARG_OUT(arg) \ _had_arg = true; \ @@ -177,6 +182,7 @@ extern thread_local std::string _logPrefix; #else #define LOG_FUNC_BEGIN #define LOG_FUNC_ARG(arg) + #define LOG_FUNC_ARG_TYPE(type, arg) #define LOG_FUNC_ARG_OUT(arg) #define LOG_FUNC_END #define LOG_FUNC_RESULT(r) diff --git a/src/CxbxKrnl/EmuFile.cpp b/src/CxbxKrnl/EmuFile.cpp index 43220f846..7715ff7fe 100644 --- a/src/CxbxKrnl/EmuFile.cpp +++ b/src/CxbxKrnl/EmuFile.cpp @@ -43,6 +43,7 @@ #include #pragma warning(default:4005) #include "CxbxKrnl.h" +//#include "Logging.h" // For hex4() std::string DriveSerial = "\\??\\serial:"; std::string DriveCdRom0 = "\\??\\CdRom0:"; // CD-ROM device @@ -498,6 +499,15 @@ EmuNtSymbolicLinkObject* FindNtSymbolicLinkObjectByRootHandle(const HANDLE Handl } // TODO : Move to a better suited file +/* TODO : Also, fix C2593: "'operator <<' is ambiguous" for this +std::ostream& operator<<(std::ostream& os, const NtDll::NTSTATUS& value) +{ + os << hex4((uint32_t)value) << " = " << NtStatusToString(value); + + return os; +} +*/ + // TODO : Create (and use) an Xbox version of this too CHAR* NtStatusToString(IN NTSTATUS Status) { diff --git a/src/CxbxKrnl/EmuFile.h b/src/CxbxKrnl/EmuFile.h index f940dfc50..cf33b65f8 100644 --- a/src/CxbxKrnl/EmuFile.h +++ b/src/CxbxKrnl/EmuFile.h @@ -55,6 +55,9 @@ namespace NtDll #include "Emu.h" +// TODO : Move to a better suited file +//std::ostream& operator<<(std::ostream& os, const NtDll::NTSTATUS& value); + extern std::string DriveSerial; extern std::string DriveCdRom0; extern std::string DriveMbfs; diff --git a/src/CxbxKrnl/EmuKrnlIo.cpp b/src/CxbxKrnl/EmuKrnlIo.cpp index 3b784922d..3993f3aa0 100644 --- a/src/CxbxKrnl/EmuKrnlIo.cpp +++ b/src/CxbxKrnl/EmuKrnlIo.cpp @@ -88,8 +88,8 @@ XBSYSAPI EXPORTNUM(66) xboxkrnl::NTSTATUS NTAPI xboxkrnl::IoCreateFile LOG_FUNC_ARG(AllocationSize) LOG_FUNC_ARG(FileAttributes) LOG_FUNC_ARG(ShareAccess) - LOG_FUNC_ARG(Disposition) - LOG_FUNC_ARG(CreateOptions) + LOG_FUNC_ARG_TYPE(CREATE_DISPOSITION, Disposition) + LOG_FUNC_ARG_TYPE(CREATE_OPTION, CreateOptions) LOG_FUNC_ARG(Options) LOG_FUNC_END; diff --git a/src/CxbxKrnl/EmuKrnlLogging.cpp b/src/CxbxKrnl/EmuKrnlLogging.cpp index 6146efd1f..c0afcfe54 100644 --- a/src/CxbxKrnl/EmuKrnlLogging.cpp +++ b/src/CxbxKrnl/EmuKrnlLogging.cpp @@ -62,10 +62,23 @@ std::ostream& operator<<(std::ostream& os, const PULONG& value) return os; } +// Macro for implementation of rendering any Enum-ToString : +#define LOGRENDER_ENUM(EnumType) LOGRENDER_HEADER(EnumType) \ +{ return os << "("#EnumType") " << EnumType##ToString(value) << " = " << hex4((int)value); } + // Macro's for Xbox Enum-ToString conversions : #define ENUM2STR_START(EnumType) const char * EnumType##ToString(const xboxkrnl::EnumType value) { switch (value) { #define ENUM2STR_CASE(a) case xboxkrnl::a: return #a; +// ENUM2STR_CASE_DEF is needed for #define'd symbols +#define ENUM2STR_CASE_DEF(a) case a: return #a; #define ENUM2STR_END(EnumType) default: return "Unknown_"#EnumType; } } +#define ENUM2STR_END_and_LOGRENDER(EnumType) ENUM2STR_END(EnumType) LOGRENDER_ENUM(EnumType) + +// Macro's for Xbo Flags-ToString conversions : +#define FLAGS2STR_START(Type) std::string Type##ToString(const xboxkrnl::Type value) { std::string res; +#define FLAG2STR(f) if (((uint32)value & f) == f) res = res + #f"|"; +#define FLAGS2STR_END if (!res.empty()) res.pop_back(); return res; } +#define FLAGS2STR_END_and_LOGRENDER(Type) FLAGS2STR_END LOGRENDER_ENUM(Type) // Xbox Enum-ToString conversions : @@ -84,7 +97,51 @@ ENUM2STR_START(BUS_DATA_TYPE) ENUM2STR_CASE(PNPISAConfiguration) ENUM2STR_CASE(SgiInternalConfiguration) ENUM2STR_CASE(MaximumBusDataType) -ENUM2STR_END(BUS_DATA_TYPE) +ENUM2STR_END_and_LOGRENDER(BUS_DATA_TYPE) + +ENUM2STR_START(CREATE_DISPOSITION) + ENUM2STR_CASE_DEF(FILE_SUPERSEDE) + ENUM2STR_CASE_DEF(FILE_OPEN) + ENUM2STR_CASE_DEF(FILE_CREATE) + ENUM2STR_CASE_DEF(FILE_OPEN_IF) + ENUM2STR_CASE_DEF(FILE_OVERWRITE) + ENUM2STR_CASE_DEF(FILE_OVERWRITE_IF) + // ENUM2STR_CASE_DEF(FILE_MAXIMUM_DISPOSITION) Skip, identical to FILE_OVERWRITE_IF +ENUM2STR_END_and_LOGRENDER(CREATE_DISPOSITION) + +FLAGS2STR_START(CREATE_OPTION) +/* +#define FILE_VALID_OPTION_FLAGS 0x00ffffff + +#define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032 +#define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032 +#define FILE_VALID_SET_FLAGS 0x00000036 + +#define FILE_COPY_STRUCTURED_STORAGE 0x00000041 +#define FILE_STRUCTURED_STORAGE 0x00000441 +*/ + FLAG2STR(FILE_DIRECTORY_FILE) + FLAG2STR(FILE_WRITE_THROUGH) + FLAG2STR(FILE_SEQUENTIAL_ONLY) + FLAG2STR(FILE_NO_INTERMEDIATE_BUFFERING) + FLAG2STR(FILE_SYNCHRONOUS_IO_ALERT) + FLAG2STR(FILE_SYNCHRONOUS_IO_NONALERT) + FLAG2STR(FILE_NON_DIRECTORY_FILE) + FLAG2STR(FILE_CREATE_TREE_CONNECTION) + FLAG2STR(FILE_COMPLETE_IF_OPLOCKED) + FLAG2STR(FILE_NON_DIRECTORY_FILE) + FLAG2STR(FILE_NO_EA_KNOWLEDGE) + FLAG2STR(FILE_OPEN_FOR_RECOVERY) + FLAG2STR(FILE_RANDOM_ACCESS) + FLAG2STR(FILE_DELETE_ON_CLOSE) + FLAG2STR(FILE_OPEN_BY_FILE_ID) + FLAG2STR(FILE_OPEN_FOR_BACKUP_INTENT) + FLAG2STR(FILE_NO_COMPRESSION) + FLAG2STR(FILE_RESERVE_OPFILTER) + FLAG2STR(FILE_OPEN_REPARSE_POINT) + FLAG2STR(FILE_OPEN_NO_RECALL) + FLAG2STR(FILE_OPEN_FOR_FREE_SPACE_QUERY) +FLAGS2STR_END_and_LOGRENDER(CREATE_OPTION) ENUM2STR_START(EEPROM_INDEX) ENUM2STR_CASE(EEPROM_LANGUAGE) @@ -108,12 +165,12 @@ ENUM2STR_START(EEPROM_INDEX) ENUM2STR_CASE(EEPROM_MAX_FACTORY) ENUM2STR_CASE(EEPROM_ENCRYPTED_SECTION) ENUM2STR_CASE(EEPROM_MAX_ALL) -ENUM2STR_END(EEPROM_INDEX) +ENUM2STR_END_and_LOGRENDER(EEPROM_INDEX) ENUM2STR_START(EVENT_TYPE) ENUM2STR_CASE(NotificationEvent) ENUM2STR_CASE(SynchronizationEvent) -ENUM2STR_END(EVENT_TYPE) +ENUM2STR_END_and_LOGRENDER(EVENT_TYPE) ENUM2STR_START(FILE_INFORMATION_CLASS) ENUM2STR_CASE(FileDirectoryInformation) @@ -157,7 +214,7 @@ ENUM2STR_START(FILE_INFORMATION_CLASS) ENUM2STR_CASE(FileInheritContentIndexInformation) ENUM2STR_CASE(FileOleInformation) ENUM2STR_CASE(FileMaximumInformation) -ENUM2STR_END(FILE_INFORMATION_CLASS) +ENUM2STR_END_and_LOGRENDER(FILE_INFORMATION_CLASS) ENUM2STR_START(FS_INFORMATION_CLASS) ENUM2STR_CASE(FileFsVolumeInformation) @@ -169,12 +226,12 @@ ENUM2STR_START(FS_INFORMATION_CLASS) ENUM2STR_CASE(FileFsFullSizeInformation) ENUM2STR_CASE(FileFsObjectIdInformation) ENUM2STR_CASE(FileFsMaximumInformation) -ENUM2STR_END(FS_INFORMATION_CLASS) +ENUM2STR_END_and_LOGRENDER(FS_INFORMATION_CLASS) ENUM2STR_START(KINTERRUPT_MODE) ENUM2STR_CASE(LevelSensitive) ENUM2STR_CASE(Latched) -ENUM2STR_END(KINTERRUPT_MODE) +ENUM2STR_END_and_LOGRENDER(KINTERRUPT_MODE) ENUM2STR_START(KWAIT_REASON) ENUM2STR_CASE(Executive) @@ -205,17 +262,38 @@ ENUM2STR_START(KWAIT_REASON) ENUM2STR_CASE(Spare6) ENUM2STR_CASE(WrKernel) ENUM2STR_CASE(MaximumWaitReason) -ENUM2STR_END(KWAIT_REASON) +ENUM2STR_END_and_LOGRENDER(KWAIT_REASON) ENUM2STR_START(KOBJECTS) ENUM2STR_CASE(DpcObject) -ENUM2STR_END(KOBJECTS) +ENUM2STR_END_and_LOGRENDER(KOBJECTS) ENUM2STR_START(MODE) ENUM2STR_CASE(KernelMode) ENUM2STR_CASE(UserMode) ENUM2STR_CASE(MaximumMode) -ENUM2STR_END(MODE) +ENUM2STR_END_and_LOGRENDER(MODE) + +/* TODO : Fix error C2593 "'operator <<' is ambiguous", +// because often NtDLL::NTSTATUS is used instead of xboxkrnl::NTSTATUS +ENUM2STR_START(NTSTATUS) // Not really an enum + ENUM2STR_CASE(STATUS_SUCCESS) + ENUM2STR_CASE(STATUS_PENDING) + ENUM2STR_CASE(STATUS_TIMER_RESUME_IGNORED) + ENUM2STR_CASE(STATUS_UNSUCCESSFUL) + ENUM2STR_CASE(STATUS_UNRECOGNIZED_MEDIA) + ENUM2STR_CASE(STATUS_NO_MEMORY) + ENUM2STR_CASE(STATUS_ALERTED) + ENUM2STR_CASE(STATUS_USER_APC) + ENUM2STR_CASE(STATUS_DATA_OVERRUN) + ENUM2STR_CASE(STATUS_INVALID_IMAGE_FORMAT) + ENUM2STR_CASE(STATUS_INSUFFICIENT_RESOURCES) + ENUM2STR_CASE(STATUS_XBE_REGION_MISMATCH) + ENUM2STR_CASE(STATUS_XBE_MEDIA_MISMATCH) + ENUM2STR_CASE(STATUS_OBJECT_NAME_NOT_FOUND) + ENUM2STR_CASE(STATUS_OBJECT_NAME_COLLISION) +ENUM2STR_END_and_LOGRENDER(NTSTATUS) +*/ ENUM2STR_START(RETURN_FIRMWARE) ENUM2STR_CASE(ReturnFirmwareHalt) @@ -224,40 +302,23 @@ ENUM2STR_START(RETURN_FIRMWARE) ENUM2STR_CASE(ReturnFirmwareHard) ENUM2STR_CASE(ReturnFirmwareFatal) ENUM2STR_CASE(ReturnFirmwareAll) -ENUM2STR_END(RETURN_FIRMWARE) +ENUM2STR_END_and_LOGRENDER(RETURN_FIRMWARE) ENUM2STR_START(TIMER_TYPE) ENUM2STR_CASE(NotificationTimer) ENUM2STR_CASE(SynchronizationTimer) -ENUM2STR_END(TIMER_TYPE) +ENUM2STR_END_and_LOGRENDER(TIMER_TYPE) ENUM2STR_START(WAIT_TYPE) ENUM2STR_CASE(WaitAll) ENUM2STR_CASE(WaitAny) -ENUM2STR_END(WAIT_TYPE) +ENUM2STR_END_and_LOGRENDER(WAIT_TYPE) -// Macro for implementation of rendering EnumToString : -#define LOGRENDER_ENUM(EnumType) LOGRENDER_HEADER(EnumType) \ -{ return os << "("#EnumType") " << EnumType##ToString(value) << " = " << hex4((int)value); } - -// Xbox enum renderers : -LOGRENDER_ENUM(BUS_DATA_TYPE) -LOGRENDER_ENUM(EEPROM_INDEX) -LOGRENDER_ENUM(EVENT_TYPE) -LOGRENDER_ENUM(FILE_INFORMATION_CLASS) -LOGRENDER_ENUM(FS_INFORMATION_CLASS) -LOGRENDER_ENUM(KINTERRUPT_MODE) -LOGRENDER_ENUM(KWAIT_REASON) -LOGRENDER_ENUM(KOBJECTS) -LOGRENDER_ENUM(MODE) -LOGRENDER_ENUM(RETURN_FIRMWARE) -LOGRENDER_ENUM(TIMER_TYPE) -LOGRENDER_ENUM(WAIT_TYPE) - -#undef ENUM_START -#undef ENUM_CASE -#undef ENUM_END -#undef RENDER_ENUM +#undef ENUM2STR_START +#undef ENUM2STR_CASE +#undef ENUM2STR_END +#undef ENUM2STR_END_and_LOGRENDER +#undef LOGRENDER_ENUM #define LOGRENDER_MEMBER(Member) << "\n ."#Member": " << value.Member @@ -280,6 +341,14 @@ LOGRENDER_HEADER(P##Type) \ LOGRENDER_HEADER(Type) \ // Render Xbox types : + +LOGRENDER_TYPE(FILETIME) +{ + return os + LOGRENDER_MEMBER(dwLowDateTime) + LOGRENDER_MEMBER(dwHighDateTime); +} + LOGRENDER_TYPE(LARGE_INTEGER) { return os diff --git a/src/CxbxKrnl/EmuKrnlLogging.h b/src/CxbxKrnl/EmuKrnlLogging.h index a1f65c01b..d58fa86e2 100644 --- a/src/CxbxKrnl/EmuKrnlLogging.h +++ b/src/CxbxKrnl/EmuKrnlLogging.h @@ -40,6 +40,10 @@ namespace xboxkrnl { #include + +// Additional types, exclusively for logging : +typedef enum CREATE_DISPOSITION; +typedef enum CREATE_OPTION; }; @@ -47,70 +51,6 @@ namespace xboxkrnl #include // for std::ostream //?#include "Logging.h" -// TODO : Implement renderers for each usage of these types (and/or (P/LP) pointers to them)... -// -// TODO : xboxkrnl::ANSI_STRING -// TODO : xboxkrnl::DEVICE_OBJECT -// TODO : xboxkrnl::DISPATCHER_HEADER -// TODO : xboxkrnl::DVDX2_AUTHENTICATION -// TODO : xboxkrnl::DVDX2_AUTHENTICATION_PAGE -// TODO : xboxkrnl::ERWLOCK -// TODO : xboxkrnl::ETHREAD -// TODO : xboxkrnl::EXCEPTION_RECORD -// TODO : xboxkrnl::FILE_DIRECTORY_INFORMATION -// TODO : xboxkrnl::FILE_FS_SIZE_INFORMATION -// TODO : xboxkrnl::FILETIME -// TODO : xboxkrnl::IO_STATUS_BLOCK / xboxkrnl::PIO_STATUS_BLOCK ->u1.Pointer, ->Information -// TODO : xboxkrnl::KDEVICE_QUEUE -// TODO : xboxkrnl::KDPC -// TODO : xboxkrnl::KEVENT -// TODO : xboxkrnl::KINTERRUPT -// TODO : xboxkrnl::KIRQL -// TODO : xboxkrnl::KPCR -// TODO : xboxkrnl::KPRCB -// TODO : xboxkrnl::KPROCESSOR_MODE -// TODO : xboxkrnl::KSEMAPHORE -// TODO : xboxkrnl::KSPIN_LOCK -// TODO : xboxkrnl::KSYSTEM_TIME -// TODO : xboxkrnl::KTHREAD -// TODO : xboxkrnl::KTIMER /xboxkrnl::PKTIMER -// TODO : xboxkrnl::LAUNCH_DATA_HEADER -// TODO : xboxkrnl::LAUNCH_DATA_PAGE -// TODO : xboxkrnl::LIST_ENTRY -// TODO : xboxkrnl::LPCCH -// TODO : xboxkrnl::LPCSTR -// TODO : xboxkrnl::LPCWSTR -// TODO : xboxkrnl::MEMORY_BASIC_INFORMATION -// TODO : xboxkrnl::MM_STATISTICS -// TODO : xboxkrnl::MODE_PARAMETER_HEADER10 -// TODO : xboxkrnl::NT_TIB -// TODO : xboxkrnl::NTSTATUS -// TODO : xboxkrnl::OBJECT_ATTRIBUTES -// TODO : xboxkrnl::OBJECT_STRING -// TODO : xboxkrnl::OBJECT_TYPE -// TODO : xboxkrnl::PCI_COMMON_CONFIG -// TODO : xboxkrnl::PCI_SLOT_NUMBER -// TODO : xboxkrnl::PCHAR -// TODO : xboxkrnl::PKDEFERRED_ROUTINE -// TODO : xboxkrnl::PKDPC -// TODO : xboxkrnl::PKINTERRUPT -// TODO : xboxkrnl::PKSERVICE_ROUTINE -// TODO : xboxkrnl::PXDEVICE_PREALLOC_TYPE -// TODO : xboxkrnl::PXINPUT_CAPABILITIES -// TODO : xboxkrnl::PXINPUT_STATE -// TODO : xboxkrnl::PXPP_DEVICE_TYPE -// TODO : xboxkrnl::PXTHREAD_NOTIFICATION -> pfnNotifyRoutine -// TODO : xboxkrnl::RTL_CRITICAL_SECTION -// TODO : xboxkrnl::SCSI_PASS_THROUGH_DIRECT -// TODO : xboxkrnl::SINGLE_LIST_ENTRY -// TODO : xboxkrnl::SLIST_HEADER -// TODO : xboxkrnl::STRING -// TODO : xboxkrnl::TIME_FIELDS -// TODO : xboxkrnl::UCHAR -// TODO : xboxkrnl::ULARGE_INTEGER -// TODO : xboxkrnl::XBOX_HARDWARE_INFO -// TODO : xboxkrnl::XBOX_REFURB_INFO - // Headers for rendering non-Xbox types : std::ostream& operator<<(std::ostream& os, const PULONG& value); @@ -118,7 +58,10 @@ std::ostream& operator<<(std::ostream& os, const PULONG& value); #define LOGRENDER_HEADER(Type) std::ostream& operator<<(std::ostream& os, const xboxkrnl::Type& value) // Headers for rendering Xbox enum types : + LOGRENDER_HEADER(BUS_DATA_TYPE); +LOGRENDER_HEADER(CREATE_DISPOSITION); // Not really an enum +LOGRENDER_HEADER(CREATE_OPTION); // Not really an enum LOGRENDER_HEADER(EEPROM_INDEX); LOGRENDER_HEADER(EVENT_TYPE); LOGRENDER_HEADER(FILE_INFORMATION_CLASS); @@ -127,6 +70,7 @@ LOGRENDER_HEADER(KINTERRUPT_MODE); LOGRENDER_HEADER(KWAIT_REASON); LOGRENDER_HEADER(KOBJECTS); LOGRENDER_HEADER(MODE); +//LOGRENDER_HEADER(NTSTATUS); // Not really an enum LOGRENDER_HEADER(RETURN_FIRMWARE); LOGRENDER_HEADER(TIMER_TYPE); LOGRENDER_HEADER(WAIT_TYPE); @@ -138,13 +82,74 @@ LOGRENDER_HEADER(BOOLEAN); #define LOGRENDER_HEADERS(Type) LOGRENDER_HEADER(Type); LOGRENDER_HEADER(P##Type) // Headers for rendering functions of Xbox type and pointer-to-type : + +// TODO : Implement renderers for each usage of these types (and/or (P/LP) pointers to them)... +// +// TODO : LOGRENDER_HEADER(DEVICE_OBJECT); +// TODO : LOGRENDER_HEADER(DISPATCHER_HEADER); +// TODO : LOGRENDER_HEADER(DVDX2_AUTHENTICATION); +// TODO : LOGRENDER_HEADER(DVDX2_AUTHENTICATION_PAGE); +// TODO : LOGRENDER_HEADER(ERWLOCK); +// TODO : LOGRENDER_HEADER(ETHREAD); +// TODO : LOGRENDER_HEADER(EXCEPTION_RECORD); +LOGRENDER_HEADERS(FILETIME); +// TODO : LOGRENDER_HEADER(FILE_DIRECTORY_INFORMATION); +// TODO : LOGRENDER_HEADER(FILE_FS_SIZE_INFORMATION); +// TODO : LOGRENDER_HEADER(IO_STATUS_BLOCK); // LOGRENDER_HEADER(PIO_STATUS_BLOCK ->u1.Pointer, ->Information +// TODO : LOGRENDER_HEADER(KDEVICE_QUEUE); +// TODO : LOGRENDER_HEADER(KDPC); +// TODO : LOGRENDER_HEADER(KEVENT); +// TODO : LOGRENDER_HEADER(KINTERRUPT); +// TODO : LOGRENDER_HEADER(KIRQL); +// TODO : LOGRENDER_HEADER(KPCR); +// TODO : LOGRENDER_HEADER(KPRCB); +// TODO : LOGRENDER_HEADER(KPROCESSOR_MODE); +// TODO : LOGRENDER_HEADER(KSEMAPHORE); +// TODO : LOGRENDER_HEADER(KSPIN_LOCK); +// TODO : LOGRENDER_HEADER(KSYSTEM_TIME); +// TODO : LOGRENDER_HEADER(KTHREAD); +// TODO : LOGRENDER_HEADER(KTIMER); LOGRENDER_HEADERS(LARGE_INTEGER); +// TODO : LOGRENDER_HEADER(LAUNCH_DATA_HEADER); +// TODO : LOGRENDER_HEADER(LAUNCH_DATA_PAGE); +// TODO : LOGRENDER_HEADER(LIST_ENTRY); +// TODO : LOGRENDER_HEADER(LPCCH); +// TODO : LOGRENDER_HEADER(LPCSTR); +// TODO : LOGRENDER_HEADER(LPCWSTR); +// TODO : LOGRENDER_HEADER(MEMORY_BASIC_INFORMATION); LOGRENDER_HEADERS(MM_STATISTICS); +// TODO : LOGRENDER_HEADER(MODE_PARAMETER_HEADER10); +// TODO : LOGRENDER_HEADER(NT_TIB); +// TODO : LOGRENDER_HEADER(NTSTATUS); LOGRENDER_HEADERS(OBJECT_ATTRIBUTES); -LOGRENDER_HEADERS(STRING); +// TODO : LOGRENDER_HEADER(OBJECT_STRING); +// TODO : LOGRENDER_HEADER(OBJECT_TYPE); +// TODO : LOGRENDER_HEADER(PCI_COMMON_CONFIG); +// TODO : LOGRENDER_HEADER(PCI_SLOT_NUMBER); +// TODO : LOGRENDER_HEADER(PCHAR); +// TODO : LOGRENDER_HEADER(PKDEFERRED_ROUTINE); +// TODO : LOGRENDER_HEADER(PKDPC); +// TODO : LOGRENDER_HEADER(PKINTERRUPT); +// TODO : LOGRENDER_HEADER(PKSERVICE_ROUTINE); +// TODO : LOGRENDER_HEADER(PXDEVICE_PREALLOC_TYPE); +// TODO : LOGRENDER_HEADER(PXINPUT_CAPABILITIES); +// TODO : LOGRENDER_HEADER(PXINPUT_STATE); +// TODO : LOGRENDER_HEADER(PXPP_DEVICE_TYPE); +// TODO : LOGRENDER_HEADER(PXTHREAD_NOTIFICATION); // -> pfnNotifyRoutine +// TODO : LOGRENDER_HEADER(RTL_CRITICAL_SECTION); +// TODO : LOGRENDER_HEADER(SCSI_PASS_THROUGH_DIRECT); +// TODO : LOGRENDER_HEADER(SINGLE_LIST_ENTRY); +// TODO : LOGRENDER_HEADER(SLIST_HEADER); +LOGRENDER_HEADERS(STRING); // Alias ANSI_STRING +// TODO : LOGRENDER_HEADER(TIME_FIELDS); +// TODO : LOGRENDER_HEADER(UCHAR); +// TODO : LOGRENDER_HEADER(ULARGE_INTEGER); LOGRENDER_HEADERS(UNICODE_STRING); +// TODO : LOGRENDER_HEADER(XBOX_HARDWARE_INFO); +// TODO : LOGRENDER_HEADER(XBOX_REFURB_INFO); #undef LOGRENDER_HEADERS + // Don't #undef LOGRENDER_HEADER, because it's used in EmuKrnlLogging.cpp #endif _EMU_KERNEL_LOGGING_H