我试图deBUGging打印一个LPCWSTRstring,但我在缓冲区的sprintf推入过程中遇到问题,因为它只检索string中的第一个字符。
这里是代码:
HANDLE WINAPI hookedCreatefileW(LPCWSTR lpfilename,DWORD DWDesiredAccess,DWORD DWShareMode,LPSecurity_ATTRIBUTES lpSecurityAttributes,DWORD DWCreationdisposition,DWORD DWFlagsAndAttributes,HANDLE hTemplatefile) { char buffer[1024]; sprintf_s(buffer,1024,"CreatefileW: %s",lpfilename); OutputDeBUGString(buffer); return trueCreatefileW(lpfilename,DWDesiredAccess,DWShareMode,lpSecurityAttributes,DWFlagsAndAttributes,DWCreationdisposition,hTemplatefile); }
例如,我得到CreatefileW: C或CreatefileW: 。
我如何正确推入缓冲区?
帮助CredEnumerate
在第三方应用程序中模拟用户input
如何设置其他程序的任何可见窗口在顶部?
提取图像文件元数据
用Python 3打印LF到stdout
谢谢。
是否有可能确定哪个进程启动我的.Net应用程序?
如何阻止Enumwindows运行无限win32
如何在win32 c ++中打印预览?
可执行的gem – windows
托pipe的WMI事件类不是一个事件类?
使用swprintf_s ,这是为宽字符字符串设计的sprintf_s的版本。
你还需要一个wchar_t而不是char的数组,并使用OutputDeBUGStringW()
另外,请注意, swprintf_w可能不是您想调用的内容。 如果遇到一个比你给它大的字符串,它会执行某种断言。 我建议你具体测试这种情况。
你需要告诉sprintf()你传递一个宽字符的字符串。 使用%ls说明符:
sprintf_s(buffer,"CreatefileW: %ls",lpfilename);
请注意这是多么的无用。 您的代码在Unicode *** 作系统上运行。 它必须在将char []字符串发送给调试器之前将其转换为宽字符串。 这只是浪费了cpu周期,而且还有数据丢失的风险。 当你在罗马时,像罗马一样行事,使用wchar_t + wsprintf()。 #define UNICODE,这样你就可以自动调用OutputDeBUGStringW()这个快捷方式,不需要转换字符串。 使用C ++的要点是编写快速的代码,故意制作慢是毫无意义的。
除非你有一个具体的原因来把unicode作为这个函数的目标(而不是在整个项目中),否则尽可能使用字符集不可知的宏是明智的选择:
HANDLE WINAPI hookedCreatefile(LPCTSTR lpfilename,HANDLE hTemplatefile) { TCHAR buffer[1024]; _stprintf_s(buffer,_T("CreatefileW: %s"),lpfilename); OutputDeBUGString(buffer); return trueCreatefile(lpfilename,hTemplatefile); }
总结以上是内存溢出为你收集整理的sprintf一个LPCWSTRvariables全部内容,希望文章能够帮你解决sprintf一个LPCWSTRvariables所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)