[Bug 47072] Canon DPP 4.10.20 installer fails, reports: ' installer requires administrator privileges' (netapi32 ' USER_INFO_1.usri1_priv' needs to return 'USER_PRIV_ADMIN' for login session user)
wine-bugs at winehq.org
wine-bugs at winehq.org
Fri Apr 26 06:07:37 CDT 2019
https://bugs.winehq.org/show_bug.cgi?id=47072
Anastasius Focht <focht at gmx.net> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |focht at gmx.net
Summary|Canon DPP 4.10.20 install |Canon DPP 4.10.20 installer
|require Administrator |fails, reports: 'installer
|Privileges |requires administrator
| |privileges' (netapi32
| |'USER_INFO_1.usri1_priv'
| |needs to return
| |'USER_PRIV_ADMIN' for login
| |session user)
URL|https://www.softpedia.com/g |https://web.archive.org/web
|et/Multimedia/Graphic/Image |/20190426101243/https://sof
|-Convertors/Canon-Digital-P |tpedia-secure-download.com/
|hoto-Professional.shtml#dow |dl/509dff1cf1a87c679bc6f274
|nload |45871a28/5cc2d984/100078921
| |/software/multimedia/graphi
| |c/digital_photo/dppw4.10.20
| |-installer.zip
Keywords| |Installer
--- Comment #4 from Anastasius Focht <focht at gmx.net> ---
Hello folks,
confirming.
Prerequisite: Installer needs 'winetricks -q msxml3' (another bug).
--- snip ---
$ WINEDEBUG=+seh,+relay,+msi,+netapi32 wine ./dppw4.10.20-installer.exe
>>log.txt 2>&1
...
002a:Call KERNEL32.CreateProcessW(00000000,0034f370
L"\"C:\\users\\focht\\Temp\\Canon_Inc_IC_OFI_TEMP_0\\Data\\setup.exe\"",00000000,00000000,00000000,00000410,00000000,00000000,0034db28,0034db18)
ret=7db5176a
...
002d:Call KERNEL32.__wine_kernel_init() ret=7bc67e16
002d:Ret KERNEL32.__wine_kernel_init() retval=7b472c54 ret=7bc67e16
002a:Ret KERNEL32.CreateProcessW() retval=00000001 ret=7db5176a
...
002d:Call KERNEL32.CreateProcessW(00000000,0032f470
L"\"C:\\users\\focht\\Temp\\Canon_Inc_IC_OFI_TEMP_0\\Data\\software\\install\\UniversalInstaller.exe\"",00000000,00000000,00000000,00000410,00000000,00000000,0032dc28,0032dc18)
ret=7dc7d76a
...
002f:Call KERNEL32.__wine_kernel_init() ret=7bc67e16
002f:Ret KERNEL32.__wine_kernel_init() retval=7b472c54 ret=7bc67e16
002d:Ret KERNEL32.CreateProcessW() retval=00000001 ret=7dc7d76a
...
002f:Call
wtsapi32.WTSQuerySessionInformationW(00000000,00000001,00000005,0032ecbc,0032ecac)
ret=00467e52
002f:fixme:wtsapi:WTSQuerySessionInformationW Stub (nil) 0x00000001 5 0x32ecbc
0x32ecac
002f:Call advapi32.GetUserNameW(00000000,0032ec1c) ret=7d16f403
002f:Ret advapi32.GetUserNameW() retval=00000000 ret=7d16f403
002f:Call ntdll.RtlAllocateHeap(00110000,00000000,0000000c) ret=7d16f43a
002f:Ret ntdll.RtlAllocateHeap() retval=001dca70 ret=7d16f43a
002f:Call advapi32.GetUserNameW(001dca70,0032ec1c) ret=7d16f44c
002f:Ret advapi32.GetUserNameW() retval=00000001 ret=7d16f44c
002f:Ret wtsapi32.WTSQuerySessionInformationW() retval=00000001 ret=00467e52
002f:Call KERNEL32.lstrcpyW(0032ecc0,001dca70 L"focht") ret=00467e69
002f:Ret KERNEL32.lstrcpyW() retval=0032ecc0 ret=00467e69
002f:Call netapi32.NetUserGetInfo(00000000,0032ecc0 L"focht",00000001,0032ecb8)
ret=00467e80
002f:Call KERNEL32.IsBadStringPtrW(0032ecc0,ffffffff) ret=7d1b9e25
002f:Ret KERNEL32.IsBadStringPtrW() retval=00000000 ret=7d1b9e25
002f:trace:netapi32:NetUserGetInfo ((null), L"focht", 1, 0x32ecb8)
002f:Call ntdll.RtlAllocateHeap(00110000,00000000,0000002a) ret=7d1bed4f
002f:Ret ntdll.RtlAllocateHeap() retval=001dea00 ret=7d1bed4f
002f:Call advapi32.GetUserNameW(001dea00,0032ec1c) ret=7d1bed67
002f:Ret advapi32.GetUserNameW() retval=00000001 ret=7d1bed67
002f:Call KERNEL32.lstrcmpW(001dea00 L"focht",0032ecc0 L"focht") ret=7d1beead
002f:Ret KERNEL32.lstrcmpW() retval=00000000 ret=7d1beead
002f:Call ntdll.RtlFreeHeap(00110000,00000000,001dea00) ret=7d1beecb
002f:Ret ntdll.RtlFreeHeap() retval=00000001 ret=7d1beecb
002f:Call KERNEL32.IsBadStringPtrW(0032ecc0,ffffffff) ret=7d1b9e25
002f:Ret KERNEL32.IsBadStringPtrW() retval=00000000 ret=7d1b9e25
002f:trace:netapi32:NetUserGetInfo ((null), L"focht", 0, 0x32ec1c)
002f:Call ntdll.RtlAllocateHeap(00110000,00000000,0000002a) ret=7d1bed4f
002f:Ret ntdll.RtlAllocateHeap() retval=001dea00 ret=7d1bed4f
002f:Call advapi32.GetUserNameW(001dea00,0032ebac) ret=7d1bed67
002f:Ret advapi32.GetUserNameW() retval=00000001 ret=7d1bed67
002f:Call KERNEL32.lstrcmpW(001dea00 L"focht",0032ecc0 L"focht") ret=7d1beead
002f:Ret KERNEL32.lstrcmpW() retval=00000000 ret=7d1beead
002f:Call ntdll.RtlFreeHeap(00110000,00000000,001dea00) ret=7d1beecb
002f:Ret ntdll.RtlFreeHeap() retval=00000001 ret=7d1beecb
002f:trace:netapi32:NetApiBufferAllocate (16, 0x32ec1c)
002f:Call ntdll.RtlAllocateHeap(00110000,00000000,00000010) ret=7d1bb1a3
002f:Ret ntdll.RtlAllocateHeap() retval=001db890 ret=7d1bb1a3
002f:Call KERNEL32.GetEnvironmentVariableW(7d1c91b0 L"HOME",00000000,00000000)
ret=7d1bea88
002f:Ret KERNEL32.GetEnvironmentVariableW() retval=00000000 ret=7d1bea88
002f:trace:netapi32:NetApiBufferAllocate (50, 0x32ecb8)
002f:Call ntdll.RtlAllocateHeap(00110000,00000000,00000032) ret=7d1bb1a3
002f:Ret ntdll.RtlAllocateHeap() retval=001dea00 ret=7d1bb1a3
002f:trace:netapi32:NetApiBufferFree (0x1db890)
002f:Call ntdll.RtlFreeHeap(00110000,00000000,001db890) ret=7d1bc128
002f:Ret ntdll.RtlFreeHeap() retval=00000001 ret=7d1bc128
002f:Call KERNEL32.GetEnvironmentVariableW(7d1c91b0 L"HOME",001dea2e,00000000)
ret=7d1beb18
002f:Ret KERNEL32.GetEnvironmentVariableW() retval=00000000 ret=7d1beb18
002f:Ret netapi32.NetUserGetInfo() retval=00000000 ret=00467e80
002f:Call wtsapi32.WTSFreeMemory(001dca70) ret=00467edd
002f:Call ntdll.RtlFreeHeap(00110000,00000000,001dca70) ret=7d16f194
002f:Ret ntdll.RtlFreeHeap() retval=00000001 ret=7d16f194
002f:Ret wtsapi32.WTSFreeMemory() retval=00175498 ret=00467edd
002f:Call netapi32.NetApiBufferFree(001dea00) ret=00467eee
002f:trace:netapi32:NetApiBufferFree (0x1dea00)
002f:Call ntdll.RtlFreeHeap(00110000,00000000,001dea00) ret=7d1bc128
002f:Ret ntdll.RtlFreeHeap() retval=00000001 ret=7d1bc128
002f:Ret netapi32.NetApiBufferFree() retval=00000000 ret=00467eee
...
002f:Call KERNEL32.WideCharToMultiByte(0000fde9,00000000,0032e66c
L"20190426123655:INSTALL:UIx:INFORMATION:Error=UIx is not
supported.\r\n\e8482\353e\7bccc\f7be\e72c2\353e\7bcc\e8182\6e7c\7bd1\6e7d\7bd1\0d60\7e39\0002",00000044,0032d914,00000d55,00000000,00000000)
ret=004b058d
002f:Ret KERNEL32.WideCharToMultiByte() retval=00000044 ret=004b058d
...
002f:Call gdiplus.GdipMeasureString(01b05438,00190ec0 L"Installation program of
Digital Photo Professional 4 requires administrator
privileges.",ffffffff,0018e898,0032df7c,00190fe8,0032df8c,0032dfbc,0032dfb8)
ret=004441a8
--- snip ---
Trace log doesn't reveal it, one has to debug the sub-installer.
--- snip ---
...
00467E69 | 8D85 D8FDFFFF | lea eax,dword ptr ss:[ebp-228]
00467E6F | 50 | push eax
00467E70 | 56 | push esi
00467E71 | 8D85 E0FDFFFF | lea eax,dword ptr ss:[ebp-220]
00467E77 | 50 | push eax
00467E78 | 6A 00 | push 0
00467E7A | FF15 00D44C00 | call dword ptr ds:[4CD400] ; NetUserGetInfo
00467E80 | 85C0 | test eax,eax
00467E82 | 75 15 | jne universalinstaller.467E99
00467E84 | 33C9 | xor ecx,ecx
00467E86 | 8B85 D8FDFFFF | mov eax,dword ptr ss:[ebp-228]
00467E8C | 8378 0C 02 | cmp dword ptr ds:[eax+C],2 ; ui->usri1_priv
00467E90 | 0F45F1 | cmovne esi,ecx
00467E93 | 89B5 D4FDFFFF | mov dword ptr ss:[ebp-22C],esi
00467E99 | C745 FC FEFFFFFF | mov dword ptr ss:[ebp-4],FFFFFFFE
00467EA0 | E8 27000000 | call universalinstaller.467ECC
00467EA5 | 85F6 | test esi,esi
00467EA7 | 0F95C0 | setne al
00467EAA | 8B4D F0 | mov ecx,dword ptr ss:[ebp-10]
00467EAD | 64:890D 00000000 | mov dword ptr fs:[0],ecx
00467EB4 | 59 | pop ecx
00467EB5 | 5F | pop edi
00467EB6 | 5E | pop esi
00467EB7 | 5B | pop ebx
00467EB8 | 8B4D E4 | mov ecx,dword ptr ss:[ebp-1C]
00467EBB | 33CD | xor ecx,ebp
00467EBD | E8 E6090300 | call universalinstaller.4988A8
00467EC2 | 8BE5 | mov esp,ebp
00467EC4 | 5D | pop ebp
00467EC5 | C3 | ret
--- snip ---
The installer checks for 'USER_INFO_1.usri1_priv' == 'USER_PRIV_ADMIN' for
current login session user. Wine initializes the field by default to zero
('USER_PRIV_GUEST'), hence the installer failure.
Wine source:
https://source.winehq.org/git/wine.git/blob/HEAD:/dlls/netapi32/netapi32.c#l2120
--- snip ---
2120 /************************************************************
2121 * NetUserGetInfo (NETAPI32.@)
2122 */
2123 NET_API_STATUS WINAPI
2124 NetUserGetInfo(LPCWSTR servername, LPCWSTR username, DWORD level,
2125 LPBYTE* bufptr)
2126 {
2127 NET_API_STATUS status;
2128 TRACE("(%s, %s, %d, %p)\n", debugstr_w(servername),
debugstr_w(username),
2129 level, bufptr);
2130 status = NETAPI_ValidateServername(servername);
2131 if (status != NERR_Success)
2132 return status;
2133
2134 if(!NETAPI_IsLocalComputer(servername))
2135 {
2136 FIXME("Only implemented for local computer, but remote server"
2137 "%s was requested.\n", debugstr_w(servername));
2138 return NERR_InvalidComputer;
2139 }
2140
2141 if(!NETAPI_FindUser(username) && !NETAPI_IsCurrentUser(username))
2142 {
2143 TRACE("User %s is unknown.\n", debugstr_w(username));
2144 return NERR_UserNotFound;
2145 }
2146
2147 switch (level)
2148 {
...
2211 case 1:
2212 {
2213 static const WCHAR homedirW[] = {'H','O','M','E',0};
2214 PUSER_INFO_1 ui;
2215 PUSER_INFO_0 ui0;
2216 /* sizes of the field buffers in WCHARS */
2217 int name_sz, password_sz, home_dir_sz, comment_sz, script_path_sz;
2218
2219 password_sz = 1; /* not filled out for security reasons for
NetUserGetInfo*/
2220 comment_sz = 1;
2221 script_path_sz = 1;
2222
2223 /* get data */
2224 status = NetUserGetInfo(servername, username, 0, (LPBYTE *) &ui0);
2225 if (status != NERR_Success)
2226 {
2227 NetApiBufferFree(ui0);
2228 return status;
2229 }
2230 name_sz = lstrlenW(ui0->usri0_name) + 1;
2231 home_dir_sz = GetEnvironmentVariableW(homedirW, NULL,0);
2232 /* set up buffer */
2233 NetApiBufferAllocate(sizeof(USER_INFO_1) +
2234 (name_sz + password_sz + home_dir_sz +
2235 comment_sz + script_path_sz) *
sizeof(WCHAR),
2236 (LPVOID *) bufptr);
2237
2238 ui = (PUSER_INFO_1) *bufptr;
2239 ui->usri1_name = (LPWSTR) (ui + 1);
2240 ui->usri1_password = ui->usri1_name + name_sz;
2241 ui->usri1_home_dir = ui->usri1_password + password_sz;
2242 ui->usri1_comment = ui->usri1_home_dir + home_dir_sz;
2243 ui->usri1_script_path = ui->usri1_comment + comment_sz;
2244 /* set data */
2245 lstrcpyW(ui->usri1_name, ui0->usri0_name);
2246 NetApiBufferFree(ui0);
2247 ui->usri1_password[0] = 0;
2248 ui->usri1_password_age = 0;
2249 ui->usri1_priv = 0;
2250 GetEnvironmentVariableW(homedirW, ui->usri1_home_dir,home_dir_sz);
2251 ui->usri1_comment[0] = 0;
2252 ui->usri1_flags = 0;
2253 ui->usri1_script_path[0] = 0;
2254 break;
2255 }
...
2286 default:
2287 TRACE("Invalid level %d is specified\n", level);
2288 return ERROR_INVALID_LEVEL;
2289 }
2290 return NERR_Success;
2291 }
--- snip ---
Microsoft documentation USER_INFO_1 structure:
https://docs.microsoft.com/en-us/windows/desktop/api/lmaccess/ns-lmaccess-_user_info_1
--- quote ---
typedef struct _USER_INFO_1 {
LPWSTR usri1_name;
LPWSTR usri1_password;
DWORD usri1_password_age;
DWORD usri1_priv;
LPWSTR usri1_home_dir;
LPWSTR usri1_comment;
DWORD usri1_flags;
LPWSTR usri1_script_path;
} USER_INFO_1, *PUSER_INFO_1, *LPUSER_INFO_1;
...
usri1_priv
Type: DWORD
The level of privilege assigned to the usri1_name member. When you call the
NetUserAdd function, this member must be USER_PRIV_USER. When you call the
NetUserSetInfo function, this member must be the value returned by the
NetUserGetInfo function or the NetUserEnum function. This member can be one of
the following values. For more information about user and group account rights,
see Privileges.
Value Meaning
USER_PRIV_GUEST
Guest
USER_PRIV_USER
User
USER_PRIV_ADMIN
Administrator
--- quote ---
$ sha1sum dppw4.10.20-installer.zip
aee4adbecdf43108c4459a6344dbd3e678183e8b dppw4.10.20-installer.zip
$ du -sh dppw4.10.20-installer.zip
231M dppw4.10.20-installer.zip
$ wine --version
wine-4.6-251-g8582615894
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