C语言 FormatMessage 在 lpBuffer 中返回 NULL



我正在调用SetupCopyOEMInf为设备驱动程序复制.inf文件(MSFT文档说:"SetupAPI继续用于安装设备驱动程序")。

调用

返回错误,因此我随后按照文档所述调用GetLastErrorFORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM)。 此处返回的值以十进制为单位E000024B3758096971。 但是,当我按照规定的 FormatMessageGetLastError 返回值调用时,lpBuffer为 NULL。

还试图找出SetupCopyOEMInf失败的原因(它似乎适用于某些 .inf 文件,但不适用于其他文件)。 这是视窗8.1

令人 费解。。。有什么想法吗?

谢谢!

法典:

BOOL result = SetupCopyOEMInf(_T("C:\Users\edward\Desktop\_Test\cncport.inf"), NULL, SPOST_PATH, 0, NULL, 0, NULL, NULL);
//result is FALSE
LPVOID lpBuffer;
DWORD dw = GetLastError();
DWORD dwMsg = FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER |
    FORMAT_MESSAGE_FROM_SYSTEM |
    FORMAT_MESSAGE_IGNORE_INSERTS,
    NULL,
    dw,
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    (LPTSTR)&lpBuffer,
    2048, NULL);

FORMAT_MESSAGE_FROM_SYSTEM不支持所有错误代码。您找到的那个是ERROR_FILE_HASH_NOT_IN_CATALOGFORMAT_MESSAGE_FROM_SYSTEM未涵盖。setupapi.h错误在系统消息资源中似乎没有任何预定义的文本。您必须自己编写错误字符串。

尽管这篇文章是不久前创建的,但您实际上可以使用HRESULT_FROM_SETUPAPI宏获取文本(如Microsoft发布的那样 这里 http://msdn.microsoft.com/en-us/library/windows/hardware/ff545011%28v=vs.85%29.aspx)。这会将返回的错误代码映射到可在 FormatMessage 函数中使用的错误代码。

相关内容

  • 没有找到相关文章

最新更新