[Bug 29957] Silverlight 4 does not install (Microsoft PlayReady DRM scheme requires FILE_PERSISTENT_ACLS if returned filesystem type is NTFS)

wine-bugs at winehq.org wine-bugs at winehq.org
Mon Feb 20 17:31:30 CST 2012


http://bugs.winehq.org/show_bug.cgi?id=29957

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |download
                URL|                            |http://www.oldapps.com/silv
                   |                            |erlight.php?old_silverlight
                   |                            |=11
                 CC|                            |focht at gmx.net
          Component|-unknown                    |kernel32
            Summary|Silverlight 4 does not      |Silverlight 4 does not
                   |install                     |install (Microsoft
                   |                            |PlayReady DRM scheme
                   |                            |requires
                   |                            |FILE_PERSISTENT_ACLS if
                   |                            |returned filesystem type is
                   |                            |NTFS)

--- Comment #4 from Anastasius Focht <focht at gmx.net> 2012-02-20 17:31:30 CST ---
Hello,

the problem here is that a custom action creates the folder
"C:\\users\\Public\\Application Data\\Microsoft\\PlayReady" depending on
certain filesystem properties of "c:".

View "Silverlight.msp" using "orca":

"InstallExecuteSequence" table:

--- snip ---
SetupPlayReadyData    (Not Installed or REINSTALL) and (VersionNT > 500)   
6602
--- snip ---

"CustomAction" table:

--- snip ---
SetupPlayReadyData    81    SLMSPRBootstrapDLL    SetupPlayReadyData
--- snip ---

Trace log:

--- snip ---
0025:Call KERNEL32.LoadLibraryW(0032f010 L"C:\\Program Files\\Microsoft
Silverlight\\4.0.60531.0\\SLMSPRBootstrap.dll") ret=0100853c 
...
0025:Ret  PE DLL (proc=0x6681b7,module=0x650000
L"SLMSPRBootstrap.dll",reason=PROCESS_ATTACH,res=(nil)) retval=1
0025:Ret  KERNEL32.LoadLibraryW() retval=00650000 ret=0100853c
0025:Call KERNEL32.GetProcAddress(00650000,01002bf0 "SetupPlayReadyData")
ret=01008559
0025:Ret  KERNEL32.GetProcAddress() retval=006c0022 ret=01008559
0025:CALL SLMSPRBootstrap.SetupPlayReadyData(<unknown, check return>)
ret=0100856a 
...
0025:Call advapi32.RegOpenKeyExW(80000002,006520f0
L"SOFTWARE\\Microsoft\\PlayReady",00000000,00020119,0032ef78) ret=00661c7c
0025:Ret  advapi32.RegOpenKeyExW() retval=00000000 ret=00661c7c 
...
0025:Call KERNEL32.GetFileAttributesW(00180d10 L"C:\\users\\Public\\Application
Data\\Microsoft\\PlayReady") ret=0069250c
0025:Ret  KERNEL32.GetFileAttributesW() retval=ffffffff ret=0069250c
...
0025:Call KERNEL32.GetFullPathNameW(00180d10 L"C:\\users\\Public\\Application
Data\\Microsoft\\PlayReady",00000105,0032eb34,00000000) ret=0069453d
0025:Ret  KERNEL32.GetFullPathNameW() retval=00000034 ret=0069453d
0025:Call shlwapi.PathStripToRootW(0032eb34 L"C:\\users\\Public\\Application
Data\\Microsoft\\PlayReady") ret=00694582
0025:Ret  shlwapi.PathStripToRootW() retval=00000001 ret=00694582
0025:Call KERNEL32.GetVolumeInformationW(0032eb34
L"C:\\",00000000,00000000,00000000,00000000,0032eb2c,0032ed40,00000105)
ret=006945a6
0025:Ret  KERNEL32.GetVolumeInformationW() retval=00000001 ret=006945a6 
...
0025:RET  SLMSPRBootstrap.SetupPlayReadyData(00000000) retval=00000643
ret=0100856a
--- snip ---

You have to debug the custom action to really see what's going on (code
decrypted at runtime)...

GetVolumeInformationW() is the culprit here.

The code checks "lpFileSystemFlags" for 0x8 (FILE_PERSISTENT_ACLS) or
lpFileSystemNameBuffer[0..2] == 'F','A','T'.
If none of these conditions are met, an internal error is set (translated to
generic 1603) and the folder is not created.

Wine reports default 'NTFS' filesystem but "lpFileSystemFlags" only contains
"FILE_CASE_PRESERVED_NAMES" hence it fails here.

Code:
http://source.winehq.org/git/wine.git/blob/d5ad5ca91ca6aa1a3eb2a3849bb0dbcb6f67f5d0:/dlls/kernel32/volume.c#l771

--- snip ---
 653 BOOL WINAPI GetVolumeInformationW( LPCWSTR root, LPWSTR label, DWORD
label_len,
 654                                    DWORD *serial, DWORD *filename_len,
DWORD *flags,
 655                                    LPWSTR fsname, DWORD fsname_len )
 656 {
...
 771     switch(type)
 772     {
...
 791     default:
 792         if (fsname) lstrcpynW( fsname, ntfsW, fsname_len );
 793         if (filename_len) *filename_len = 255;
 794         if (flags) *flags = FILE_CASE_PRESERVED_NAMES;
 795         break;
 796     }
--- snip ---

If you add FILE_PERSISTENT_ACLS the custom action tries to create the folder
but fails because a part of folder -> "Microsoft" is not present.
This is another bug.

--- snip ---
0024:Call KERNEL32.GetFullPathNameW(00181770 L"C:\\users\\Public\\Application
Data\\Microsoft\\PlayReady",00000105,0032eb34,00000000) ret=0069453d
0024:Ret  KERNEL32.GetFullPathNameW() retval=00000034 ret=0069453d
0024:Call shlwapi.PathStripToRootW(0032eb34 L"C:\\users\\Public\\Application
Data\\Microsoft\\PlayReady") ret=00694582
0024:Ret  shlwapi.PathStripToRootW() retval=00000001 ret=00694582
0024:Call KERNEL32.GetVolumeInformationW(0032eb34
L"C:\\",00000000,00000000,00000000,00000000,0032eb2c,0032ed40,00000105)
ret=006945a6
0024:Ret  KERNEL32.GetVolumeInformationW() retval=00000001 ret=006945a6
0024:Call KERNEL32.GetVersionExW(0032ee1c) ret=00693e5f
0024:Ret  KERNEL32.GetVersionExW() retval=00000001 ret=00693e5f
0024:Call
advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW(00651fa0
L"D:(A;CIOI;GA;;;SY)(A;CIOI;GA;;;BA)(A;CIOI;GA;;;BU)(A;CIOI;GA;;;AU)",00000001,0032ef70,00000000)
ret=00693f33
0024:Ret  advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW()
retval=00000001 ret=00693f33
0024:Call KERNEL32.CreateDirectoryW(00181770 L"C:\\users\\Public\\Application
Data\\Microsoft\\PlayReady",0032ef6c) ret=006929b6
0024:Ret  KERNEL32.CreateDirectoryW() retval=00000000 ret=006929b6
0024:Call KERNEL32.GetLastError() ret=00692358
0024:Ret  KERNEL32.GetLastError() retval=00000003 ret=00692358
...
0024:RET  SLMSPRBootstrap.SetupPlayReadyData(00000000) retval=00000643
ret=0100856a 
--- snip ---

Regards

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
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