有一个低级库,如kernel32.dll或ntdll.dll wsprintf()型函数?

我正在写一个低级别的logging器函数,将文本string追加到文本(日志)文件的末尾。 要求是这个函数不应该调用任何可能不可用于进程的DLL的WinAPI – 比如当它是从DllMain处理程序调用时 。 换句话说,它不能使用除了保证被加载到任何用户模式进程的库之外的任何库,即kernel32.dllntdll.dll

我能够很好地得到所有来自kernel32.dll CreateFileWriteFileCloseHandleHeapAllocHeapFree等等。

问题是格式化输出string。 例如,我需要添加一些额外的(自动生成的)细节,比如当前时间,进程ID,会话ID等等。我通常会使用wsprintftypes的函数,或者wsprintf是这样的:

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

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

有谁知道是否有低级别的printftypes格式化API可用?

所有版本的ntdll.dll支持如何最小(从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