You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Compare commits
89 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
0defa32dfb | ||
|
1c29f7db86 | ||
|
bfb112653c | ||
|
7a5534ac75 | ||
|
1bbf522c01 | ||
|
95496eedab | ||
|
13effc62f8 | ||
|
975564c566 | ||
|
8e4c7f1017 | ||
|
e2d58b98e4 | ||
|
26e06cc151 | ||
|
90bf076dfc | ||
|
dcfee86e79 | ||
|
a3ca9927db | ||
|
d114a05de3 | ||
|
fb7bff38de | ||
|
2a8300034c | ||
|
1b0d071e41 | ||
|
134b99fbb2 | ||
|
c3c9472eb4 | ||
|
5215a311fe | ||
|
d3dbcb9165 | ||
|
53734776f6 | ||
|
54451f955b | ||
|
2fbbd765c6 | ||
|
954aed181c | ||
|
da0ebd230f | ||
|
6fb06b865c | ||
|
ffe90cf9f7 | ||
|
d6a8a1d8a1 | ||
|
7fd064ce86 | ||
|
20f6d63e2b | ||
|
bd4c1e3006 | ||
|
0a1e04b9f2 | ||
|
977b8b34ad | ||
|
caf809b1d5 | ||
|
d532c3b5bd | ||
|
952ab53219 | ||
|
e44c30c64e | ||
|
41f0cda558 | ||
|
552d300345 | ||
|
1143708578 | ||
|
aa817e83cf | ||
|
1bb34e22a6 | ||
|
dd18228f7d | ||
|
a78acf275d | ||
|
8ace9d57c0 | ||
|
0c248ecda3 | ||
|
04b7095098 | ||
|
d97efcbab3 | ||
|
52e3343bbb | ||
|
ab87b19a87 | ||
|
3426979ddf | ||
|
3f7b4894a7 | ||
|
e0390d0bdb | ||
|
5848db0ab8 | ||
|
ffb7bab285 | ||
|
f3b8a3bfa3 | ||
|
b182064bef | ||
|
f23ff69f86 | ||
|
e25c35e363 | ||
|
12842d4a5d | ||
|
a02130583a | ||
|
582e9666ed | ||
|
0ce637dcda | ||
|
9f7c9e309a | ||
|
2ce759172c | ||
|
8ecb8c648e | ||
|
97fb6e215a | ||
|
1f8b2211dc | ||
|
e390275c1d | ||
|
30cc97b72e | ||
|
a1c7c48e57 | ||
|
040fd28c00 | ||
|
90eb3105b8 | ||
|
157d49eb57 | ||
|
58cc16c463 | ||
|
92f1b745f6 | ||
|
cf78829843 | ||
|
55ce7ddfc3 | ||
|
b84a5e83cb | ||
|
4a8f10e17d | ||
|
309e515899 | ||
|
eadec3171e | ||
|
bc21be9437 | ||
|
8e8e15c81a | ||
|
a139cd10bd | ||
|
d92acf00eb | ||
|
1566e72122 |
39
README.md
39
README.md
@@ -39,7 +39,7 @@ Wine. All those differences are also documented on the
|
||||
Included bug fixes and improvements
|
||||
-----------------------------------
|
||||
|
||||
**Bug fixes and features in Wine Staging 1.7.41 [218]:**
|
||||
**Bug fixes and features in Wine Staging 1.7.43 [235]:**
|
||||
|
||||
*Note: The following list only contains features and bug fixes which are not
|
||||
yet available in vanilla Wine. They are removed from the list as soon as they
|
||||
@@ -48,11 +48,12 @@ releases, take a look at the
|
||||
[changelog](https://github.com/wine-compholio/wine-staging/blob/master/debian/changelog)
|
||||
for more details.*
|
||||
|
||||
* Add Dynamic DST exceptions for Israel Standard Time ([Wine Bug #36374](https://bugs.winehq.org/show_bug.cgi?id=36374))
|
||||
* Add HTTP Host header in HttpSendRequest instead of HttpOpenRequest ([Wine Bug #28911](https://bugs.winehq.org/show_bug.cgi?id=28911))
|
||||
* Add IEnumString stub interface for ACLShellSource ([Wine Bug #18019](https://bugs.winehq.org/show_bug.cgi?id=18019))
|
||||
* Add a ProfileList\<UserSID> registry subkey ([Wine Bug #15670](https://bugs.winehq.org/show_bug.cgi?id=15670))
|
||||
* Add default ACLs for user shell folders
|
||||
* Add implementation for CreateThreadpool ([Wine Bug #35192](https://bugs.winehq.org/show_bug.cgi?id=35192))
|
||||
* Add implementation for mfplat.MFTRegister ([Wine Bug #37811](https://bugs.winehq.org/show_bug.cgi?id=37811))
|
||||
* Add implementation for shlwapi.AssocGetPerceivedType
|
||||
* Add nvapi stubs required for GPU PhysX support
|
||||
* Add performance library registry keys needed by MS SQL Server Management Studio Express 2008 R2 ([Wine Bug #33661](https://bugs.winehq.org/show_bug.cgi?id=33661))
|
||||
* Add semi-stub for GetFileVersionInfoExA/W ([Wine Bug #38098](https://bugs.winehq.org/show_bug.cgi?id=38098))
|
||||
@@ -60,10 +61,15 @@ for more details.*
|
||||
* Add stub fltmgr.sys (filter manager driver) ([Wine Bug #23583](https://bugs.winehq.org/show_bug.cgi?id=23583))
|
||||
* Add stub for D3DXComputeNormalMap
|
||||
* Add stub for D3DXComputeTangentFrameEx ([Wine Bug #31984](https://bugs.winehq.org/show_bug.cgi?id=31984))
|
||||
* Add stub for D3DXFrameFind ([Wine Bug #38334](https://bugs.winehq.org/show_bug.cgi?id=38334))
|
||||
* Add stub for D3DXIntersect
|
||||
* Add stub for NtSetLdtEntries/ZwSetLdtEntries ([Wine Bug #26268](https://bugs.winehq.org/show_bug.cgi?id=26268))
|
||||
* Add stub for WinSqmIsOptedIn ([Wine Bug #38388](https://bugs.winehq.org/show_bug.cgi?id=38388))
|
||||
* Add stub for advapi32.ImpersonateAnonymousToken
|
||||
* Add stub for atl80.AtlIPersistPropertyBag_Save ([Wine Bug #33888](https://bugs.winehq.org/show_bug.cgi?id=33888))
|
||||
* Add stub for d3d11.D3D11CreateDeviceAndSwapChain ([Wine Bug #33153](https://bugs.winehq.org/show_bug.cgi?id=33153))
|
||||
* Add stub for fltlib.FilterLoad ([Wine Bug #38435](https://bugs.winehq.org/show_bug.cgi?id=38435))
|
||||
* Add stub for gdiplus.GdipCreateEffect ([Wine Bug #32163](https://bugs.winehq.org/show_bug.cgi?id=32163))
|
||||
* Add stub for kernel32.SetFileCompletionNotificationModes (for Steam in Win7 mode) ([Wine Bug #38493](https://bugs.winehq.org/show_bug.cgi?id=38493))
|
||||
* Add stub for ntoskrnl.ExAcquireResourceExclusiveLite
|
||||
* Add stub for ntoskrnl.ExDeleteResourceLite
|
||||
* Add stub for ntoskrnl.ExReleaseResourceForThread
|
||||
@@ -72,12 +78,14 @@ for more details.*
|
||||
* Add stub for ntoskrnl.PsRemoveLoadImageNotifyRoutine
|
||||
* Add stub for setupapi.SetupDiSelectBestCompatDrv ([Wine Bug #32088](https://bugs.winehq.org/show_bug.cgi?id=32088))
|
||||
* Add stub for wininet.ParseX509EncodedCertificateForListBoxEntry ([Wine Bug #29842](https://bugs.winehq.org/show_bug.cgi?id=29842))
|
||||
* Add stub for winsta.WinStationEnumerateW ([Wine Bug #38102](https://bugs.winehq.org/show_bug.cgi?id=38102))
|
||||
* Add stubs for D3DXCreateAnimationController interface
|
||||
* Add support for CopyFileEx progress callback ([Wine Bug #22692](https://bugs.winehq.org/show_bug.cgi?id=22692))
|
||||
* Add support for GetPropValue to PulseAudio backend
|
||||
* Add support for process specific debug channels
|
||||
* Add support for wbemprox Win32_SystemEnclosure table ([Wine Bug #34517](https://bugs.winehq.org/show_bug.cgi?id=34517))
|
||||
* Adobe Reader needs ITextSelection_fnGetDuplicate implementation
|
||||
* Allocate fake hWnd for wineconsole curses backend ([Wine Bug #34930](https://bugs.winehq.org/show_bug.cgi?id=34930))
|
||||
* Allow selection of audio device for PulseAudio backend
|
||||
* Allow special characters in pipe names ([Wine Bug #28995](https://bugs.winehq.org/show_bug.cgi?id=28995))
|
||||
* Allow to cancel a file operation via progress callback ([Wine Bug #22690](https://bugs.winehq.org/show_bug.cgi?id=22690))
|
||||
@@ -86,7 +94,6 @@ for more details.*
|
||||
* Allow to override number of quality levels for D3DMULTISAMPLE_NONMASKABLE. ([Wine Bug #12652](https://bugs.winehq.org/show_bug.cgi?id=12652))
|
||||
* Anno 1602 installer depends on Windows 98 behavior of SHFileOperationW ([Wine Bug #37916](https://bugs.winehq.org/show_bug.cgi?id=37916))
|
||||
* Audio stuttering and performance drops in multiple applications ([Wine Bug #30639](https://bugs.winehq.org/show_bug.cgi?id=30639))
|
||||
* Avoid crash when trying to bind mshtml event scripts to window ([Wine Bug #38419](https://bugs.winehq.org/show_bug.cgi?id=38419))
|
||||
* Avoid crashing when broken app tries to release surface although refcount is zero ([Wine Bug #18477](https://bugs.winehq.org/show_bug.cgi?id=18477))
|
||||
* Avoid race-conditions in NtReadFile() operations with write watches.
|
||||
* Avoid race-conditions of async WSARecv() operations with write watches.
|
||||
@@ -97,9 +104,13 @@ for more details.*
|
||||
* Black & White needs DXTn software decoding support ([Wine Bug #14939](https://bugs.winehq.org/show_bug.cgi?id=14939))
|
||||
* CPU-Z fails to start because GetLogicalProcessorInformationEx returns FALSE
|
||||
* Calculate msvcrt exponential math operations with higher precision ([Wine Bug #37149](https://bugs.winehq.org/show_bug.cgi?id=37149))
|
||||
* Create HKLM\Software\Microsoft\Cryptography\MachineGuid registry key ([Wine Bug #38508](https://bugs.winehq.org/show_bug.cgi?id=38508))
|
||||
* Create stub files for system32/drivers/etc/{services,hosts,networks,protocol} ([Wine Bug #12076](https://bugs.winehq.org/show_bug.cgi?id=12076))
|
||||
* CreateProcess does not prioritize the working directory over the system search path ([Wine Bug #23934](https://bugs.winehq.org/show_bug.cgi?id=23934))
|
||||
* D3DCompileShader should filter specific warning messages ([Wine Bug #33770](https://bugs.winehq.org/show_bug.cgi?id=33770))
|
||||
* Dirtify vertex shader on transformed update to fix graphical corruption ([Wine Bug #38539](https://bugs.winehq.org/show_bug.cgi?id=38539))
|
||||
* Do not append duplicate NULL characters when importing keys with regedit ([Wine Bug #37575](https://bugs.winehq.org/show_bug.cgi?id=37575))
|
||||
* Do not create foreign thread queues for attach_thread_input requests ([Wine Bug #38562](https://bugs.winehq.org/show_bug.cgi?id=38562))
|
||||
* Do not fail when a used context is passed to wglShareLists ([Wine Bug #11436](https://bugs.winehq.org/show_bug.cgi?id=11436))
|
||||
* Emulate access to KI_USER_SHARED_DATA kernel page on x86_64 ([Wine Bug #33849](https://bugs.winehq.org/show_bug.cgi?id=33849))
|
||||
* Enforce that surfaces are flushed after ReleaseDC
|
||||
@@ -136,7 +147,7 @@ for more details.*
|
||||
* Fix multithreading issues with fullscreen clipping ([Wine Bug #38087](https://bugs.winehq.org/show_bug.cgi?id=38087))
|
||||
* Fix possible segfault in pulse_rd_loop of PulseAudio backend
|
||||
* Fix race-condition when threads are killed during shutdown
|
||||
* Fix regression caused by blacklisting supported OpenGL extensions ([Wine Bug #38264](https://bugs.winehq.org/show_bug.cgi?id=38264))
|
||||
* Fix regression caused by blacklisting supported OpenGL extensions ([Wine Bug #38480](https://bugs.winehq.org/show_bug.cgi?id=38480))
|
||||
* Fix return value of ScrollWindowEx for invisible windows ([Wine Bug #37706](https://bugs.winehq.org/show_bug.cgi?id=37706))
|
||||
* Fix texture corruption in CSI: Fatal Conspiracy ([Wine Bug #33768](https://bugs.winehq.org/show_bug.cgi?id=33768))
|
||||
* Fix unintentional leaks with ntdll internals
|
||||
@@ -145,13 +156,14 @@ for more details.*
|
||||
* Fix wrong defition of ntoskrnl.IoReleaseCancelSpinLock function.
|
||||
* Fix wrong version of ID3DXEffect interface for d3dx9_24
|
||||
* Fix wrong version of ID3DXEffect interface for d3dx9_25 ([Wine Bug #25138](https://bugs.winehq.org/show_bug.cgi?id=25138))
|
||||
* Free RPC parameters allocated by application before anything else ([Wine Bug #36743](https://bugs.winehq.org/show_bug.cgi?id=36743))
|
||||
* Games For Windows Live 1.x expects a valid linker version in the PE header ([Wine Bug #28768](https://bugs.winehq.org/show_bug.cgi?id=28768))
|
||||
* GetMessage should remove already seen messages with higher priority ([Wine Bug #28884](https://bugs.winehq.org/show_bug.cgi?id=28884))
|
||||
* GetMonitorInfo returns the same name for all monitors ([Wine Bug #37709](https://bugs.winehq.org/show_bug.cgi?id=37709))
|
||||
* GetSecurityInfo returns NULL DACL for process object ([Wine Bug #15980](https://bugs.winehq.org/show_bug.cgi?id=15980))
|
||||
* Graphical issues in Inquisitor ([Wine Bug #32490](https://bugs.winehq.org/show_bug.cgi?id=32490))
|
||||
* Hearthstone fails to start ([Wine Bug #36216](https://bugs.winehq.org/show_bug.cgi?id=36216))
|
||||
* IOCTL_DVD_READ_STRUCTURE expects the wrong size of output buffer for some requests ([Wine Bug #37767](https://bugs.winehq.org/show_bug.cgi?id=37767))
|
||||
* Ignore garbage after decoding gif lines ([Wine Bug #32227](https://bugs.winehq.org/show_bug.cgi?id=32227))
|
||||
* Ignore unsupported flags for CoInternetSetFeatureEnabled ([Wine Bug #35197](https://bugs.winehq.org/show_bug.cgi?id=35197))
|
||||
* Implement D3DXGetShaderOutputSemantics
|
||||
* Implement DDENUMSURFACES_CANBECREATED in IDirectDraw7::EnumSurfaces ([Wine Bug #17233](https://bugs.winehq.org/show_bug.cgi?id=17233))
|
||||
@@ -164,10 +176,12 @@ for more details.*
|
||||
* Implement combase.WindowsSubstring function
|
||||
* Implement empty enumerator for IWiaDevMgr::EnumDeviceInfo ([Wine Bug #27775](https://bugs.winehq.org/show_bug.cgi?id=27775))
|
||||
* Implement exclusive mode in PulseAudio backend ([Wine Bug #37042](https://bugs.winehq.org/show_bug.cgi?id=37042))
|
||||
* Implement kernel32.GetSystemTimePreciseAsFileTime ([Wine Bug #38513](https://bugs.winehq.org/show_bug.cgi?id=38513))
|
||||
* Implement locking and synchronization of key states ([Wine Bug #31899](https://bugs.winehq.org/show_bug.cgi?id=31899))
|
||||
* Implement mscoree._CorValidateImage for mono runtime
|
||||
* Implement ntoskrnl driver testing framework.
|
||||
* Implement ntoskrnl.KeInitializeMutex
|
||||
* Implement null.sys to provide \Device\Null ([Wine Bug #38107](https://bugs.winehq.org/show_bug.cgi?id=38107))
|
||||
* Implement proper handling of CLI .NET images in Wine library loader
|
||||
* Implement stub for ntoskrnl.IoGetAttachedDeviceReference
|
||||
* Implement stub for ntoskrnl.KeDelayExecutionThread.
|
||||
@@ -176,6 +190,7 @@ for more details.*
|
||||
* Implement threadpool timers ([Wine Bug #37306](https://bugs.winehq.org/show_bug.cgi?id=37306))
|
||||
* Implement threadpool wait objects
|
||||
* Implement threadpool work items ([Wine Bug #32531](https://bugs.winehq.org/show_bug.cgi?id=32531))
|
||||
* Improve ReadDataAvailable handling in FilePipeLocalInformation class
|
||||
* Improve stub for AEV_GetVolumeRange ([Wine Bug #35658](https://bugs.winehq.org/show_bug.cgi?id=35658))
|
||||
* Improve stub for ID3DXEffectImpl_CloneEffect
|
||||
* Improve stubs for AEV_{Get,Set}MasterVolumeLevel
|
||||
@@ -183,7 +198,6 @@ for more details.*
|
||||
* Improvement for heap allocation performance
|
||||
* Jedi Knight: Dark Forces II crashes with winmm set to native ([Wine Bug #37983](https://bugs.winehq.org/show_bug.cgi?id=37983))
|
||||
* Lego Stunt Rally requires DXTn software de/encoding support ([Wine Bug #25486](https://bugs.winehq.org/show_bug.cgi?id=25486))
|
||||
* Lockfree algorithm for filedescriptor cache (improves file access speed)
|
||||
* MSVCRT crashes when NULL is passed as string to atof or strtod ([Wine Bug #32550](https://bugs.winehq.org/show_bug.cgi?id=32550))
|
||||
* MSYS2 expects correct handling of WRITECOPY memory protection ([Wine Bug #35561](https://bugs.winehq.org/show_bug.cgi?id=35561))
|
||||
* Make it possible to change media center / tablet pc status ([Wine Bug #18732](https://bugs.winehq.org/show_bug.cgi?id=18732))
|
||||
@@ -191,25 +205,26 @@ for more details.*
|
||||
* Multiple applications need EnumDisplayDevicesW implementation ([Wine Bug #34978](https://bugs.winehq.org/show_bug.cgi?id=34978))
|
||||
* Multiple applications start wrong executable if whitespace present in name ([Wine Bug #19666](https://bugs.winehq.org/show_bug.cgi?id=19666))
|
||||
* Need for Speed 3 installer requires devices in HKEY_DYN_DATA ([Wine Bug #7115](https://bugs.winehq.org/show_bug.cgi?id=7115))
|
||||
* OpenClipboard with current owner shouldn't fail ([Wine Bug #2805](https://bugs.winehq.org/show_bug.cgi?id=2805))
|
||||
* Other Pipelight-specific enhancements
|
||||
* Port Royale doesn't display ocean correctly ([Wine Bug #17913](https://bugs.winehq.org/show_bug.cgi?id=17913))
|
||||
* Prevent window managers from grouping all wine programs together ([Wine Bug #32699](https://bugs.winehq.org/show_bug.cgi?id=32699))
|
||||
* Process APC calls before starting process
|
||||
* Process Hacker 2.x needs ntoskrnl.ProbeForRead ([Wine Bug #38103](https://bugs.winehq.org/show_bug.cgi?id=38103))
|
||||
* Properly handle closing sockets during a select call ([Wine Bug #38399](https://bugs.winehq.org/show_bug.cgi?id=38399))
|
||||
* Python PIP needs better NtQueryInformationJobObject stub
|
||||
* Recognize localhost as local machine in wbemprox
|
||||
* Reduced SetTimer minimum value from 10 ms to 5 ms (improves Silverlight framerates)
|
||||
* Reset device state in SysKeyboard*Impl_Acquire ([Wine Bug #11607](https://bugs.winehq.org/show_bug.cgi?id=11607))
|
||||
* Return an error when trying to open a terminated process ([Wine Bug #37087](https://bugs.winehq.org/show_bug.cgi?id=37087))
|
||||
* Return correct IMediaSeeking stream positions in quartz ([Wine Bug #23174](https://bugs.winehq.org/show_bug.cgi?id=23174))
|
||||
* Return correct device type for cd devices without medium
|
||||
* Return correct values for GetThreadTimes function ([Wine Bug #20230](https://bugs.winehq.org/show_bug.cgi?id=20230))
|
||||
* Return default palette entries from GetSystemPaletteEntries for non-palette-based devices
|
||||
* SO_CONNECT_TIME returns the appropriate time
|
||||
* Scrolling causes mouse and screen to lock in Call to Power II ([Wine Bug #34559](https://bugs.winehq.org/show_bug.cgi?id=34559))
|
||||
* Send WM_PAINT event during dialog creation ([Wine Bug #35652](https://bugs.winehq.org/show_bug.cgi?id=35652))
|
||||
* Set last error when GetRawInputDeviceList fails ([Wine Bug #37667](https://bugs.winehq.org/show_bug.cgi?id=37667))
|
||||
* Show unmounted devices in winecfg and allow changing the unix path
|
||||
* Skip unknown item when decoding a CMS certificate ([Wine Bug #34388](https://bugs.winehq.org/show_bug.cgi?id=34388))
|
||||
* Software support for Environmental Audio Extensions (EAX)
|
||||
* Super Mario 3: Mario Forever fails to load keyboard mapping from profile files. ([Wine Bug #18099](https://bugs.winehq.org/show_bug.cgi?id=18099))
|
||||
* Support for 8bpp grayscale TIFF images with 8bpp alpha channel ([Wine Bug #38027](https://bugs.winehq.org/show_bug.cgi?id=38027))
|
||||
@@ -221,7 +236,7 @@ for more details.*
|
||||
* Support for D3DXGetShaderInputSemantics ([Wine Bug #22682](https://bugs.winehq.org/show_bug.cgi?id=22682))
|
||||
* Support for DDS file format in D3DXSaveTextureToFileInMemory ([Wine Bug #26898](https://bugs.winehq.org/show_bug.cgi?id=26898))
|
||||
* Support for DOS hidden/system file attributes ([Wine Bug #9158](https://bugs.winehq.org/show_bug.cgi?id=9158))
|
||||
* Support for Dynamic DST (daylight saving time) information in registry
|
||||
* Support for FileFsFullSizeInformation information class
|
||||
* Support for GdipCreateRegionRgnData ([Wine Bug #34843](https://bugs.winehq.org/show_bug.cgi?id=34843))
|
||||
* Support for GetFinalPathNameByHandle ([Wine Bug #34851](https://bugs.winehq.org/show_bug.cgi?id=34851))
|
||||
* Support for GetSystemTimes ([Wine Bug #19813](https://bugs.winehq.org/show_bug.cgi?id=19813))
|
||||
@@ -238,6 +253,7 @@ for more details.*
|
||||
* Support for NVIDIA video encoder library (nvencodeapi)
|
||||
* Support for NtQuerySection ([Wine Bug #37338](https://bugs.winehq.org/show_bug.cgi?id=37338))
|
||||
* Support for NtSetInformationFile class FileDispositionInformation ([Wine Bug #30397](https://bugs.winehq.org/show_bug.cgi?id=30397))
|
||||
* Support for ObjectTypeInformation class support in NtQueryObject
|
||||
* Support for PulseAudio backend for audio ([Wine Bug #10495](https://bugs.winehq.org/show_bug.cgi?id=10495))
|
||||
* Support for RtlDecompressBuffer ([Wine Bug #37449](https://bugs.winehq.org/show_bug.cgi?id=37449))
|
||||
* Support for SHCreateSessionKey ([Wine Bug #35630](https://bugs.winehq.org/show_bug.cgi?id=35630))
|
||||
@@ -257,6 +273,7 @@ for more details.*
|
||||
* Try harder to get the host name address in getaddrinfo() ([Wine Bug #29609](https://bugs.winehq.org/show_bug.cgi?id=29609))
|
||||
* Tumblebugs 2 requires DXTn software encoding support ([Wine Bug #29586](https://bugs.winehq.org/show_bug.cgi?id=29586))
|
||||
* Update a XIM candidate position when cursor location changes ([Wine Bug #30938](https://bugs.winehq.org/show_bug.cgi?id=30938))
|
||||
* Use POSIX implementation to enumerate directory content on FreeBSD ([Wine Bug #35397](https://bugs.winehq.org/show_bug.cgi?id=35397))
|
||||
* Use actual program name if available to describe PulseAudio streams
|
||||
* Use manual relay for RunDLL_CallEntry16 in shell32 ([Wine Bug #23033](https://bugs.winehq.org/show_bug.cgi?id=23033))
|
||||
* Voobly expects correct handling of WRITECOPY memory protection ([Wine Bug #29384](https://bugs.winehq.org/show_bug.cgi?id=29384))
|
||||
|
685
debian/changelog
vendored
685
debian/changelog
vendored
File diff suppressed because it is too large
Load Diff
208
debian/tools/patchinstall.sh.in
vendored
208
debian/tools/patchinstall.sh.in
vendored
@@ -32,9 +32,11 @@ usage()
|
||||
echo "Configuration:"
|
||||
echo " DESTDIR=path Specify the path to the wine source tree"
|
||||
echo " --all Select all patches"
|
||||
echo " --force-autoconf Run autoreconf and tools/make_requests after each patch"
|
||||
echo " --help Display this help and exit"
|
||||
echo " --no-patchlist Do not apply patchlist (needed for 'wine --patches')"
|
||||
echo " --no-autoconf Do not run autoreconf and tools/make_requests"
|
||||
echo " --version Show version information"
|
||||
echo " -W patchset Exclude a specific patchset"
|
||||
echo ""
|
||||
echo "Backends:"
|
||||
@@ -46,6 +48,17 @@ usage()
|
||||
echo ""
|
||||
}}
|
||||
|
||||
# Show version information
|
||||
version()
|
||||
{{
|
||||
echo "Wine Staging {latest_staging_version}"
|
||||
echo "Copyright (C) 2014-2015 the Wine Staging project authors."
|
||||
echo ""
|
||||
echo "Patchset to be applied on upstream Wine:"
|
||||
echo " commit {latest_wine_commit}"
|
||||
echo ""
|
||||
}}
|
||||
|
||||
# Critical error, abort
|
||||
abort()
|
||||
{{
|
||||
@@ -67,7 +80,6 @@ enable_patchlist=1
|
||||
enable_autoconf=1
|
||||
patchlist="/dev/null"
|
||||
backend="patch"
|
||||
enable=1
|
||||
|
||||
# Find location of patches
|
||||
patchdir="$(dirname "$(readlink -f "$0")")"
|
||||
@@ -85,16 +97,6 @@ if test "$#" -eq 0; then
|
||||
fi
|
||||
|
||||
while test "$#" -gt 0; do
|
||||
if patch_enable "$1" "$enable"; then
|
||||
shift
|
||||
enable=1
|
||||
continue
|
||||
fi
|
||||
|
||||
if test "$enable" -ne 1; then
|
||||
abort "Wrong use of -W commandline argument, expected patchname."
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
DESTDIR=*)
|
||||
DESTDIR="${{1#*=}}"
|
||||
@@ -111,6 +113,11 @@ while test "$#" -gt 0; do
|
||||
shift
|
||||
;;
|
||||
|
||||
--force-autoconf)
|
||||
enable_autoconf=2
|
||||
shift
|
||||
;;
|
||||
|
||||
--help)
|
||||
usage
|
||||
exit 0
|
||||
@@ -126,21 +133,30 @@ while test "$#" -gt 0; do
|
||||
shift
|
||||
;;
|
||||
|
||||
--version)
|
||||
version
|
||||
exit 0
|
||||
;;
|
||||
|
||||
-W)
|
||||
enable=2
|
||||
# Disable patchset
|
||||
if ! patch_enable "$2" 2; then
|
||||
abort "Wrong usage of -W commandline argument, expected patchname."
|
||||
fi
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
|
||||
*)
|
||||
abort "Unknown commandline argument $1"
|
||||
exit 1
|
||||
# Enable patchset
|
||||
if ! patch_enable "$1" 1; then
|
||||
abort "Unknown commandline argument $1."
|
||||
fi
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if test "$enable" -ne 1; then
|
||||
abort "Missing argument for -W, expected patchname."
|
||||
fi
|
||||
|
||||
# Determine DESTDIR if not explicitly specified
|
||||
if test -z "$DESTDIR" -a -f ./tools/make_requests; then
|
||||
DESTDIR="$(pwd)"
|
||||
@@ -154,6 +170,85 @@ if ! cd "$DESTDIR"; then
|
||||
abort "Unable to change directory to $DESTDIR."
|
||||
fi
|
||||
|
||||
# Helper to update configure / the wineserver protocol if required
|
||||
if ! command -v diff >/dev/null 2>&1 ||
|
||||
! command -v grep >/dev/null 2>&1 ||
|
||||
! command -v cmp >/dev/null 2>&1; then
|
||||
|
||||
update_configure()
|
||||
{{
|
||||
autoreconf -f
|
||||
}}
|
||||
|
||||
update_protocol()
|
||||
{{
|
||||
./tools/make_requests
|
||||
}}
|
||||
|
||||
else
|
||||
|
||||
update_configure()
|
||||
{{
|
||||
_file="./configure"
|
||||
|
||||
if ! cp -a "$_file" "$_file.old"; then
|
||||
abort "failed to create $_file.old"
|
||||
fi
|
||||
|
||||
if ! autoreconf -f; then
|
||||
rm "$_file.old"
|
||||
unset _file
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Shifting by 62 bits is undefined behaviour when off_t is 32-bit, see also
|
||||
# https://launchpad.net/ubuntu/+source/autoconf/2.69-6 - the bug is still
|
||||
# present in some other distros (including Archlinux).
|
||||
_large_off_old="^#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))$"
|
||||
_large_off_new="#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))"
|
||||
sed -i'' -e "s|$_large_off_old|$_large_off_new|g" "$_file"
|
||||
unset _large_off_old _large_off_new
|
||||
|
||||
# Restore original timestamp when nothing changed
|
||||
if ! cmp "$_file.old" "$_file" >/dev/null; then
|
||||
rm "$_file.old"
|
||||
else
|
||||
mv "$_file.old" "$_file"
|
||||
fi
|
||||
|
||||
unset _file
|
||||
return 0
|
||||
}}
|
||||
|
||||
update_protocol()
|
||||
{{
|
||||
_file="./include/wine/server_protocol.h"
|
||||
|
||||
if ! cp -a "$_file" "$_file.old"; then
|
||||
abort "failed to create $_file.old"
|
||||
fi
|
||||
|
||||
if ! ./tools/make_requests; then
|
||||
rm "$_file.old"
|
||||
unset _file
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Restore original timestamp when nothing changed
|
||||
if diff -u "$_file.old" "$_file" |
|
||||
grep -v "^[+-]#define SERVER_PROTOCOL_VERSION" |
|
||||
grep -v "^\(+++\|---\)" | grep -q "^[+-]"; then
|
||||
rm "$_file.old"
|
||||
else
|
||||
mv "$_file.old" "$_file"
|
||||
fi
|
||||
|
||||
unset _file
|
||||
return 0
|
||||
}}
|
||||
fi
|
||||
|
||||
|
||||
# Most backends will try to use git, either directly or indirectly.
|
||||
# Unfortunately this does not work when "$DESTDIR" points to a
|
||||
# subdirectory of a git tree, which has the effect that no patches
|
||||
@@ -172,7 +267,12 @@ if test "$backend" = "patch"; then
|
||||
gitapply_args=""
|
||||
fi
|
||||
|
||||
patch_apply_file ()
|
||||
if test "$enable_autoconf" -gt 1; then
|
||||
warning "Ignoring commandline argument --force-autoconf."
|
||||
enable_autoconf=1
|
||||
fi
|
||||
|
||||
patch_apply_file()
|
||||
{{
|
||||
echo "Applying $1"
|
||||
if ! "$patchdir/gitapply.sh" $gitapply_args < "$1"; then
|
||||
@@ -196,18 +296,25 @@ elif test "$backend" = "epatch"; then
|
||||
abort "Shell functions epatch/ebegin/eend not found. You have to source this script from your ebuild."
|
||||
fi
|
||||
|
||||
patch_apply_file ()
|
||||
if test "$enable_autoconf" -gt 1; then
|
||||
warning "Ignoring commandline argument --force-autoconf."
|
||||
enable_autoconf=1
|
||||
fi
|
||||
|
||||
patch_apply_file()
|
||||
{{
|
||||
shortname="$(basename "$1")"
|
||||
_shortname="$(basename "$1")"
|
||||
if grep -q "^GIT binary patch" "$1"; then
|
||||
ebegin "Applying $shortname"
|
||||
"$patchdir/gitapply.sh" $gitapply_args < "$1" || \
|
||||
ebegin "Applying $_shortname"
|
||||
if ! "$patchdir/gitapply.sh" $gitapply_args < "$1"; then
|
||||
die "Failed Patch: $1!"
|
||||
fi
|
||||
eend
|
||||
|
||||
else
|
||||
epatch "$1" # epatch calls die upon failure
|
||||
fi
|
||||
unset _shortname
|
||||
}}
|
||||
|
||||
# GIT backend - apply patches using 'git am'
|
||||
@@ -217,12 +324,44 @@ elif test "$backend" = "git" -o "$backend" = "git-am"; then
|
||||
abort "Backend 'git-am' not possible when DESTDIR points to a git subdirectory."
|
||||
fi
|
||||
|
||||
patch_apply_file ()
|
||||
patch_apply_file()
|
||||
{{
|
||||
echo "Applying $1"
|
||||
if ! git am "$1"; then
|
||||
abort "Failed to apply patch, aborting!"
|
||||
fi
|
||||
if test "$enable_autoconf" -gt 1; then
|
||||
_do_commit=0
|
||||
|
||||
# Run 'autoreconf -f' if required
|
||||
if git show --pretty=format: --name-only | grep -q "^\(configure.ac\|aclocal.m4\)$"; then
|
||||
if ! update_configure; then
|
||||
abort "'autoreconf -f' failed."
|
||||
fi
|
||||
git add ./configure
|
||||
git add ./include/config.h.in
|
||||
_do_commit=1
|
||||
fi
|
||||
|
||||
# Run './tools/make_requests' if required
|
||||
if git show --pretty=format: --name-only | grep -q "^server/"; then
|
||||
if ! update_protocol; then
|
||||
abort "'./tools/make_requests' failed."
|
||||
fi
|
||||
git add ./include/wine/server_protocol.h
|
||||
git add ./server/trace.c
|
||||
git add ./server/request.h
|
||||
_do_commit=1
|
||||
fi
|
||||
|
||||
if test "$_do_commit" -ne 0; then
|
||||
if ! git commit --amend --reuse-message HEAD; then
|
||||
abort "Failed to include autogenerated changes in commit."
|
||||
fi
|
||||
fi
|
||||
|
||||
unset _do_commit
|
||||
fi
|
||||
}}
|
||||
|
||||
# Git apply backend
|
||||
@@ -232,7 +371,12 @@ elif test "$backend" = "git-apply"; then
|
||||
abort "Backend 'git-apply' not possible when DESTDIR points to a git subdirectory."
|
||||
fi
|
||||
|
||||
patch_apply_file ()
|
||||
if test "$enable_autoconf" -gt 1; then
|
||||
warning "Ignoring commandline argument --force-autoconf."
|
||||
enable_autoconf=1
|
||||
fi
|
||||
|
||||
patch_apply_file()
|
||||
{{
|
||||
echo "Applying $1"
|
||||
if ! git apply "$1"; then
|
||||
@@ -252,20 +396,21 @@ elif test "$backend" = "stg"; then
|
||||
enable_patchlist=0
|
||||
enable_autoconf=0
|
||||
|
||||
patch_apply_file ()
|
||||
patch_apply_file()
|
||||
{{
|
||||
echo "Applying $1"
|
||||
shortname="$(basename "$1")"
|
||||
if ! echo "staging/$shortname" | cat - "$1" | stg import; then
|
||||
_shortname="$(basename "$1")"
|
||||
if ! echo "staging/$_shortname" | cat - "$1" | stg import; then
|
||||
abort "Failed to apply patch, aborting!"
|
||||
fi
|
||||
unset _shortname
|
||||
}}
|
||||
|
||||
else
|
||||
abort "Selected backend $backend not supported."
|
||||
fi
|
||||
|
||||
patch_apply ()
|
||||
patch_apply()
|
||||
{{
|
||||
patch_apply_file "$patchdir/$1"
|
||||
}}
|
||||
@@ -337,13 +482,12 @@ EOF
|
||||
fi
|
||||
|
||||
if test "$enable_autoconf" -eq 1; then
|
||||
if ! autoreconf -f; then
|
||||
if ! update_configure; then
|
||||
abort "'autoreconf -f' failed."
|
||||
fi
|
||||
if ! ./tools/make_requests; then
|
||||
if ! update_protocol; then
|
||||
abort "'./tools/make_requests' failed."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Success
|
||||
exit 0
|
||||
|
77
debian/tools/patchupdate.py
vendored
77
debian/tools/patchupdate.py
vendored
@@ -43,8 +43,9 @@ import xml.dom.minidom
|
||||
_devnull = open(os.devnull, 'wb')
|
||||
|
||||
# Cached information to speed up patch dependency checks
|
||||
latest_wine_commit = None
|
||||
cached_patch_result = {}
|
||||
latest_wine_commit = None
|
||||
latest_staging_version = None
|
||||
cached_patch_result = {}
|
||||
|
||||
class config(object):
|
||||
path_cache = ".patchupdate.cache"
|
||||
@@ -74,6 +75,7 @@ class PatchSet(object):
|
||||
self.changes = []
|
||||
self.disabled = False
|
||||
self.ifdefined = None
|
||||
self.categories = []
|
||||
|
||||
self.files = []
|
||||
self.patches = []
|
||||
@@ -176,11 +178,13 @@ def _read_changelog():
|
||||
r = re.match("^([a-zA-Z0-9][^(]*)\((.*)\) ([^;]*)", line)
|
||||
if r: yield (r.group(1).strip(), r.group(2).strip(), r.group(3).strip())
|
||||
|
||||
def _stable_compholio_version():
|
||||
def _latest_staging_version(only_stable=False):
|
||||
"""Get version number of the latest stable release."""
|
||||
for package, version, distro in _read_changelog():
|
||||
if distro.lower() != "unreleased":
|
||||
return version
|
||||
elif not only_stable:
|
||||
return "%s (unreleased)" % version
|
||||
|
||||
def _latest_wine_commit(commit=None):
|
||||
"""Get latest wine commit."""
|
||||
@@ -188,7 +192,7 @@ def _latest_wine_commit(commit=None):
|
||||
raise PatchUpdaterError("Please create a symlink to the wine repository in %s" % config.path_wine)
|
||||
if commit is None:
|
||||
commit = subprocess.check_output(["git", "rev-parse", "origin/master"], cwd=config.path_wine).strip()
|
||||
assert len(commit) == 40
|
||||
assert len(commit) == 40 and commit == commit.lower()
|
||||
return commit
|
||||
|
||||
def enum_directories(revision, path):
|
||||
@@ -230,6 +234,7 @@ def read_patchset(revision = None):
|
||||
all_patches = {}
|
||||
name_to_id = {}
|
||||
all_bugids = set()
|
||||
categories = {}
|
||||
|
||||
# Read in sorted order (to ensure created Makefile doesn't change too much)
|
||||
for name, directory in sorted(enum_directories(revision, config.path_patches)):
|
||||
@@ -294,6 +299,12 @@ def read_patchset(revision = None):
|
||||
if i != j and any([fnmatch.fnmatch(f, val) for f in other_patch.modified_files]):
|
||||
patch.auto_depends.add(j)
|
||||
|
||||
elif key == "category":
|
||||
val = "category-%s" % val
|
||||
if name_to_id.has_key(val):
|
||||
raise PatchUpdaterError("Category name in definition file %s collides with patchset %s" % (filename, val))
|
||||
patch.categories.append(val)
|
||||
|
||||
elif key == "fixes":
|
||||
r = re.match("^[0-9]+$", val)
|
||||
if r:
|
||||
@@ -318,6 +329,23 @@ def read_patchset(revision = None):
|
||||
elif revision is None:
|
||||
print "WARNING: Ignoring unknown command in definition file %s: %s" % (filename, line)
|
||||
|
||||
# If patch is not disabled then finally add it to the category
|
||||
if not patch.disabled:
|
||||
for category in patch.categories:
|
||||
if not categories.has_key(category):
|
||||
categories[category] = set()
|
||||
categories[category].add(i)
|
||||
|
||||
|
||||
# Add virtual targets for all the categories
|
||||
for category, indices in categories.iteritems():
|
||||
patch = PatchSet(category, directory)
|
||||
patch.depends = indices
|
||||
|
||||
i = next(unique_id)
|
||||
all_patches[i] = patch
|
||||
name_to_id[name] = i
|
||||
|
||||
# To simplify the task of keeping the bug list up-to-date, list all bugs
|
||||
# which might require attention.
|
||||
if revision is None:
|
||||
@@ -628,6 +656,11 @@ def generate_script(all_patches):
|
||||
# Generate code for applying all patchsets
|
||||
lines = []
|
||||
for i, patch in [(i, all_patches[i]) for i in resolved]:
|
||||
|
||||
# Categories do not have any files associated, so just skip over
|
||||
if len(patch.files) == 0:
|
||||
continue
|
||||
|
||||
lines.append("# Patchset %s\n" % patch.name)
|
||||
lines.append("# |\n")
|
||||
|
||||
@@ -658,14 +691,16 @@ def generate_script(all_patches):
|
||||
with open(config.path_template_script) as template_fp:
|
||||
template = template_fp.read()
|
||||
with open(config.path_script, "w") as fp:
|
||||
fp.write(template.format(patch_helpers="".join(lines_helpers).rstrip("\n"),
|
||||
fp.write(template.format(latest_staging_version=_latest_staging_version(),
|
||||
latest_wine_commit=latest_wine_commit,
|
||||
patch_helpers="".join(lines_helpers).rstrip("\n"),
|
||||
patch_resolver="".join(lines_resolver).rstrip("\n"),
|
||||
patch_apply="".join(lines_apply).rstrip("\n")))
|
||||
|
||||
# Add changes to git
|
||||
subprocess.call(["git", "add", config.path_script])
|
||||
|
||||
def generate_markdown(all_patches, stable_patches, stable_compholio_version):
|
||||
def generate_markdown(all_patches, stable_patches):
|
||||
"""Generate README.md including information about specific patches and bugfixes."""
|
||||
|
||||
def _format_bug(mode, bugid, bugname):
|
||||
@@ -711,7 +746,7 @@ def generate_markdown(all_patches, stable_patches, stable_compholio_version):
|
||||
lines.append(_format_bug(mode, bugid, bugname))
|
||||
lines.append("")
|
||||
lines.append("")
|
||||
lines.append("**Bug fixes and features in Wine Staging %s [%d]:**" % (stable_compholio_version, len(old_fixes)))
|
||||
lines.append("**Bug fixes and features in Wine Staging %s [%d]:**" % (latest_staging_version, len(old_fixes)))
|
||||
lines.append("")
|
||||
lines.append("*Note: The following list only contains features and bug fixes which are not")
|
||||
lines.append("yet available in vanilla Wine. They are removed from the list as soon as they")
|
||||
@@ -732,6 +767,25 @@ def generate_markdown(all_patches, stable_patches, stable_compholio_version):
|
||||
# Add changes to git
|
||||
subprocess.call(["git", "add", config.path_README_md])
|
||||
|
||||
def wrap_changelog():
|
||||
|
||||
lines = []
|
||||
with open(config.path_changelog) as fp:
|
||||
for line in fp:
|
||||
if line.startswith(" *") and len(line.rstrip("\n")) > 80:
|
||||
wrapped = textwrap.wrap(line[3:].strip(), 80 - 4)
|
||||
lines.append(" * %s\n" % "\n ".join(wrapped))
|
||||
else:
|
||||
lines.append(line)
|
||||
|
||||
with open(config.path_changelog, "w") as fp:
|
||||
for line in lines:
|
||||
fp.write(line)
|
||||
|
||||
# Add changes to git
|
||||
subprocess.call(["git", "add", config.path_changelog])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
# Hack to avoid KeyboardInterrupts on different threads
|
||||
@@ -742,17 +796,18 @@ if __name__ == "__main__":
|
||||
|
||||
try:
|
||||
|
||||
# Get information about Wine and Compholio version
|
||||
# Get information about Wine and Staging version
|
||||
latest_wine_commit = _latest_wine_commit(sys.argv[1] if len(sys.argv) >= 2 else None)
|
||||
stable_compholio_version = _stable_compholio_version()
|
||||
latest_staging_version = _latest_staging_version(only_stable=True)
|
||||
|
||||
# Read current and stable patches
|
||||
all_patches = read_patchset()
|
||||
stable_patches = read_patchset(revision="v%s" % stable_compholio_version)
|
||||
stable_patches = read_patchset(revision="v%s" % latest_staging_version)
|
||||
|
||||
generate_ifdefined(all_patches)
|
||||
generate_script(all_patches)
|
||||
generate_markdown(all_patches, stable_patches, stable_compholio_version)
|
||||
generate_markdown(all_patches, stable_patches)
|
||||
wrap_changelog()
|
||||
|
||||
except PatchUpdaterError as e:
|
||||
print ""
|
||||
|
1
patches/Compiler_Warnings/definition
Normal file
1
patches/Compiler_Warnings/definition
Normal file
@@ -0,0 +1 @@
|
||||
Category: stable
|
File diff suppressed because it is too large
Load Diff
1
patches/Staging/definition
Normal file
1
patches/Staging/definition
Normal file
@@ -0,0 +1 @@
|
||||
Category: stable
|
@@ -0,0 +1,75 @@
|
||||
From a996ccc06eebf03b706e28c3af277901b5074e37 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Thu, 30 Apr 2015 01:37:44 +0200
|
||||
Subject: advapi32: Add stub for ImpersonateAnonymousToken.
|
||||
|
||||
---
|
||||
dlls/advapi32/advapi32.spec | 2 +-
|
||||
dlls/advapi32/security.c | 10 ++++++++++
|
||||
.../api-ms-win-security-base-l1-1-0.spec | 2 +-
|
||||
.../api-ms-win-security-base-l1-2-0.spec | 2 +-
|
||||
4 files changed, 13 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/advapi32.spec b/dlls/advapi32/advapi32.spec
|
||||
index e7b7cf7..9fdd266 100644
|
||||
--- a/dlls/advapi32/advapi32.spec
|
||||
+++ b/dlls/advapi32/advapi32.spec
|
||||
@@ -375,7 +375,7 @@
|
||||
@ stub I_ScSetServiceBitsA
|
||||
# @ stub I_ScSetServiceBitsW
|
||||
# @ stub IdentifyCodeAuthzLevelW
|
||||
-# @ stub ImpersonateAnonymousToken
|
||||
+@ stdcall ImpersonateAnonymousToken(long)
|
||||
@ stdcall ImpersonateLoggedOnUser(long)
|
||||
@ stdcall ImpersonateNamedPipeClient(long)
|
||||
@ stdcall ImpersonateSelf(long)
|
||||
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
|
||||
index d27b2e7..de3c82e 100644
|
||||
--- a/dlls/advapi32/security.c
|
||||
+++ b/dlls/advapi32/security.c
|
||||
@@ -2501,6 +2501,16 @@ BOOL WINAPI ImpersonateLoggedOnUser(HANDLE hToken)
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
+ * ImpersonateAnonymousToken [ADVAPI32.@]
|
||||
+ */
|
||||
+BOOL WINAPI ImpersonateAnonymousToken(HANDLE hThread)
|
||||
+{
|
||||
+ FIXME("(%p)\n", hThread);
|
||||
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
+/******************************************************************************
|
||||
* AccessCheck [ADVAPI32.@]
|
||||
*/
|
||||
BOOL WINAPI
|
||||
diff --git a/dlls/api-ms-win-security-base-l1-1-0/api-ms-win-security-base-l1-1-0.spec b/dlls/api-ms-win-security-base-l1-1-0/api-ms-win-security-base-l1-1-0.spec
|
||||
index 548ae83..4277706 100644
|
||||
--- a/dlls/api-ms-win-security-base-l1-1-0/api-ms-win-security-base-l1-1-0.spec
|
||||
+++ b/dlls/api-ms-win-security-base-l1-1-0/api-ms-win-security-base-l1-1-0.spec
|
||||
@@ -58,7 +58,7 @@
|
||||
@ stdcall GetSidSubAuthorityCount(ptr) advapi32.GetSidSubAuthorityCount
|
||||
@ stdcall GetTokenInformation(long long ptr long ptr) advapi32.GetTokenInformation
|
||||
@ stub GetWindowsAccountDomainSid
|
||||
-@ stub ImpersonateAnonymousToken
|
||||
+@ stdcall ImpersonateAnonymousToken(long) advapi32.ImpersonateAnonymousToken
|
||||
@ stdcall ImpersonateLoggedOnUser(long) advapi32.ImpersonateLoggedOnUser
|
||||
@ stdcall ImpersonateSelf(long) advapi32.ImpersonateSelf
|
||||
@ stdcall InitializeAcl(ptr long long) advapi32.InitializeAcl
|
||||
diff --git a/dlls/api-ms-win-security-base-l1-2-0/api-ms-win-security-base-l1-2-0.spec b/dlls/api-ms-win-security-base-l1-2-0/api-ms-win-security-base-l1-2-0.spec
|
||||
index d268183..3adef23 100644
|
||||
--- a/dlls/api-ms-win-security-base-l1-2-0/api-ms-win-security-base-l1-2-0.spec
|
||||
+++ b/dlls/api-ms-win-security-base-l1-2-0/api-ms-win-security-base-l1-2-0.spec
|
||||
@@ -64,7 +64,7 @@
|
||||
@ stdcall GetSidSubAuthorityCount(ptr) advapi32.GetSidSubAuthorityCount
|
||||
@ stdcall GetTokenInformation(long long ptr long ptr) advapi32.GetTokenInformation
|
||||
@ stub GetWindowsAccountDomainSid
|
||||
-@ stub ImpersonateAnonymousToken
|
||||
+@ stdcall ImpersonateAnonymousToken(long) advapi32.ImpersonateAnonymousToken
|
||||
@ stdcall ImpersonateLoggedOnUser(long) advapi32.ImpersonateLoggedOnUser
|
||||
@ stdcall ImpersonateSelf(long) advapi32.ImpersonateSelf
|
||||
@ stdcall InitializeAcl(ptr long long) advapi32.InitializeAcl
|
||||
--
|
||||
2.4.0
|
||||
|
1
patches/advapi32-ImpersonateAnonymousToken/definition
Normal file
1
patches/advapi32-ImpersonateAnonymousToken/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: Add stub for advapi32.ImpersonateAnonymousToken
|
@@ -1,14 +1,14 @@
|
||||
From 9a19e77a0334f91e370e73099066484f20b24321 Mon Sep 17 00:00:00 2001
|
||||
From 616c17cc58a4943d3a367704943e737d5713740d Mon Sep 17 00:00:00 2001
|
||||
From: Qian Hong <qhong@codeweavers.com>
|
||||
Date: Tue, 7 Apr 2015 11:23:34 +0800
|
||||
Subject: advapi32: Fallback to Sid string when LookupAccountSid fails.
|
||||
|
||||
---
|
||||
dlls/advapi32/lsa.c | 30 ++++++++++++++++++++++++++++++
|
||||
1 file changed, 30 insertions(+)
|
||||
dlls/advapi32/lsa.c | 31 +++++++++++++++++++++++++++++++
|
||||
1 file changed, 31 insertions(+)
|
||||
|
||||
diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c
|
||||
index 258b8ca..2b2c6b6 100644
|
||||
index 258b8ca..93afa20 100644
|
||||
--- a/dlls/advapi32/lsa.c
|
||||
+++ b/dlls/advapi32/lsa.c
|
||||
@@ -29,6 +29,7 @@
|
||||
@@ -41,7 +41,7 @@ index 258b8ca..2b2c6b6 100644
|
||||
}
|
||||
|
||||
/* now we have full length needed for both */
|
||||
@@ -593,6 +609,20 @@ NTSTATUS WINAPI LsaLookupSids(
|
||||
@@ -593,6 +609,21 @@ NTSTATUS WINAPI LsaLookupSids(
|
||||
heap_free(domain.Buffer);
|
||||
}
|
||||
}
|
||||
@@ -52,6 +52,7 @@ index 258b8ca..2b2c6b6 100644
|
||||
+ if (ConvertSidToStringSidW(Sids[i], &strsid))
|
||||
+ {
|
||||
+ name_size = strlenW(strsid) + 1;
|
||||
+ mapped++;
|
||||
+
|
||||
+ (*Names)[i].Name.Buffer = name_buffer;
|
||||
+ memcpy((*Names)[i].Name.Buffer, strsid, name_size * sizeof(WCHAR));
|
||||
|
@@ -0,0 +1,95 @@
|
||||
From f0290aad953e988b1a15e214ecfc57f21dc136af Mon Sep 17 00:00:00 2001
|
||||
From: Qian Hong <qhong@codeweavers.com>
|
||||
Date: Tue, 28 Apr 2015 23:28:50 +0800
|
||||
Subject: advapi32/tests: Test prefix and use of TokenPrimaryGroup Sid.
|
||||
|
||||
---
|
||||
dlls/advapi32/tests/security.c | 35 ++++++++++++++++++++++++++++++-----
|
||||
1 file changed, 30 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
|
||||
index f3fc682..6a716d6 100644
|
||||
--- a/dlls/advapi32/tests/security.c
|
||||
+++ b/dlls/advapi32/tests/security.c
|
||||
@@ -2514,19 +2514,21 @@ static void test_granted_access(HANDLE handle, ACCESS_MASK access,
|
||||
static void test_process_security(void)
|
||||
{
|
||||
BOOL res;
|
||||
+ PTOKEN_USER user;
|
||||
PTOKEN_OWNER owner;
|
||||
PTOKEN_PRIMARY_GROUP group;
|
||||
- PSID AdminSid = NULL, UsersSid = NULL;
|
||||
+ PSID AdminSid = NULL, UsersSid = NULL, UserSid = NULL;
|
||||
PACL Acl = NULL, ThreadAcl = NULL;
|
||||
SECURITY_DESCRIPTOR *SecurityDescriptor = NULL, *ThreadSecurityDescriptor = NULL;
|
||||
- char buffer[MAX_PATH];
|
||||
+ char buffer[MAX_PATH], account[MAX_PATH], domain[MAX_PATH];
|
||||
PROCESS_INFORMATION info;
|
||||
STARTUPINFOA startup;
|
||||
SECURITY_ATTRIBUTES psa, tsa;
|
||||
HANDLE token, event;
|
||||
- DWORD size;
|
||||
+ DWORD size, acc_size, dom_size, ret;
|
||||
SID_IDENTIFIER_AUTHORITY SIDAuthWorld = { SECURITY_WORLD_SID_AUTHORITY };
|
||||
PSID EveryoneSid = NULL;
|
||||
+ SID_NAME_USE use;
|
||||
|
||||
Acl = HeapAlloc(GetProcessHeap(), 0, 256);
|
||||
res = InitializeAcl(Acl, 256, ACL_REVISION);
|
||||
@@ -2558,7 +2560,8 @@ static void test_process_security(void)
|
||||
owner = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
res = GetTokenInformation( token, TokenOwner, owner, size, &size );
|
||||
ok(res, "GetTokenInformation failed with error %d\n", GetLastError());
|
||||
- AdminSid = ((TOKEN_OWNER*)owner)->Owner;
|
||||
+ AdminSid = owner->Owner;
|
||||
+ test_sid_str(AdminSid);
|
||||
|
||||
res = GetTokenInformation( token, TokenPrimaryGroup, NULL, 0, &size );
|
||||
ok(!res, "Expected failure, got %d\n", res);
|
||||
@@ -2568,13 +2571,34 @@ static void test_process_security(void)
|
||||
group = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
res = GetTokenInformation( token, TokenPrimaryGroup, group, size, &size );
|
||||
ok(res, "GetTokenInformation failed with error %d\n", GetLastError());
|
||||
- UsersSid = ((TOKEN_PRIMARY_GROUP*)group)->PrimaryGroup;
|
||||
+ UsersSid = group->PrimaryGroup;
|
||||
+ test_sid_str(UsersSid);
|
||||
+
|
||||
+ acc_size = sizeof(account);
|
||||
+ dom_size = sizeof(domain);
|
||||
+ ret = LookupAccountSidA( NULL, UsersSid, account, &acc_size, domain, &dom_size, &use );
|
||||
+ ok(ret, "LookupAccountSid failed with %d\n", ret);
|
||||
+ todo_wine ok(use == SidTypeGroup, "expect SidTypeGroup, got %d\n", use);
|
||||
+ todo_wine ok(!strcmp(account, "None"), "expect None, got %s\n", account);
|
||||
+
|
||||
+ res = GetTokenInformation( token, TokenUser, NULL, 0, &size );
|
||||
+ ok(!res, "Expected failure, got %d\n", res);
|
||||
+ ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
|
||||
+ "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
|
||||
+
|
||||
+ user = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
+ res = GetTokenInformation( token, TokenUser, user, size, &size );
|
||||
+ ok(res, "GetTokenInformation failed with error %d\n", GetLastError());
|
||||
+ UserSid = user->User.Sid;
|
||||
+ test_sid_str(UserSid);
|
||||
+ todo_wine ok(EqualPrefixSid(UsersSid, UserSid), "TokenPrimaryGroup Sid and TokenUser Sid don't match.\n");
|
||||
|
||||
CloseHandle( token );
|
||||
if (!res)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, group);
|
||||
HeapFree(GetProcessHeap(), 0, owner);
|
||||
+ HeapFree(GetProcessHeap(), 0, user);
|
||||
HeapFree(GetProcessHeap(), 0, Acl);
|
||||
return;
|
||||
}
|
||||
@@ -2681,6 +2705,7 @@ static void test_process_security(void)
|
||||
CloseHandle( event );
|
||||
HeapFree(GetProcessHeap(), 0, group);
|
||||
HeapFree(GetProcessHeap(), 0, owner);
|
||||
+ HeapFree(GetProcessHeap(), 0, user);
|
||||
HeapFree(GetProcessHeap(), 0, Acl);
|
||||
HeapFree(GetProcessHeap(), 0, SecurityDescriptor);
|
||||
HeapFree(GetProcessHeap(), 0, ThreadAcl);
|
||||
--
|
||||
2.3.5
|
||||
|
@@ -0,0 +1,38 @@
|
||||
From 5487b4720e24aaa7a10719fc36bc23c851a48a9b Mon Sep 17 00:00:00 2001
|
||||
From: Qian Hong <qhong@codeweavers.com>
|
||||
Date: Tue, 28 Apr 2015 22:35:26 +0800
|
||||
Subject: server: Create primary group using DOMAIN_GROUP_RID_USERS.
|
||||
|
||||
---
|
||||
dlls/advapi32/tests/security.c | 2 +-
|
||||
server/token.c | 1 +
|
||||
2 files changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
|
||||
index 25b34ba4..573119f 100644
|
||||
--- a/dlls/advapi32/tests/security.c
|
||||
+++ b/dlls/advapi32/tests/security.c
|
||||
@@ -2591,7 +2591,7 @@ static void test_process_security(void)
|
||||
ok(res, "GetTokenInformation failed with error %d\n", GetLastError());
|
||||
UserSid = user->User.Sid;
|
||||
test_sid_str(UserSid);
|
||||
- todo_wine ok(EqualPrefixSid(UsersSid, UserSid), "TokenPrimaryGroup Sid and TokenUser Sid don't match.\n");
|
||||
+ ok(EqualPrefixSid(UsersSid, UserSid), "TokenPrimaryGroup Sid and TokenUser Sid don't match.\n");
|
||||
|
||||
CloseHandle( token );
|
||||
if (!res)
|
||||
diff --git a/server/token.c b/server/token.c
|
||||
index e57cbc6..be8c53b 100644
|
||||
--- a/server/token.c
|
||||
+++ b/server/token.c
|
||||
@@ -695,6 +695,7 @@ struct token *token_create_admin( void )
|
||||
{ security_local_sid, SE_GROUP_ENABLED|SE_GROUP_ENABLED_BY_DEFAULT|SE_GROUP_MANDATORY },
|
||||
{ security_interactive_sid, SE_GROUP_ENABLED|SE_GROUP_ENABLED_BY_DEFAULT|SE_GROUP_MANDATORY },
|
||||
{ security_authenticated_user_sid, SE_GROUP_ENABLED|SE_GROUP_ENABLED_BY_DEFAULT|SE_GROUP_MANDATORY },
|
||||
+ { security_domain_users_sid, SE_GROUP_ENABLED|SE_GROUP_ENABLED_BY_DEFAULT|SE_GROUP_MANDATORY|SE_GROUP_OWNER },
|
||||
{ alias_admins_sid, SE_GROUP_ENABLED|SE_GROUP_ENABLED_BY_DEFAULT|SE_GROUP_MANDATORY|SE_GROUP_OWNER },
|
||||
{ alias_users_sid, SE_GROUP_ENABLED|SE_GROUP_ENABLED_BY_DEFAULT|SE_GROUP_MANDATORY },
|
||||
{ logon_sid, SE_GROUP_ENABLED|SE_GROUP_ENABLED_BY_DEFAULT|SE_GROUP_MANDATORY|SE_GROUP_LOGON_ID },
|
||||
--
|
||||
2.3.5
|
||||
|
@@ -0,0 +1,53 @@
|
||||
From 83517396c266c2de290670128d678770f5d79cc9 Mon Sep 17 00:00:00 2001
|
||||
From: Qian Hong <qhong@codeweavers.com>
|
||||
Date: Tue, 28 Apr 2015 23:00:08 +0800
|
||||
Subject: advapi32: Fix name and use of DOMAIN_GROUP_RID_USERS.
|
||||
|
||||
---
|
||||
dlls/advapi32/security.c | 7 +++++--
|
||||
dlls/advapi32/tests/security.c | 4 ++--
|
||||
2 files changed, 7 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
|
||||
index d27b2e7..2362dd5 100644
|
||||
--- a/dlls/advapi32/security.c
|
||||
+++ b/dlls/advapi32/security.c
|
||||
@@ -191,7 +191,7 @@ static const WCHAR Domain_Admins[] = { 'D','o','m','a','i','n',' ','A','d','m','
|
||||
static const WCHAR Domain_Computers[] = { 'D','o','m','a','i','n',' ','C','o','m','p','u','t','e','r','s',0 };
|
||||
static const WCHAR Domain_Controllers[] = { 'D','o','m','a','i','n',' ','C','o','n','t','r','o','l','l','e','r','s',0 };
|
||||
static const WCHAR Domain_Guests[] = { 'D','o','m','a','i','n',' ','G','u','e','s','t','s',0 };
|
||||
-static const WCHAR Domain_Users[] = { 'D','o','m','a','i','n',' ','U','s','e','r','s',0 };
|
||||
+static const WCHAR None[] = { 'N','o','n','e',0 };
|
||||
static const WCHAR Enterprise_Admins[] = { 'E','n','t','e','r','p','r','i','s','e',' ','A','d','m','i','n','s',0 };
|
||||
static const WCHAR ENTERPRISE_DOMAIN_CONTROLLERS[] = { 'E','N','T','E','R','P','R','I','S','E',' ','D','O','M','A','I','N',' ','C','O','N','T','R','O','L','L','E','R','S',0 };
|
||||
static const WCHAR Everyone[] = { 'E','v','e','r','y','o','n','e',0 };
|
||||
@@ -2206,7 +2206,10 @@ LookupAccountSidW(
|
||||
ac = Domain_Admins;
|
||||
break;
|
||||
case DOMAIN_GROUP_RID_USERS:
|
||||
- ac = Domain_Users;
|
||||
+ /* MSDN says the name of DOMAIN_GROUP_RID_USERS is Domain Users,
|
||||
+ * tests show that MSDN seems to be wrong. */
|
||||
+ ac = None;
|
||||
+ use = 2;
|
||||
break;
|
||||
case DOMAIN_GROUP_RID_GUESTS:
|
||||
ac = Domain_Guests;
|
||||
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
|
||||
index 573119f..490ce26 100644
|
||||
--- a/dlls/advapi32/tests/security.c
|
||||
+++ b/dlls/advapi32/tests/security.c
|
||||
@@ -2578,8 +2578,8 @@ static void test_process_security(void)
|
||||
dom_size = sizeof(domain);
|
||||
ret = LookupAccountSidA( NULL, UsersSid, account, &acc_size, domain, &dom_size, &use );
|
||||
ok(ret, "LookupAccountSid failed with %d\n", ret);
|
||||
- todo_wine ok(use == SidTypeGroup, "expect SidTypeGroup, got %d\n", use);
|
||||
- todo_wine ok(!strcmp(account, "None"), "expect None, got %s\n", account);
|
||||
+ ok(use == SidTypeGroup, "expect SidTypeGroup, got %d\n", use);
|
||||
+ ok(!strcmp(account, "None"), "expect None, got %s\n", account);
|
||||
|
||||
res = GetTokenInformation( token, TokenUser, NULL, 0, &size );
|
||||
ok(!res, "Expected failure, got %d\n", res);
|
||||
--
|
||||
2.3.5
|
||||
|
2
patches/advapi32-LsaLookupSids/definition
Normal file
2
patches/advapi32-LsaLookupSids/definition
Normal file
@@ -0,0 +1,2 @@
|
||||
Depends: server-Misc_ACL
|
||||
Depends: server-CreateProcess_ACLs
|
@@ -0,0 +1,28 @@
|
||||
From 0f3d7e07b53bd1a7c8735bb2c0fa3da0b75dcb96 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Fri, 8 May 2015 21:53:30 +0200
|
||||
Subject: advapi32: Fix error handling in OpenSCManagerW.
|
||||
|
||||
---
|
||||
dlls/advapi32/service.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c
|
||||
index 0eb0a47..111009d 100644
|
||||
--- a/dlls/advapi32/service.c
|
||||
+++ b/dlls/advapi32/service.c
|
||||
@@ -868,8 +868,9 @@ SC_HANDLE WINAPI OpenSCManagerW( LPCWSTR lpMachineName, LPCWSTR lpDatabaseName,
|
||||
DWORD r;
|
||||
|
||||
r = SERV_OpenSCManagerW(lpMachineName, lpDatabaseName, dwDesiredAccess, &handle);
|
||||
- if (r!=ERROR_SUCCESS)
|
||||
- SetLastError(r);
|
||||
+
|
||||
+ /* last error could still be ERROR_MORE_DATA, so set error unconditionally */
|
||||
+ SetLastError(r);
|
||||
return handle;
|
||||
}
|
||||
|
||||
--
|
||||
2.4.0
|
||||
|
1
patches/advapi32-OpenSCManagerW/definition
Normal file
1
patches/advapi32-OpenSCManagerW/definition
Normal file
@@ -0,0 +1 @@
|
||||
Category: stable
|
@@ -0,0 +1,100 @@
|
||||
From d36d6e9c52001d6b2fd7ff5be98cfc1aca650694 Mon Sep 17 00:00:00 2001
|
||||
From: Qian Hong <qhong@codeweavers.com>
|
||||
Date: Wed, 16 Apr 2014 14:45:53 +0800
|
||||
Subject: atl: Added stub AtlIPersistPropertyBag_Save.
|
||||
|
||||
---
|
||||
dlls/atl/atl.c | 7 +++++++
|
||||
dlls/atl/atl.spec | 2 +-
|
||||
dlls/atl100/atl100.spec | 2 +-
|
||||
dlls/atl110/atl110.spec | 2 +-
|
||||
dlls/atl80/atl80.spec | 2 +-
|
||||
dlls/atl90/atl90.spec | 2 +-
|
||||
6 files changed, 12 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/dlls/atl/atl.c b/dlls/atl/atl.c
|
||||
index 795ca9b..84c81f9 100644
|
||||
--- a/dlls/atl/atl.c
|
||||
+++ b/dlls/atl/atl.c
|
||||
@@ -285,6 +285,13 @@ HRESULT WINAPI AtlIPersistPropertyBag_Load(LPPROPERTYBAG pPropBag, LPERRORLOG pE
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
+HRESULT WINAPI AtlIPersistPropertyBag_Save(LPPROPERTYBAG pPropBag, int unknown1, int unknown2,
|
||||
+ ATL_PROPMAP_ENTRY *pMap, void *pThis, IUnknown *pUnk)
|
||||
+{
|
||||
+ FIXME("(%p, %x, %x, %p, %p, %p)\n", pPropBag, unknown1, unknown2, pMap, pThis, pUnk);
|
||||
+
|
||||
+ return S_OK;
|
||||
+}
|
||||
/***********************************************************************
|
||||
* AtlModuleAddTermFunc [atl100.@]
|
||||
*/
|
||||
diff --git a/dlls/atl/atl.spec b/dlls/atl/atl.spec
|
||||
index aa0f44b..466f07a 100644
|
||||
--- a/dlls/atl/atl.spec
|
||||
+++ b/dlls/atl/atl.spec
|
||||
@@ -44,7 +44,7 @@
|
||||
50 stdcall AtlIPersistStreamInit_Load(ptr ptr ptr ptr)
|
||||
51 stdcall AtlIPersistStreamInit_Save(ptr long ptr ptr ptr)
|
||||
52 stdcall AtlIPersistPropertyBag_Load(ptr ptr ptr ptr ptr)
|
||||
-53 stub AtlIPersistPropertyBag_Save
|
||||
+53 stdcall AtlIPersistPropertyBag_Save(ptr long long ptr ptr)
|
||||
54 stdcall AtlGetObjectSourceInterface(ptr ptr ptr ptr ptr)
|
||||
55 stub AtlModuleUnRegisterTypeLib
|
||||
56 stdcall AtlModuleLoadTypeLib(ptr wstr ptr ptr)
|
||||
diff --git a/dlls/atl100/atl100.spec b/dlls/atl100/atl100.spec
|
||||
index 25fad3d..80b4b16 100644
|
||||
--- a/dlls/atl100/atl100.spec
|
||||
+++ b/dlls/atl100/atl100.spec
|
||||
@@ -36,7 +36,7 @@
|
||||
50 stdcall AtlIPersistStreamInit_Load(ptr ptr ptr ptr)
|
||||
51 stdcall AtlIPersistStreamInit_Save(ptr long ptr ptr ptr)
|
||||
52 stdcall AtlIPersistPropertyBag_Load(ptr ptr ptr ptr ptr)
|
||||
-53 stub AtlIPersistPropertyBag_Save
|
||||
+53 stdcall AtlIPersistPropertyBag_Save(ptr long long ptr ptr ptr)
|
||||
54 stdcall AtlGetObjectSourceInterface(ptr ptr ptr ptr ptr)
|
||||
56 stdcall AtlLoadTypeLib(long wstr ptr ptr)
|
||||
58 stdcall AtlModuleAddTermFunc(ptr ptr long)
|
||||
diff --git a/dlls/atl110/atl110.spec b/dlls/atl110/atl110.spec
|
||||
index 25fad3d..80b4b16 100644
|
||||
--- a/dlls/atl110/atl110.spec
|
||||
+++ b/dlls/atl110/atl110.spec
|
||||
@@ -36,7 +36,7 @@
|
||||
50 stdcall AtlIPersistStreamInit_Load(ptr ptr ptr ptr)
|
||||
51 stdcall AtlIPersistStreamInit_Save(ptr long ptr ptr ptr)
|
||||
52 stdcall AtlIPersistPropertyBag_Load(ptr ptr ptr ptr ptr)
|
||||
-53 stub AtlIPersistPropertyBag_Save
|
||||
+53 stdcall AtlIPersistPropertyBag_Save(ptr long long ptr ptr ptr)
|
||||
54 stdcall AtlGetObjectSourceInterface(ptr ptr ptr ptr ptr)
|
||||
56 stdcall AtlLoadTypeLib(long wstr ptr ptr)
|
||||
58 stdcall AtlModuleAddTermFunc(ptr ptr long)
|
||||
diff --git a/dlls/atl80/atl80.spec b/dlls/atl80/atl80.spec
|
||||
index f313944..e82fba0 100644
|
||||
--- a/dlls/atl80/atl80.spec
|
||||
+++ b/dlls/atl80/atl80.spec
|
||||
@@ -38,7 +38,7 @@
|
||||
50 stdcall AtlIPersistStreamInit_Load(ptr ptr ptr ptr)
|
||||
51 stdcall AtlIPersistStreamInit_Save(ptr long ptr ptr ptr)
|
||||
52 stdcall AtlIPersistPropertyBag_Load(ptr ptr ptr ptr ptr)
|
||||
-53 stub AtlIPersistPropertyBag_Save
|
||||
+53 stdcall AtlIPersistPropertyBag_Save(ptr long long ptr ptr ptr)
|
||||
54 stdcall AtlGetObjectSourceInterface(ptr ptr ptr ptr ptr)
|
||||
55 stub AtlUnRegisterTypeLib
|
||||
56 stdcall AtlLoadTypeLib(long wstr ptr ptr)
|
||||
diff --git a/dlls/atl90/atl90.spec b/dlls/atl90/atl90.spec
|
||||
index 25fad3d..80b4b16 100644
|
||||
--- a/dlls/atl90/atl90.spec
|
||||
+++ b/dlls/atl90/atl90.spec
|
||||
@@ -36,7 +36,7 @@
|
||||
50 stdcall AtlIPersistStreamInit_Load(ptr ptr ptr ptr)
|
||||
51 stdcall AtlIPersistStreamInit_Save(ptr long ptr ptr ptr)
|
||||
52 stdcall AtlIPersistPropertyBag_Load(ptr ptr ptr ptr ptr)
|
||||
-53 stub AtlIPersistPropertyBag_Save
|
||||
+53 stdcall AtlIPersistPropertyBag_Save(ptr long long ptr ptr ptr)
|
||||
54 stdcall AtlGetObjectSourceInterface(ptr ptr ptr ptr ptr)
|
||||
56 stdcall AtlLoadTypeLib(long wstr ptr ptr)
|
||||
58 stdcall AtlModuleAddTermFunc(ptr ptr long)
|
||||
--
|
||||
2.3.7
|
||||
|
2
patches/atl-AtlIPersistPropertyBag_Save/definition
Normal file
2
patches/atl-AtlIPersistPropertyBag_Save/definition
Normal file
@@ -0,0 +1,2 @@
|
||||
Fixes: [33888] Add stub for atl80.AtlIPersistPropertyBag_Save
|
||||
Category: stable
|
@@ -0,0 +1,123 @@
|
||||
From 49050987e49d61420d2d46dc167551ff439a537a Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Wed, 13 May 2015 01:31:35 +0200
|
||||
Subject: browseui: Add IEnumString stub interface for ACLShellSource.
|
||||
|
||||
---
|
||||
dlls/browseui/aclsource.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 72 insertions(+)
|
||||
|
||||
diff --git a/dlls/browseui/aclsource.c b/dlls/browseui/aclsource.c
|
||||
index 07033cc..bb98b33 100644
|
||||
--- a/dlls/browseui/aclsource.c
|
||||
+++ b/dlls/browseui/aclsource.c
|
||||
@@ -44,6 +44,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(browseui);
|
||||
|
||||
typedef struct tagACLMulti {
|
||||
IACList2 IACList2_iface;
|
||||
+ IEnumString IEnumString_iface;
|
||||
LONG refCount;
|
||||
DWORD dwOptions;
|
||||
} ACLShellSource;
|
||||
@@ -53,6 +54,11 @@ static inline ACLShellSource *impl_from_IACList2(IACList2 *iface)
|
||||
return CONTAINING_RECORD(iface, ACLShellSource, IACList2_iface);
|
||||
}
|
||||
|
||||
+static inline ACLShellSource *impl_from_IEnumString(IEnumString *iface)
|
||||
+{
|
||||
+ return CONTAINING_RECORD(iface, ACLShellSource, IEnumString_iface);
|
||||
+}
|
||||
+
|
||||
static void ACLShellSource_Destructor(ACLShellSource *This)
|
||||
{
|
||||
TRACE("destroying %p\n", This);
|
||||
@@ -69,6 +75,10 @@ static HRESULT WINAPI ACLShellSource_QueryInterface(IACList2 *iface, REFIID iid,
|
||||
{
|
||||
*ppvOut = &This->IACList2_iface;
|
||||
}
|
||||
+ else if(IsEqualIID(iid, &IID_IEnumString))
|
||||
+ {
|
||||
+ *ppvOut = &This->IEnumString_iface;
|
||||
+ }
|
||||
|
||||
if (*ppvOut)
|
||||
{
|
||||
@@ -133,6 +143,67 @@ static const IACList2Vtbl ACLMulti_ACList2Vtbl =
|
||||
ACLShellSource_GetOptions
|
||||
};
|
||||
|
||||
+static HRESULT WINAPI ACLShellSource_IEnumString_QueryInterface(IEnumString *iface, REFIID iid, LPVOID *ppvOut)
|
||||
+{
|
||||
+ ACLShellSource *This = impl_from_IEnumString(iface);
|
||||
+ return ACLShellSource_QueryInterface(&This->IACList2_iface, iid, ppvOut);
|
||||
+}
|
||||
+
|
||||
+static ULONG WINAPI ACLShellSource_IEnumString_AddRef(IEnumString *iface)
|
||||
+{
|
||||
+ ACLShellSource *This = impl_from_IEnumString(iface);
|
||||
+ return ACLShellSource_AddRef(&This->IACList2_iface);
|
||||
+}
|
||||
+
|
||||
+static ULONG WINAPI ACLShellSource_IEnumString_Release(IEnumString *iface)
|
||||
+{
|
||||
+ ACLShellSource *This = impl_from_IEnumString(iface);
|
||||
+ return ACLShellSource_Release(&This->IACList2_iface);
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI ACLShellSource_IEnumString_Next(IEnumString *iface, ULONG celt, LPOLESTR *rgelt, ULONG *pceltFetched)
|
||||
+{
|
||||
+ FIXME("(%p, %d, %p, %p): stub\n", iface, celt, rgelt, pceltFetched);
|
||||
+
|
||||
+ if (celt)
|
||||
+ *rgelt = NULL;
|
||||
+ if (pceltFetched)
|
||||
+ *pceltFetched = 0;
|
||||
+
|
||||
+ return S_FALSE;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI ACLShellSource_IEnumString_Reset(IEnumString *iface)
|
||||
+{
|
||||
+ FIXME("(%p): stub\n", iface);
|
||||
+ return S_OK;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI ACLShellSource_IEnumString_Skip(IEnumString *iface, ULONG celt)
|
||||
+{
|
||||
+ FIXME("(%p, %u): stub\n", iface, celt);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI ACLShellSource_IEnumString_Clone(IEnumString *iface, IEnumString **ppOut)
|
||||
+{
|
||||
+ FIXME("(%p, %p): stub\n", iface, ppOut);
|
||||
+ *ppOut = NULL;
|
||||
+ return E_OUTOFMEMORY;
|
||||
+}
|
||||
+
|
||||
+static const IEnumStringVtbl ACLShellSource_EnumStringVtbl =
|
||||
+{
|
||||
+ ACLShellSource_IEnumString_QueryInterface,
|
||||
+ ACLShellSource_IEnumString_AddRef,
|
||||
+ ACLShellSource_IEnumString_Release,
|
||||
+
|
||||
+ ACLShellSource_IEnumString_Next,
|
||||
+ ACLShellSource_IEnumString_Skip,
|
||||
+ ACLShellSource_IEnumString_Reset,
|
||||
+ ACLShellSource_IEnumString_Clone
|
||||
+};
|
||||
+
|
||||
HRESULT ACLShellSource_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
|
||||
{
|
||||
ACLShellSource *This;
|
||||
@@ -144,6 +215,7 @@ HRESULT ACLShellSource_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
This->IACList2_iface.lpVtbl = &ACLMulti_ACList2Vtbl;
|
||||
+ This->IEnumString_iface.lpVtbl = &ACLShellSource_EnumStringVtbl;
|
||||
This->refCount = 1;
|
||||
|
||||
TRACE("returning %p\n", This);
|
||||
--
|
||||
2.4.0
|
||||
|
1
patches/browseui-ACLShell_IEnumString/definition
Normal file
1
patches/browseui-ACLShell_IEnumString/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: [18019] Add IEnumString stub interface for ACLShellSource
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user