Nikolay Sivov (@nsivov) commented about dlls/kernel32/process.c:
/*********************************************************************** * GetFirmwareEnvironmentVariableA (KERNEL32.@) */ DWORD WINAPI GetFirmwareEnvironmentVariableA(LPCSTR name, LPCSTR guid, PVOID buffer, DWORD size) { - FIXME("stub: %s %s %p %lu\n", debugstr_a(name), debugstr_a(guid), buffer, size); - SetLastError(ERROR_INVALID_FUNCTION); - return 0; + DWORD dwAttributes; + return GetFirmwareEnvironmentVariableExA( name, guid, buffer, size, &dwAttributes ); +} + +/*********************************************************************** + * GetFirmwareEnvironmentVariableExW (KERNEL32.@) + */ +DWORD WINAPI GetFirmwareEnvironmentVariableExW(LPCWSTR name, LPCWSTR guid, PVOID buffer, DWORD size, PDWORD attributes) It should be the other way around. ExW calls Nt function that accepts UNICODE_STRING or WCHARs, and ExA converts acp->wchar and calls ExW function. Assuming returned buffer contents are the same for both functions of course.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/6423#note_81129