gpt4 book ai didi

c - 是否有来自低级库(如 kernel32.dll 或 ntdll.dll)的 wsprintf() 类型函数?

转载 作者:可可西里 更新时间:2023-11-01 10:03:05 25 4
gpt4 key购买 nike

我正在编写一个低级记录器函数,它将文本字符串附加到文本(日志)文件的末尾。要求是此函数不应调用来自 DLL 的任何 WinAPI,这些 DLL 可能尚不可用于该进程——例如当它从 DllMain 调用时处理程序。换句话说,它不能使用除了保证加载到任何用户模式进程中的库之外的任何库,即 kernel32.dllntdll.dll .

我可以通过 CreateFileWriteFileCloseHandleHeapAllocHeapFree等均来自kernel32.dll

问题在于格式化输出字符串。例如,我需要添加一些额外的(自动生成的)详细信息,例如当前时间、进程 ID、 session ID 等。我通常会为此使用 wsprintf 类型的函数,或者 StringCchPrintf 准确地说,是这样的:

StringCchPrintf(buffer, buffer_size, L"%04u-%02u-%02u %02u:%02u:%02u pid=0x%x, sessID=%d, %s\r\n", /* parameters */ );

但是那些 API 违反了我上面提到的规则。

有谁知道是否有可用的低级 printf 类型格式化 API?

最佳答案

所有版本的 ntdll.dll 都支持 minimum next(from xp) 字符串格式化功能:

_snprintf
_snwprintf
_vsnprintf
_vsnwprintf
sprintf
swprintf
vsprintf

当然完全匹配来自 crt 的相同功能的签名。我们可以免费使用这个api。新版本的 ntdll 添加了一些新的格式字符串 api。接下来说 win7(和所有最新版本)ntdll.dll 导出:

_snprintf
_snprintf_s
_snwprintf
_snwprintf_s
_swprintf
_vscwprintf
_vsnprintf
_vsnprintf_s
_vsnwprintf
_vsnwprintf_s
_vswprintf
swprintf
swprintf_s
vsprintf
vsprintf_s
vswprintf_s

关于c - 是否有来自低级库(如 kernel32.dll 或 ntdll.dll)的 wsprintf() 类型函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46857294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com