繁体   English   中英

是否存在来自低级库(例如kernel32.dll或ntdll.dll)的wsprintf()类型的函数?

[英]Is there a wsprintf()-type function from a low-level library such as kernel32.dll or ntdll.dll?

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

我只能通过kernel32.dll CreateFileWriteFileCloseHandleHeapAllocHeapFree等很好地相处。

问题是格式化输出字符串。 例如,我需要添加一些额外的(自动生成的)的详细信息,诸如当前时间,过程ID,会话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都支持最小的next(来自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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM