a hotfix for the recent release of Persona 5 Royal.
-- v12: kernel32: Add semi-stub for RemoveDirectoryTransactedA/W(). kernel32: Add semi-stub for GetFileAttributesTransactedA/W(). kernel32: Add semi-stub for FindFirstFileTransactedA/W(). kernel32: Add semi-stub for DeleteFileTransactedA/W(). kernel32: Add semi-stub for CreateDirectoryTransactedA/W(). kernel32: Add semi-stub for CreateFileTransactedA/W().
From: Etaash Mathamsetty etaash.mathamsetty@gmail.com
--- dlls/kernel32/kernel32.spec | 2 ++ dlls/kernel32/path.c | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 8068e45e5e5..935b927d11d 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -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) diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c index 028cf96d8cc..7a33bc9de1c 100644 --- a/dlls/kernel32/path.c +++ b/dlls/kernel32/path.c @@ -158,6 +158,33 @@ BOOL WINAPI MoveFileTransactedW(const WCHAR *source, const WCHAR *dest, LPPROGRE return MoveFileWithProgressW(source, dest, progress, data, flags); }
+/************************************************************************* + * 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); +} + /************************************************************************** * MoveFileWithProgressA (KERNEL32.@) */
From: Etaash Mathamsetty etaash.mathamsetty@gmail.com
--- dlls/kernel32/kernel32.spec | 4 ++-- dlls/kernel32/path.c | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 935b927d11d..22adad05752 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) diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c index 7a33bc9de1c..f8f42f56379 100644 --- a/dlls/kernel32/path.c +++ b/dlls/kernel32/path.c @@ -185,6 +185,24 @@ HANDLE WINAPI DECLSPEC_HOTPATCH CreateFileTransactedW( LPCWSTR name, DWORD acces 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); +} + /************************************************************************** * MoveFileWithProgressA (KERNEL32.@) */
From: Etaash Mathamsetty etaash.mathamsetty@gmail.com
--- dlls/kernel32/kernel32.spec | 4 ++-- dlls/kernel32/path.c | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 22adad05752..a00fbb46665 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -367,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 diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c index f8f42f56379..d554cf4f689 100644 --- a/dlls/kernel32/path.c +++ b/dlls/kernel32/path.c @@ -203,6 +203,24 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateDirectoryTransactedW(LPCWSTR template, LPCWS 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); +} + /************************************************************************** * MoveFileWithProgressA (KERNEL32.@) */
From: Etaash Mathamsetty etaash.mathamsetty@gmail.com
--- dlls/kernel32/kernel32.spec | 4 ++-- dlls/kernel32/path.c | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index a00fbb46665..5e1c89f345f 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -489,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) diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c index d554cf4f689..97f665a31c8 100644 --- a/dlls/kernel32/path.c +++ b/dlls/kernel32/path.c @@ -221,6 +221,28 @@ BOOL WINAPI DECLSPEC_HOTPATCH DeleteFileTransactedW(LPCWSTR path, HANDLE hTransa 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); +} + /************************************************************************** * MoveFileWithProgressA (KERNEL32.@) */
From: Etaash Mathamsetty etaash.mathamsetty@gmail.com
--- dlls/kernel32/kernel32.spec | 4 ++-- dlls/kernel32/path.c | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 5e1c89f345f..4c479649637 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -678,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) diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c index 97f665a31c8..2e52295d2ac 100644 --- a/dlls/kernel32/path.c +++ b/dlls/kernel32/path.c @@ -243,6 +243,25 @@ HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileTransactedW(LPCWSTR filename, FINDE return FindFirstFileExW(filename, level, data, search_op, filter, flags); }
+ +/************************************************************************** + * GetFileAttributesTransactedA (KERNEL32.@) + */ +DWORD WINAPI DECLSPEC_HOTPATCH GetFileAttributesTransactedA(LPCSTR name, GET_FILEEX_INFO_LEVELS level, void *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); +} + /************************************************************************** * MoveFileWithProgressA (KERNEL32.@) */
From: Etaash Mathamsetty etaash.mathamsetty@gmail.com
--- dlls/kernel32/kernel32.spec | 4 ++-- dlls/kernel32/path.c | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 4c479649637..e9c1623e445 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -1292,8 +1292,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 2e52295d2ac..90f7e514a40 100644 --- a/dlls/kernel32/path.c +++ b/dlls/kernel32/path.c @@ -262,6 +262,24 @@ DWORD WINAPI DECLSPEC_HOTPATCH GetFileAttributesTransactedW(LPCWSTR name, GET_FI 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.@) */
v2: Move everything to kernel32, these functions aren't present in kernelbase last time I checked, persona calls them using kernel32 anyways, so we should be fine. v3: Split the commit into multiple commits after months of procrastination.