kernel32: Handle win32 hresult in FormatMessage.
This commit is contained in:
parent
af59823567
commit
a5005ed84a
|
@ -104,6 +104,24 @@ static LPWSTR load_message( HMODULE module, UINT id, WORD lang )
|
|||
return buffer;
|
||||
}
|
||||
|
||||
static LPWSTR search_message( DWORD flags, HMODULE module, UINT id, WORD lang )
|
||||
{
|
||||
LPWSTR from = NULL;
|
||||
if (flags & FORMAT_MESSAGE_FROM_HMODULE)
|
||||
from = load_message( module, id, lang );
|
||||
if (!from && (flags & FORMAT_MESSAGE_FROM_SYSTEM))
|
||||
{
|
||||
/* Fold win32 hresult to its embedded error code. */
|
||||
if (HRESULT_SEVERITY(id) == SEVERITY_ERROR &&
|
||||
HRESULT_FACILITY(id) == FACILITY_WIN32)
|
||||
{
|
||||
id = HRESULT_CODE(id);
|
||||
}
|
||||
from = load_message( kernel32_handle, id, lang );
|
||||
}
|
||||
return from;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* get_arg (internal)
|
||||
*/
|
||||
|
@ -492,10 +510,7 @@ DWORD WINAPI FormatMessageA(
|
|||
}
|
||||
else if (dwFlags & (FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_FROM_SYSTEM))
|
||||
{
|
||||
if (dwFlags & FORMAT_MESSAGE_FROM_HMODULE)
|
||||
from = load_message( (HMODULE)lpSource, dwMessageId, dwLanguageId );
|
||||
if (!from && (dwFlags & FORMAT_MESSAGE_FROM_SYSTEM))
|
||||
from = load_message( kernel32_handle, dwMessageId, dwLanguageId );
|
||||
from = search_message( dwFlags, (HMODULE)lpSource, dwMessageId, dwLanguageId );
|
||||
if (!from) return 0;
|
||||
}
|
||||
else
|
||||
|
@ -592,10 +607,7 @@ DWORD WINAPI FormatMessageW(
|
|||
}
|
||||
else if (dwFlags & (FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_FROM_SYSTEM))
|
||||
{
|
||||
if (dwFlags & FORMAT_MESSAGE_FROM_HMODULE)
|
||||
from = load_message( (HMODULE)lpSource, dwMessageId, dwLanguageId );
|
||||
if (!from && (dwFlags & FORMAT_MESSAGE_FROM_SYSTEM))
|
||||
from = load_message( kernel32_handle, dwMessageId, dwLanguageId );
|
||||
from = search_message( dwFlags, (HMODULE)lpSource, dwMessageId, dwLanguageId );
|
||||
if (!from) return 0;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -1555,7 +1555,6 @@ static void test_message_from_hmodule(void)
|
|||
/* Test HRESULT. It's not documented but in practice _com_error::ErrorMessage relies on this. */
|
||||
ret = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE, h, 0x80070005 /* E_ACCESSDENIED */,
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), out, sizeof(out)/sizeof(CHAR), NULL);
|
||||
todo_wine
|
||||
ok(ret != 0, "FormatMessageA returned 0\n");
|
||||
|
||||
/* Test a message string with an insertion without passing any variadic arguments. */
|
||||
|
|
Loading…
Reference in New Issue