[Bug 47176] New: Star Wars - The Old Republic (SWTOR) client/ launcher fails with ' Installation of drivers require administrative permission' (BitRaider)( existing tag for ordering service startup must be preserved by SCM when passed NULL param )

wine-bugs at winehq.org wine-bugs at winehq.org
Sun May 12 09:44:17 CDT 2019


https://bugs.winehq.org/show_bug.cgi?id=47176

            Bug ID: 47176
           Summary: Star Wars - The Old Republic (SWTOR) client/launcher
                    fails with 'Installation of drivers require
                    administrative permission'  (BitRaider)(existing tag
                    for ordering service startup must be preserved by SCM
                    when passed NULL param)
           Product: Wine
           Version: 4.8
          Hardware: x86-64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: -unknown
          Assignee: wine-bugs at winehq.org
          Reporter: focht at gmx.net
      Distribution: ---

Hello folks,

continuation of bug 47175

There is a helper (console) app which is used to install and configure
BitRaider. At least three log file locations are of interest during
boostrapping of the game installer/launcher which includes set up of BitRaider.

--- snip ---
.wine/drive_c/ProgramData/BitRaider/common/logs/BR_Debuglog.txt
...
.wine/drive_c/Star Wars-The Old Republic/bitraider/logs/swtor_swtor.txt
...
.wine/drive_c/Star Wars-The Old Republic/logs/launcher_20190511.log
--- snip ---

'swtor_swtor.txt'

--- snip ---
...
2019/05/11 09:56:45.906:[INFO]MachineId: LAV9AVgtU0VCMUctcjMVNSIAbgBuADMA  PID:
129
2019/05/11 09:56:45.906:[INFO]Language ID: 1033  Kernel:
C:\windows\system32\ntoskrnl.exe
2019/05/11 09:56:45.906:[INFO]Host OS: Windows 7 [6.1.7601.21863] - 64-Bit -
Release Client. - Process Elevated - User Fully Elevated
2019/05/11 09:56:45.906:[INFO]Exepath: c:\star wars-the old
republic\bitraider\bin\brwc.exe
2019/05/11 09:56:45.906:[INFO]Command Parms: brdestpath="c:\star wars-the old
republic" brlocalebank=0 id=swtor_swtor -brnolaunch -brnoui brcallingpid=8
2019/05/11 09:56:45.912:[INFO]Connecting to Service Core, command: 13
2019/05/11 09:56:45.913:[INFO]CBRWCApp: Loaded common path "c:\star wars-the
old republic\Bitraider\bin\" for ID=swtor_swtor
2019/05/11 09:56:45.961:[INFO]STLEFE: Skipping extract to c:\Star Wars-The Old
Republic\bitraider\bin\BRException.exe; identical to reource
2019/05/11 09:56:45.963:[INFO]STLEFE: Skipping extract to
C:\ProgramData\BitRaider\common\BRException.exe; identical to reource
2019/05/11 09:56:45.965:[INFO]STLEFE: Skipping extract to c:\Star Wars-The Old
Republic\bitraider\bin\BRExtPipe.dll; identical to reource
2019/05/11 09:56:45.966:[INFO]STLEFE: Skipping extract to
C:\ProgramData\BitRaider\BRExtPipe.dll; identical to reource
2019/05/11 09:56:45.994:[CRIT](BRDriver64_1_3_3_E02B25FC): reading 'Tag' string
under key System\CurrentControlSet\Services\BRDriver64_1_3_3_E02B25FC failed.
error code 0
2019/05/11 09:56:45.996:[INFO]CSTL-StartStopSupportServiceStub: CurrentState: 3
2019/05/11 09:56:46.998:[INFO]CSTL-StartStopSupportServiceStub: CurrentState: 1
2019/05/11 09:56:47.003:[INFO]STLEFE: Skipping extract to
C:\ProgramData\BitRaider\BRSptStub.exe; identical to reource
2019/05/11 09:56:47.014:[INFO]Attempting to install a new copy of the service
helper.
2019/05/11 09:56:47.237:[INFO]Support Service Successfully installed
2019/05/11 09:56:47.237:[CRIT](BRDriver64_1_3_3_E02B25FC): reading 'Tag' st
...
--- snip ---

Relevant part of trace log.

App creates the service registry keys prior to SCM (see bug 47175) and then
uses SCM API to create the service entry.

--- snip ---
$ pwd
/home/focht/.wine/drive_c/Star Wars-The Old Republic/bitraider/bin

$ WINEDEBUG=+seh,+relay,+server,+reg,+service wine ./brwc.exe
brdestpath="c:\star wars-the old republic" brlocalebank=0 id=swtor_swtor
-brnolaunch -brnoui brcallingpid=8 >>log.txt 2>&1
...
003c:Call advapi32.CreateServiceW(0014f2a0,005f2aa0
L"BRDriver64_1_3_3_E02B25FC",005f2aa0
L"BRDriver64_1_3_3_E02B25FC",000f01ff,00000002,00000003,00000001,005f2bd8
L"C:\\ProgramData\\BitRaider\\support\\1.3.3\\E02B25FC\\BRDriver64.sys",00000000,00000000,00000000,00000000,00000000)
ret=0040b048
003c:trace:service:CreateServiceW 0x14f2a0 L"BRDriver64_1_3_3_E02B25FC"
L"BRDriver64_1_3_3_E02B25FC" 
...
--- snip ---

'services.exe' side:

--- snip ---
0014:trace:service:svcctl_CreateServiceWOW64W Call
msvcrt._vsnprintf(00bbeff0,00000400,0041b0aa "(%s, %s, 0x%x, %s)\n",00bbf430)
ret=00401def
0014:Ret  msvcrt._vsnprintf() retval=0000008f ret=00401def
(L"BRDriver64_1_3_3_E02B25FC", L"BRDriver64_1_3_3_E02B25FC", 0xf01ff,
L"C:\\ProgramData\\BitRaider\\support\\1.3.3\\E02B25FC\\BRDriver64.sys") 
...
0014:trace:service:create_serviceW Call
msvcrt._vsnprintf(00bbf020,00000400,0041b0aa "(%s, %s, 0x%x, %s)\n",00bbf460)
ret=00401def 
...
0014:Call advapi32.RegCreateKeyW(00000024,00033d30
L"BRDriver64_1_3_3_E02B25FC",00bbf3c8) ret=004066d8
0014:trace:reg:NtCreateKey
(0x24,L"BRDriver64_1_3_3_E02B25FC",(null),0,2000000,0xbbf128)
0014: create_key( access=02000000, options=00000000,
objattr={rootdir=0024,attributes=00000000,sd={},name=L"BRDriver64_1_3_3_E02B25FC"},
class=L"" )
0014: create_key() = 0 { hkey=01a0, created=0 }
0014:trace:reg:NtCreateKey <- 0x1a0
0014:Ret  advapi32.RegCreateKeyW() retval=00000000 ret=004066d8
0014:Call advapi32.RegSetValueExW(000001a0,0041c670
L"DisplayName",00000000,00000001,00033e20,00000034) ret=0040655e
0014:trace:reg:NtSetValueKey (0x1a0,L"DisplayName",1,0x33e20,52)
0014: set_key_value( hkey=01a0, type=1, namelen=22, name=L"DisplayName",
data={42,00,52,00,44,00,72,00,69,00,76,00,65,00,72,00,36,00,34,00,5f,00,31,00,5f,00,33,00,5f,00,33,00,5f,00,45,00,30,00,32,00,42,00,32,00,35,00,46,00,43,00,00,00}
)
0014: set_key_value() = 0
0014:Ret  advapi32.RegSetValueExW() retval=00000000 ret=0040655e
0014:Call advapi32.RegSetValueExW(000001a0,0041c610
L"ImagePath",00000000,00000001,00033d80,00000086) ret=0040655e
0014:trace:reg:NtSetValueKey (0x1a0,L"ImagePath",1,0x33d80,134)
0014: set_key_value( hkey=01a0, type=1, namelen=18, name=L"ImagePath",
data={5c,00,3f,00,3f,00,5c,00,43,00,3a,00,5c,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,44,00,61,00,74,00,61,00,5c,00,42,00,69,00,74,00,52,00,61,00,69,00,64,00,65,00,72,00,5c,00,73,00,75,00,70,00,70,00,6f,00,72,00,74,00,5c,00,31,00,2e,00,33,00,2e,00,33,00,5c,00,45,00,30,00,32,00,42,00,32,00,35,00,46,00,43,00,5c,00,42,00,52,00,44,00,72,00,69,00,76,00,65,00,72,00,36,00,34,00,2e,00,73,00,79,00,73,00,00,00}
)
0014: set_key_value() = 0
0014:Ret  advapi32.RegSetValueExW() retval=00000000 ret=0040655e
0014:Call advapi32.RegDeleteValueW(000001a0,0041c600 L"Group") ret=00406568
0014:trace:reg:NtDeleteValueKey (0x1a0,L"Group")
0014: delete_key_value( hkey=01a0, name=L"Group" )
0014: delete_key_value() = 0
0014:Ret  advapi32.RegDeleteValueW() retval=00000000 ret=00406568
0014:Call advapi32.RegSetValueExW(000001a0,0041c590
L"ObjectName",00000000,00000001,00034770,00000018) ret=0040655e
0014:trace:reg:NtSetValueKey (0x1a0,L"ObjectName",1,0x34770,24)
0014: set_key_value( hkey=01a0, type=1, namelen=20, name=L"ObjectName",
data={4c,00,6f,00,63,00,61,00,6c,00,53,00,79,00,73,00,74,00,65,00,6d,00,00,00}
)
0014: set_key_value() = 0
0014:Ret  advapi32.RegSetValueExW() retval=00000000 ret=0040655e
0014:Call advapi32.RegDeleteValueW(000001a0,0041c570 L"Description")
ret=00406568
0014:trace:reg:NtDeleteValueKey (0x1a0,L"Description")
0014: delete_key_value( hkey=01a0, name=L"Description" )
0014: delete_key_value() = OBJECT_NAME_NOT_FOUND
0014:Ret  advapi32.RegDeleteValueW() retval=00000002 ret=00406568
0014:Call advapi32.RegDeleteValueW(000001a0,0041c5e0 L"DependOnService")
ret=0040622f
0014:trace:reg:NtDeleteValueKey (0x1a0,L"DependOnService")
0014: delete_key_value( hkey=01a0, name=L"DependOnService" )
0014: delete_key_value() = 0
0014:Ret  advapi32.RegDeleteValueW() retval=00000000 ret=0040622f
0014:Call advapi32.RegDeleteValueW(000001a0,0041c5b0 L"DependOnGroup")
ret=0040622f
0014:trace:reg:NtDeleteValueKey (0x1a0,L"DependOnGroup")
0014: delete_key_value( hkey=01a0, name=L"DependOnGroup" )
0014: delete_key_value() = OBJECT_NAME_NOT_FOUND
0014:Ret  advapi32.RegDeleteValueW() retval=00000002 ret=0040622f
0014:Call advapi32.RegSetValueExW(000001a0,0041c650
L"Start",00000000,00000004,00033c94,00000004) ret=004067f9
0014:trace:reg:NtSetValueKey (0x1a0,L"Start",4,0x33c94,4)
0014: set_key_value( hkey=01a0, type=4, namelen=10, name=L"Start",
data={03,00,00,00} )
0014: set_key_value() = 0
0014:Ret  advapi32.RegSetValueExW() retval=00000000 ret=004067f9
0014:Call advapi32.RegSetValueExW(000001a0,0041c630
L"ErrorControl",00000000,00000004,00033c98,00000004) ret=0040682e
0014:trace:reg:NtSetValueKey (0x1a0,L"ErrorControl",4,0x33c98,4)
0014: set_key_value( hkey=01a0, type=4, namelen=24, name=L"ErrorControl",
data={01,00,00,00} )
0014: set_key_value() = 0
0014:Ret  advapi32.RegSetValueExW() retval=00000000 ret=0040682e
0014:Call advapi32.RegSetValueExW(000001a0,0041c660
L"Type",00000000,00000004,00033c90,00000004) ret=00406863
0014:trace:reg:NtSetValueKey (0x1a0,L"Type",4,0x33c90,4)
0014: set_key_value( hkey=01a0, type=4, namelen=8, name=L"Type",
data={02,00,00,00} )
0014: set_key_value() = 0
0014:Ret  advapi32.RegSetValueExW() retval=00000000 ret=00406863
0014:Call advapi32.RegSetValueExW(000001a0,0041c540
L"PreshutdownTimeout",00000000,00000004,00033cd0,00000004) ret=0040689b
0014:trace:reg:NtSetValueKey (0x1a0,L"PreshutdownTimeout",4,0x33cd0,4)
0014: set_key_value( hkey=01a0, type=4, namelen=36, name=L"PreshutdownTimeout",
data={20,bf,02,00} )
0014: set_key_value() = 0
0014:Ret  advapi32.RegSetValueExW() retval=00000000 ret=0040689b
0014:Call advapi32.RegSetValueExW(000001a0,0041c540
L"PreshutdownTimeout",00000000,00000004,00033cd0,00000004) ret=004068cc
0014:trace:reg:NtSetValueKey (0x1a0,L"PreshutdownTimeout",4,0x33cd0,4)
0014: set_key_value( hkey=01a0, type=4, namelen=36, name=L"PreshutdownTimeout",
data={20,bf,02,00} )
0014: set_key_value() = 0
0014:Ret  advapi32.RegSetValueExW() retval=00000000 ret=004068cc
0014:Call advapi32.RegSetValueExW(000001a0,0041c518
L"WOW64",00000000,00000004,00bbf3c4,00000004) ret=0040694c
0014:trace:reg:NtSetValueKey (0x1a0,L"WOW64",4,0xbbf3c4,4)
0014: set_key_value( hkey=01a0, type=4, namelen=10, name=L"WOW64",
data={01,00,00,00} )
0014: set_key_value() = 0
0014:Ret  advapi32.RegSetValueExW() retval=00000000 ret=0040694c
0014:Call advapi32.RegDeleteValueW(000001a0,0041c588 L"Tag") ret=00406969
0014:trace:reg:NtDeleteValueKey (0x1a0,L"Tag")
0014: delete_key_value( hkey=01a0, name=L"Tag" )
0014: delete_key_value() = 0
0014:Ret  advapi32.RegDeleteValueW() retval=00000000 ret=00406969
0014:Call advapi32.RegCloseKey(000001a0) ret=004066e8
0014: close_handle( handle=01a0 )
0014: close_handle() = 0
0014:Ret  advapi32.RegCloseKey() retval=00000000 ret=004066e8  
--- snip ---

App trace validating the service registry keys after SCM created the service:

--- snip ---
...
0009:Call advapi32.RegOpenKeyExW(80000002,0033d0ec
L"System\\CurrentControlSet\\Services\\BRDriver64_1_3_3_E02B25FC",00000000,00020019,0033c890)
ret=00483205
0009:trace:reg:open_key
(0x28,L"System\\CurrentControlSet\\Services\\BRDriver64_1_3_3_E02B25FC",20019,0x33c890)
0009: open_key( parent=0028, access=00020019, attributes=00000000,
name=L"System\\CurrentControlSet\\Services\\BRDriver64_1_3_3_E02B25FC" )
0009: open_key() = 0 { hkey=01d4 }
0009:trace:reg:open_key <- 0x1d4
0009:Ret  advapi32.RegOpenKeyExW() retval=00000000 ret=00483205
0009:Call advapi32.RegQueryValueExW(000001d4,00754df4
L"DisplayName",00000000,0033c88c,0033ceec,0033c894) ret=00483249
0009:trace:reg:RegQueryValueExW
(0x1d4,L"DisplayName",(nil),0x33c88c,0x33ceec,0x33c894=512)
0009:trace:reg:NtQueryValueKey (0x1d4,L"DisplayName",2,0x33c6c4,256)
0009: get_key_value( hkey=01d4, name=L"DisplayName" )
0009: get_key_value() = 0 { type=1, total=52,
data={42,00,52,00,44,00,72,00,69,00,76,00,65,00,72,00,36,00,34,00,5f,00,31,00,5f,00,33,00,5f,00,33,00,5f,00,45,00,30,00,32,00,42,00,32,00,35,00,46,00,43,00,00,00}
}
0009:Ret  advapi32.RegQueryValueExW() retval=00000000 ret=00483249
0009:Call advapi32.RegQueryValueExW(000001d4,00754e0c
L"ErrorControl",00000000,0033c88c,0033c888,0033c894) ret=004832b4
0009:trace:reg:RegQueryValueExW
(0x1d4,L"ErrorControl",(nil),0x33c88c,0x33c888,0x33c894=4)
0009:trace:reg:NtQueryValueKey (0x1d4,L"ErrorControl",2,0x33c6c4,16)
0009: get_key_value( hkey=01d4, name=L"ErrorControl" )
0009: get_key_value() = 0 { type=4, total=4, data={01,00,00,00} }
0009:Ret  advapi32.RegQueryValueExW() retval=00000000 ret=004832b4
0009:Call advapi32.RegQueryValueExW(000001d4,00754e34
L"ImagePath",00000000,0033c88c,0033ceec,0033c894) ret=00483358
0009:trace:reg:RegQueryValueExW
(0x1d4,L"ImagePath",(nil),0x33c88c,0x33ceec,0x33c894=512)
0009:trace:reg:NtQueryValueKey (0x1d4,L"ImagePath",2,0x33c6c4,256)
0009: get_key_value( hkey=01d4, name=L"ImagePath" )
0009: get_key_value() = 0 { type=1, total=134,
data={5c,00,3f,00,3f,00,5c,00,43,00,3a,00,5c,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,44,00,61,00,74,00,61,00,5c,00,42,00,69,00,74,00,52,00,61,00,69,00,64,00,65,00,72,00,5c,00,73,00,75,00,70,00,70,00,6f,00,72,00,74,00,5c,00,31,00,2e,00,33,00,2e,00,33,00,5c,00,45,00,30,00,32,00,42,00,32,00,35,00,46,00,43,00,5c,00,42,00,52,00,44,00,72,00,69,00,76,00,65,00,72,00,36,00,34,00,2e,00,73,00,79,00,73,00,00,00}
}
0009:Ret  advapi32.RegQueryValueExW() retval=00000000 ret=00483358
0009:Call advapi32.RegQueryValueExW(000001d4,00754e48
L"Start",00000000,0033c88c,0033c888,0033c894) ret=004833c8
0009:trace:reg:RegQueryValueExW
(0x1d4,L"Start",(nil),0x33c88c,0x33c888,0x33c894=4)
0009:trace:reg:NtQueryValueKey (0x1d4,L"Start",2,0x33c6c4,16)
0009: get_key_value( hkey=01d4, name=L"Start" )
0009: get_key_value() = 0 { type=4, total=4, data={03,00,00,00} }
0009:Ret  advapi32.RegQueryValueExW() retval=00000000 ret=004833c8
0009:Call advapi32.RegQueryValueExW(000001d4,00754e54
L"Type",00000000,0033c88c,0033c888,0033c894) ret=00483407
0009:trace:reg:RegQueryValueExW
(0x1d4,L"Type",(nil),0x33c88c,0x33c888,0x33c894=4)
0009:trace:reg:NtQueryValueKey (0x1d4,L"Type",2,0x33c6c4,16)
0009: get_key_value( hkey=01d4, name=L"Type" )
0009: get_key_value() = 0 { type=4, total=4, data={02,00,00,00} }
0009:Ret  advapi32.RegQueryValueExW() retval=00000000 ret=00483407
0009:Call advapi32.RegQueryValueExW(000001d4,00754e60
L"Tag",00000000,0033c88c,0033c888,0033c894) ret=00483446
0009:trace:reg:RegQueryValueExW
(0x1d4,L"Tag",(nil),0x33c88c,0x33c888,0x33c894=4)
0009:trace:reg:NtQueryValueKey (0x1d4,L"Tag",2,0x33c6c4,16)
0009: get_key_value( hkey=01d4, name=L"Tag" )
0009: get_key_value() = OBJECT_NAME_NOT_FOUND { type=-1, total=0, data={} }
0009:Ret  advapi32.RegQueryValueExW() retval=00000002 ret=00483446
0009:Call KERNEL32.GetLastError() ret=00483620
0009:Ret  KERNEL32.GetLastError() retval=00000000 ret=00483620
...
0009:Call user32.MessageBoxW(00000000,00c260c8 L"Installation of the driver and
support components require administrative permission acknowledgment.\r\nTry
invoking the client again.\r\nInstaller cannot continue. Exiting.",00c28210
L"Fatal error",00000000) ret=0041f794  
--- snip ---

This behaviour is actually documented by Microsoft:

https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/nf-winsvc-createservicea

--- quote ---
lpdwTagId

A pointer to a variable that receives a tag value that is unique in the group
specified in the lpLoadOrderGroup parameter. Specify NULL if you are not
changing the existing tag.

You can use a tag for ordering service startup within a load ordering group by
specifying a tag order vector in the following registry
value:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GroupOrderList

Tags are only evaluated for driver services that have SERVICE_BOOT_START or
SERVICE_SYSTEM_START start types.
--- quote ---

Wine SCM deletes the existing tag upon service creation (NULL TagId) which is
incorrect.

Wine source:

https://source.winehq.org/git/wine.git/blob/HEAD:/programs/services/services.c#l238

--- snip ---
 238 DWORD save_service_config(struct service_entry *entry)
 239 {
 240     DWORD err;
 241     HKEY hKey = NULL;
 242 
 243     err = RegCreateKeyW(entry->db->root_key, entry->name, &hKey);
 244     if (err != ERROR_SUCCESS)
 245         goto cleanup;
 246 
 247     if ((err = reg_set_string_value(hKey, SZ_DISPLAY_NAME,
entry->config.lpDisplayName)) != 0)
 248         goto cleanup;
 249     if ((err = reg_set_string_value(hKey, SZ_IMAGE_PATH,
entry->config.lpBinaryPathName)) != 0)
 250         goto cleanup;
 251     if ((err = reg_set_string_value(hKey, SZ_GROUP,
entry->config.lpLoadOrderGroup)) != 0)
 252         goto cleanup;
 253     if ((err = reg_set_string_value(hKey, SZ_OBJECT_NAME,
entry->config.lpServiceStartName)) != 0)
 254         goto cleanup;
 255     if ((err = reg_set_string_value(hKey, SZ_DESCRIPTION,
entry->description)) != 0)
 256         goto cleanup;
 257     if ((err = reg_set_multisz_value(hKey, SZ_DEPEND_ON_SERVICE,
entry->dependOnServices)) != 0)
 258         goto cleanup;
 259     if ((err = reg_set_multisz_value(hKey, SZ_DEPEND_ON_GROUP,
entry->dependOnGroups)) != 0)
 260         goto cleanup;
 261     if ((err = RegSetValueExW(hKey, SZ_START, 0, REG_DWORD,
(LPBYTE)&entry->config.dwStartType, sizeof(DWORD))) != 0)
 262         goto cleanup;
 263     if ((err = RegSetValueExW(hKey, SZ_ERROR, 0, REG_DWORD,
(LPBYTE)&entry->config.dwErrorControl, sizeof(DWORD))) != 0)
 264         goto cleanup;
 265     if ((err = RegSetValueExW(hKey, SZ_TYPE, 0, REG_DWORD,
(LPBYTE)&entry->config.dwServiceType, sizeof(DWORD))) != 0)
 266         goto cleanup;
 267     if ((err = RegSetValueExW(hKey, SZ_PRESHUTDOWN, 0, REG_DWORD,
(LPBYTE)&entry->preshutdown_timeout, sizeof(DWORD))) != 0)
 268         goto cleanup;
 269     if ((err = RegSetValueExW(hKey, SZ_PRESHUTDOWN, 0, REG_DWORD,
(LPBYTE)&entry->preshutdown_timeout, sizeof(DWORD))) != 0)
 270         goto cleanup;
 271     if (entry->is_wow64)
 272     {
 273         const DWORD is_wow64 = 1;
 274         if ((err = RegSetValueExW(hKey, SZ_WOW64, 0, REG_DWORD,
(LPBYTE)&is_wow64, sizeof(DWORD))) != 0)
 275             goto cleanup;
 276     }
 277 
 278     if (entry->config.dwTagId)
 279         err = RegSetValueExW(hKey, SZ_TAG, 0, REG_DWORD,
(LPBYTE)&entry->config.dwTagId, sizeof(DWORD));
 280     else
 281         err = RegDeleteValueW(hKey, SZ_TAG);
 282 
 283     if (err != 0 && err != ERROR_FILE_NOT_FOUND)
 284         goto cleanup;
 285 
 286     err = ERROR_SUCCESS;
 287 cleanup:
 288     RegCloseKey(hKey);
 289     return err;
 290 }
--- snip ---

$ sha1sum SWTOR_setup.exe 
c538935eff4ec90ce2e48dc7e515a8dec2f15f58  SWTOR_setup.exe

$ du -sh SWTOR_setup.exe 
32M    SWTOR_setup.exe

$ wine --version
wine-4.8

Regards

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list