我正在呼叫SetupCopyOEMInf
复制设备驱动程序的.inf文件(MSFT文档说:'SetupAPI继续用于installing device drivers')。
调用返回false,因此我按照文档说的那样调用GetLastError
(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM
)。此处返回的值为十进制E000024B
或3758096971
。但是,当我使用FormatMessage
的返回值来调用GetLastError
as prescribed时,lpBuffer
为NULL。
还要弄清楚为什么SetupCopyOEMInf
会失败(它似乎适用于某些.inf文件而不是其他文件)。这是Windows 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);
答案 0 :(得分:7)
FORMAT_MESSAGE_FROM_SYSTEM
does not support all error codes。您找到的是ERROR_FILE_HASH_NOT_IN_CATALOG
FORMAT_MESSAGE_FROM_SYSTEM
未涵盖的{{3}}。 setupapi.h
错误似乎在系统消息资源中没有任何预定义文本。您必须自己编写错误字符串。
答案 1 :(得分:2)
即使这篇文章是刚刚创建的,你实际上可以通过使用HRESULT_FROM_SETUPAPI宏来获取文本(由Microsoft在http://msdn.microsoft.com/en-us/library/windows/hardware/ff545011%28v=vs.85%29.aspx发布)。这会将返回的错误代码映射到可以在FormatMessage函数中使用的错误代码。