Alfred Agrell (@Alcaro) commented about dlls/kernel32/firmware.c:
- char filename[128];
- struct stat sb = {0};
- struct wine_get_firmware_variable_params *params = args;
- int gsize = strlen(params->guid);
- if (params->guid[0] == '{' && params->guid[(gsize - 1)] == '}') {
if (gsize - 2 < sizeof(tguid))
bytes = gsize - 1;
else
bytes = sizeof(tguid);
memcpy(tguid, params->guid + 1, bytes);
tguid[bytes - 1] = '\0';
snprintf(filename, sizeof(filename), "/sys/firmware/efi/efivars/%s-%s", params->name, tguid);
- } else {
snprintf(filename, sizeof(filename), "/sys/firmware/efi/efivars/%s-%s", params->name, params->guid);
This is inaccurate, native returns ERROR_INVALID_PARAMETER if the {} is missing. (At least on my 10 VM, didn't check 11.)
(Conveniently, this is also what RtlGUIDFromString does.)