1.14.5
This commit is contained in:
parent
29b0ac2154
commit
a59698b0eb
|
@ -216,42 +216,59 @@ _FX NTSTATUS SysInfo_NtQuerySystemInformation(
|
||||||
|
|
||||||
PSYSTEM_FIRMWARE_TABLE_INFORMATION firmwareTableInfo = (PSYSTEM_FIRMWARE_TABLE_INFORMATION)Buffer;
|
PSYSTEM_FIRMWARE_TABLE_INFORMATION firmwareTableInfo = (PSYSTEM_FIRMWARE_TABLE_INFORMATION)Buffer;
|
||||||
|
|
||||||
if (firmwareTableInfo->ProviderSignature == FIRMWARE_TABLE_PROVIDER_SMBIOS && firmwareTableInfo->Action == SystemFirmwareTable_Get)
|
if (firmwareTableInfo->ProviderSignature == FIRMWARE_TABLE_PROVIDER_SMBIOS && firmwareTableInfo->Action == SystemFirmwareTable_Get) {
|
||||||
{
|
|
||||||
typedef LSTATUS(*ROK)(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult);
|
typedef LSTATUS(*RegOpenKeyExW_t)(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult);
|
||||||
typedef LSTATUS(*RQVEW)(HKEY hKey, LPCWSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);
|
typedef LSTATUS(*RegQueryValueExW_t)(HKEY hKey, LPCWSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);
|
||||||
typedef LSTATUS(*RCK)(HKEY hKey);
|
typedef LSTATUS(*RegCloseKey_t)(HKEY hKey);
|
||||||
ROK RegOpenKeyExW = (ROK)GetProcAddress(LoadLibraryW(DllName_advapi32), "RegOpenKeyExW");
|
|
||||||
RQVEW RegQueryValueExW = (RQVEW)GetProcAddress(LoadLibraryW(DllName_advapi32), "RegQueryValueExW");
|
HMODULE advapi32 = LoadLibraryW(DllName_advapi32);
|
||||||
RCK RegCloseKey = (RCK)GetProcAddress(LoadLibraryW(DllName_advapi32), "RegCloseKey");
|
if (!advapi32) return STATUS_UNSUCCESSFUL;
|
||||||
|
|
||||||
|
RegOpenKeyExW_t RegOpenKeyExW = (RegOpenKeyExW_t)GetProcAddress(advapi32, "RegOpenKeyExW");
|
||||||
|
RegQueryValueExW_t RegQueryValueExW = (RegQueryValueExW_t)GetProcAddress(advapi32, "RegQueryValueExW");
|
||||||
|
RegCloseKey_t RegCloseKey = (RegCloseKey_t)GetProcAddress(advapi32, "RegCloseKey");
|
||||||
|
|
||||||
|
if (!RegOpenKeyExW || !RegQueryValueExW || !RegCloseKey) {
|
||||||
|
FreeLibrary(advapi32);
|
||||||
|
return STATUS_UNSUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
HKEY hKey = NULL;
|
HKEY hKey = NULL;
|
||||||
DWORD dwLen = 0x10000;
|
DWORD dwLen = 0x10000;
|
||||||
PVOID lpData = Dll_AllocTemp(dwLen);
|
PVOID lpData = Dll_AllocTemp(dwLen);
|
||||||
DWORD type;
|
if (!lpData) {
|
||||||
if (!lpData)
|
FreeLibrary(advapi32);
|
||||||
return STATUS_UNSUCCESSFUL;
|
return STATUS_UNSUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD type = 0;
|
||||||
// if not set we return no information, 0 length
|
// if not set we return no information, 0 length
|
||||||
if (RegOpenKeyExW && RegOpenKeyExW(HKEY_CURRENT_USER, L"System\\SbieCustom", 0, KEY_READ, &hKey) == 0) {
|
if (RegOpenKeyExW(HKEY_CURRENT_USER, L"System\\SbieCustom", 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
|
||||||
|
if (RegQueryValueExW(hKey, L"SMBiosTable", NULL, &type, (LPBYTE)lpData, &dwLen) != ERROR_SUCCESS) {
|
||||||
RegQueryValueExW(hKey, L"SMBiosTable", 0, &type, lpData, &dwLen);
|
dwLen = 0;
|
||||||
|
}
|
||||||
RegCloseKey(hKey);
|
RegCloseKey(hKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
*ReturnLength = dwLen;
|
*ReturnLength = dwLen;
|
||||||
if (dwLen > 0) {
|
if (dwLen > 0) {
|
||||||
if (dwLen + sizeof(PSYSTEM_FIRMWARE_TABLE_INFORMATION) > BufferLength)
|
if (dwLen + sizeof(SYSTEM_FIRMWARE_TABLE_INFORMATION) > BufferLength) {
|
||||||
return STATUS_BUFFER_TOO_SMALL;
|
status = STATUS_BUFFER_TOO_SMALL;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
firmwareTableInfo->TableBufferLength = dwLen;
|
firmwareTableInfo->TableBufferLength = dwLen;
|
||||||
memcpy(firmwareTableInfo->TableBuffer, lpData, dwLen);
|
memcpy(firmwareTableInfo->TableBuffer, lpData, dwLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
Dll_Free(lpData);
|
status = STATUS_SUCCESS;
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
cleanup:
|
||||||
|
Dll_Free(lpData);
|
||||||
|
FreeLibrary(advapi32);
|
||||||
|
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1391,9 +1391,9 @@ retry:
|
||||||
{
|
{
|
||||||
HKEY hKey;
|
HKEY hKey;
|
||||||
DWORD disposition;
|
DWORD disposition;
|
||||||
if(RegCreateKeyExW(HKEY_CURRENT_USER, L"System\\SbieCustom", 0, 0, 0, KEY_WRITE, NULL, &hKey, &disposition) == 0)
|
if(RegCreateKeyExW(HKEY_CURRENT_USER, L"System\\SbieCustom", 0, 0, 0, KEY_WRITE, NULL, &hKey, &disposition) == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
if(RegSetValueExW(hKey, L"SMBiosTable", 0, REG_BINARY, firmwareTableInfo->TableBuffer, firmwareTableInfo->TableBufferLength) == 0)
|
if(RegSetValueExW(hKey, L"SMBiosTable", 0, REG_BINARY, firmwareTableInfo->TableBuffer, firmwareTableInfo->TableBufferLength) == ERROR_SUCCESS)
|
||||||
CSandMan::ShowMessageBox(this, QMessageBox::Information, tr("Firmware table saved successfully to host registry: HKEY_CURRENT_USER\\System\\SbieCustom<br />you can copy it to the sandboxed registry to have a different value for each box."));
|
CSandMan::ShowMessageBox(this, QMessageBox::Information, tr("Firmware table saved successfully to host registry: HKEY_CURRENT_USER\\System\\SbieCustom<br />you can copy it to the sandboxed registry to have a different value for each box."));
|
||||||
|
|
||||||
RegCloseKey(hKey);
|
RegCloseKey(hKey);
|
||||||
|
|
Loading…
Reference in New Issue