a hotfix for the recent release of Persona 5 Royal.
-- v10: kernel32: Implement various transacted file APIs
From: Etaash Mathamsetty etaash.mathamsetty@gmail.com
--- dlls/kernel32/kernel32.spec | 22 ++++--- dlls/kernel32/path.c | 123 ++++++++++++++++++++++++++++++++++++ 2 files changed, 135 insertions(+), 10 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 89c2511c3cf..2a8cb106e32 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -272,8 +272,8 @@ @ stdcall -import CreateDirectoryA(str ptr) @ stdcall CreateDirectoryExA(str str ptr) @ stdcall -import CreateDirectoryExW(wstr wstr ptr) -# @ stub CreateDirectoryTransactedA -# @ stub CreateDirectoryTransactedW +@ stdcall CreateDirectoryTransactedA(str str ptr ptr) +@ stdcall CreateDirectoryTransactedW(wstr wstr ptr ptr) @ stdcall -import CreateDirectoryW(wstr ptr) @ stdcall -import CreateEventA(ptr long long str) @ stdcall -import CreateEventExA(ptr str long long) @@ -283,12 +283,14 @@ @ stdcall -import CreateFiberEx(long long long ptr ptr) @ stdcall -import CreateFile2(wstr long long long ptr) @ stdcall -import CreateFileA(str long long ptr long long long) +@ stdcall CreateFileTransactedA(str long long ptr long long long ptr ptr ptr) @ stdcall CreateFileMappingA(long ptr long long long str) # @ stub CreateFileMappingNumaA @ stdcall CreateFileMappingFromApp(long ptr long int64 wstr) kernelbase.CreateFileMappingFromApp @ stdcall -import CreateFileMappingNumaW(long ptr long long long wstr long) @ stdcall -import CreateFileMappingW(long ptr long long long wstr) @ stdcall -import CreateFileW(wstr long long ptr long long long) +@ stdcall CreateFileTransactedW(wstr long long ptr long long long ptr ptr ptr) @ stdcall -import CreateHardLinkA(str str ptr) @ stdcall CreateHardLinkTransactedA(str str ptr ptr) @ stdcall CreateHardLinkTransactedW(wstr wstr ptr ptr) @@ -365,8 +367,8 @@ @ stdcall DeleteCriticalSection(ptr) NTDLL.RtlDeleteCriticalSection @ stdcall -import DeleteFiber(ptr) @ stdcall -import DeleteFileA(str) -# @ stub DeleteFileTransactedA -# @ stub DeleteFileTransactedW +@ stdcall DeleteFileTransactedA(str ptr) +@ stdcall DeleteFileTransactedW(wstr ptr) @ stdcall -import DeleteFileW(wstr) @ stdcall -import DeleteProcThreadAttributeList(ptr) # @ stub DisableThreadProfiling @@ -487,8 +489,8 @@ @ stdcall -import FindFirstFileExW(wstr long ptr long ptr long) # @ stub FindFirstFileNameTransactedW # @ stub FindFirstFileNameW -# @ stub FindFirstFileTransactedA -# @ stub FindFirstFileTransactedW +@ stdcall FindFirstFileTransactedA(str long ptr long ptr long ptr) +@ stdcall FindFirstFileTransactedW(wstr long ptr long ptr long ptr) @ stdcall -import FindFirstFileW(wstr ptr) # @ stub FindFirstStreamTransactedW @ stdcall -import FindFirstStreamW(wstr long ptr long) @@ -676,8 +678,8 @@ @ stdcall -import GetFileAttributesA(str) @ stdcall -import GetFileAttributesExA(str long ptr) @ stdcall -import GetFileAttributesExW(wstr long ptr) -# @ stub GetFileAttributesTransactedA -# @ stub GetFileAttributesTransactedW +@ stdcall GetFileAttributesTransactedA(str long ptr ptr) +@ stdcall GetFileAttributesTransactedW(wstr long ptr ptr) @ stdcall -import GetFileAttributesW(wstr) # @ stub GetFileBandwidthReservation @ stdcall -import GetFileInformationByHandle(long ptr) @@ -1289,8 +1291,8 @@ @ stdcall -import ReplaceFile(wstr wstr wstr long ptr ptr) ReplaceFileW @ stdcall ReplaceFileA(str str str long ptr ptr) @ stdcall -import ReplaceFileW(wstr wstr wstr long ptr ptr) -# @ stub RemoveDirectoryTransactedA -# @ stub RemoveDirectoryTransactedW +@ stdcall RemoveDirectoryTransactedA(str ptr) +@ stdcall RemoveDirectoryTransactedW(wstr ptr) @ stdcall -import RemoveDllDirectory(ptr) # @ stub RemoveSecureMemoryCacheCallback # @ stub ReplacePartitionUnit diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c index 2dd3eac3c26..f916606ef13 100644 --- a/dlls/kernel32/path.c +++ b/dlls/kernel32/path.c @@ -158,6 +158,129 @@ BOOL WINAPI MoveFileTransactedW(const WCHAR *source, const WCHAR *dest, LPPROGRE return FALSE; }
+/************************************************************************* + * CreateFileTransactedA (KERNEL32.@) + */ +HANDLE WINAPI DECLSPEC_HOTPATCH CreateFileTransactedA( LPCSTR name, DWORD access, DWORD sharing, + LPSECURITY_ATTRIBUTES sa, DWORD creation, + DWORD attributes, HANDLE template, + HANDLE transaction, PUSHORT pusMiniVersion, + PVOID pExtendedParameter ) +{ + FIXME( "(%s %lx %lx %p %lx %lx %p %p %p %p), semi-stub\n", debugstr_a(name), access, sharing, sa, + creation, attributes, template, transaction, pusMiniVersion, pExtendedParameter ); + + return CreateFileA( name, access, sharing, sa, creation, attributes, template ); +} + +/************************************************************************* + * CreateFileTransactedW (KERNEL32.@) + */ +HANDLE WINAPI DECLSPEC_HOTPATCH CreateFileTransactedW( LPCWSTR name, DWORD access, DWORD sharing, + LPSECURITY_ATTRIBUTES sa, DWORD creation, + DWORD attributes, HANDLE template, HANDLE transaction, + PUSHORT pusMiniVersion, PVOID pExtendedParameter ) +{ + FIXME( "(%s %lx %lx %p %lx %lx %p %p %p %p), semi-stub\n", debugstr_w(name), access, sharing, sa, + creation, attributes, template, transaction, pusMiniVersion, pExtendedParameter ); + + return CreateFileW( name, access, sharing, sa, creation, attributes, template ); +} + +/*********************************************************************** + * CreateDirectoryTransactedA (KERNEL32.@) + */ +BOOL WINAPI DECLSPEC_HOTPATCH CreateDirectoryTransactedA(LPCSTR template, LPCSTR path, LPSECURITY_ATTRIBUTES sa, HANDLE hTransaction) +{ + FIXME("(%s %s %p %p), semi-stub\n", debugstr_a(template), debugstr_a(path), sa, hTransaction); + return CreateDirectoryExA(template, path, sa); +} + +/*********************************************************************** + * CreateDirectoryTransactedW (KERNEL32.@) + */ +BOOL WINAPI DECLSPEC_HOTPATCH CreateDirectoryTransactedW(LPCWSTR template, LPCWSTR path, LPSECURITY_ATTRIBUTES sa, HANDLE hTransaction) +{ + FIXME("(%s %s %p %p), semi-stub\n", debugstr_w(template), debugstr_w(path), sa, hTransaction); + return CreateDirectoryExW(template, path, sa); +} + +/*********************************************************************** + * DeleteFileTransactedA (KERNEL32.@) + */ +BOOL WINAPI DECLSPEC_HOTPATCH DeleteFileTransactedA(LPCSTR path, HANDLE hTransaction) +{ + FIXME("(%s %p): semi-stub\n", debugstr_a(path), hTransaction); + return DeleteFileA(path); +} + +/*********************************************************************** + * DeleteFileTransactedW (KERNEL32.@) + */ +BOOL WINAPI DECLSPEC_HOTPATCH DeleteFileTransactedW(LPCWSTR path, HANDLE hTransaction) +{ + FIXME("(%s %p): semi-stub\n", debugstr_w(path), hTransaction); + return DeleteFileW(path); +} + +/****************************************************************************** + * FindFirstFileTransactedA (KERNEL32.@) + */ +HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileTransactedA(LPCSTR filename, FINDEX_INFO_LEVELS level, + LPVOID data, FINDEX_SEARCH_OPS search_op, + LPVOID filter, DWORD flags, HANDLE hTransaction) +{ + FIXME( "(%s %d %p %d %p %lx %p): semi-stub\n", debugstr_a(filename), level, data, search_op, filter, flags, hTransaction ); + return FindFirstFileExA(filename, level, data, search_op, filter, flags); +} + +/****************************************************************************** + * FindFirstFileTransactedW (KERNEL32.@) + */ +HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileTransactedW(LPCWSTR filename, FINDEX_INFO_LEVELS level, + LPVOID data, FINDEX_SEARCH_OPS search_op, + LPVOID filter, DWORD flags, HANDLE hTransaction) +{ + FIXME( "(%s %d %p %d %p %lx %p): semi-stub\n", debugstr_w(filename), level, data, search_op, filter, flags, hTransaction ); + return FindFirstFileExW(filename, level, data, search_op, filter, flags); +} + +/************************************************************************** + * GetFileAttributesTransactedA (KERNEL32.@) + */ +DWORD WINAPI DECLSPEC_HOTPATCH GetFileAttributesTransactedA(LPCSTR name, GET_FILEEX_INFO_LEVELS level, LPVOID ptr, HANDLE hTransaction) +{ + FIXME("(%s %p): semi-stub\n", debugstr_a(name), hTransaction); + return GetFileAttributesExA(name, level, ptr); +} + +/************************************************************************** + * GetFileAttributesTransactedW (KERNEL32.@) + */ +DWORD WINAPI DECLSPEC_HOTPATCH GetFileAttributesTransactedW(LPCWSTR name, GET_FILEEX_INFO_LEVELS level, void *ptr, HANDLE hTransaction) +{ + FIXME("(%s %p): semi-stub\n", debugstr_w(name), hTransaction); + return GetFileAttributesExW(name, level, ptr); +} + +/*********************************************************************** + * RemoveDirectoryTransactedA (KERNEL32.@) + */ +BOOL WINAPI DECLSPEC_HOTPATCH RemoveDirectoryTransactedA( LPCSTR path, HANDLE hTransaction ) +{ + FIXME("(%s %p), semi-stub\n", debugstr_a(path), hTransaction); + return RemoveDirectoryA(path); +} + +/*********************************************************************** + * RemoveDirectoryTransactedW (KERNEL32.@) + */ +BOOL WINAPI DECLSPEC_HOTPATCH RemoveDirectoryTransactedW( LPCWSTR path, HANDLE hTransaction ) +{ + FIXME("(%s %p), semi-stub\n", debugstr_w(path), hTransaction); + return RemoveDirectoryW(path); +} + /************************************************************************** * MoveFileWithProgressA (KERNEL32.@) */
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=126480
Your paranoid android.
=== debian11 (32 bit report) ===
d3d8: stateblock: Timeout visual: Timeout
d3d9: d3d9ex: Timeout device: Timeout stateblock: Timeout visual: Timeout
d3dcompiler_43: asm: Timeout blob: Timeout hlsl_d3d11: Timeout hlsl_d3d9: Timeout reflection: Timeout
d3dcompiler_46: asm: Timeout blob: Timeout hlsl_d3d11: Timeout hlsl_d3d9: Timeout reflection: Timeout
d3dcompiler_47: asm: Timeout blob: Timeout hlsl_d3d11: Timeout hlsl_d3d9: Timeout reflection: Timeout
d3drm: d3drm: Timeout vector: Timeout
Report validation errors: d3dx10: Timeout
=== debian11 (build log) ===
WineRunWineTest.pl:error: The task timed out
why is this still not MERGED yet ?