From fd8fae105b68a2af131b070adea0bfcaf582ace3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Michael=20M=C3=BCller?= Date: Thu, 26 Feb 2015 06:08:58 +0100 Subject: [PATCH] kernel32: Improve stub for SetFileInformationByHandle. --- dlls/kernel32/file.c | 42 ++++++++++++++++++++++++++++++++++++++++-- dlls/kernel32/tests/file.c | 4 ---- include/winbase.h | 1 + 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/dlls/kernel32/file.c b/dlls/kernel32/file.c index 0b208a592e9..9cdcd8d8c79 100644 --- a/dlls/kernel32/file.c +++ b/dlls/kernel32/file.c @@ -1040,12 +1040,50 @@ BOOL WINAPI SetEndOfFile( HANDLE hFile ) return FALSE; } + +/*********************************************************************** + * SetFileInformationByHandle (KERNEL32.@) + */ BOOL WINAPI SetFileInformationByHandle( HANDLE file, FILE_INFO_BY_HANDLE_CLASS class, VOID *info, DWORD size ) { - FIXME("%p %u %p %u - stub\n", file, class, info, size); - return FALSE; + TRACE( "%p %u %p %u\n", file, class, info, size ); + + switch (class) + { + case FileBasicInfo: + case FileNameInfo: + case FileRenameInfo: + case FileDispositionInfo: + case FileAllocationInfo: + case FileEndOfFileInfo: + case FileStreamInfo: + case FileIdBothDirectoryInfo: + case FileIdBothDirectoryRestartInfo: + case FileIoPriorityHintInfo: + case FileFullDirectoryInfo: + case FileFullDirectoryRestartInfo: + case FileStorageInfo: + case FileAlignmentInfo: + case FileIdInfo: + case FileIdExtdDirectoryInfo: + case FileIdExtdDirectoryRestartInfo: + FIXME( "%p, %u, %p, %u\n", file, class, info, size ); + SetLastError( ERROR_CALL_NOT_IMPLEMENTED ); + return FALSE; + + case FileStandardInfo: + case FileCompressionInfo: + case FileAttributeTagInfo: + case FileRemoteProtocolInfo: + default: + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + + return TRUE; } + /*********************************************************************** * SetFilePointer (KERNEL32.@) */ diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c index 384dd8df9be..fb4cd9b26d1 100644 --- a/dlls/kernel32/tests/file.c +++ b/dlls/kernel32/tests/file.c @@ -4614,18 +4614,15 @@ static void test_SetFileInformationByHandle(void) /* invalid classes */ SetLastError(0xdeadbeef); ret = pSetFileInformationByHandle(file, FileStandardInfo, &stdinfo, sizeof(stdinfo)); -todo_wine ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, "got %d, error %d\n", ret, GetLastError()); memset(&compressinfo, 0, sizeof(compressinfo)); SetLastError(0xdeadbeef); ret = pSetFileInformationByHandle(file, FileCompressionInfo, &compressinfo, sizeof(compressinfo)); -todo_wine ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, "got %d, error %d\n", ret, GetLastError()); SetLastError(0xdeadbeef); ret = pSetFileInformationByHandle(file, FileAttributeTagInfo, &fileattrinfo, sizeof(fileattrinfo)); -todo_wine ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, "got %d, error %d\n", ret, GetLastError()); memset(&protinfo, 0, sizeof(protinfo)); @@ -4633,7 +4630,6 @@ todo_wine protinfo.StructureSize = sizeof(protinfo); SetLastError(0xdeadbeef); ret = pSetFileInformationByHandle(file, FileRemoteProtocolInfo, &protinfo, sizeof(protinfo)); -todo_wine ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, "got %d, error %d\n", ret, GetLastError()); CloseHandle(file); diff --git a/include/winbase.h b/include/winbase.h index c558b215279..e20a6753bb0 100644 --- a/include/winbase.h +++ b/include/winbase.h @@ -2460,6 +2460,7 @@ WINBASEAPI VOID WINAPI SetFileApisToOEM(void); WINBASEAPI BOOL WINAPI SetFileAttributesA(LPCSTR,DWORD); WINBASEAPI BOOL WINAPI SetFileAttributesW(LPCWSTR,DWORD); #define SetFileAttributes WINELIB_NAME_AW(SetFileAttributes) +WINBASEAPI BOOL WINAPI SetFileInformationByHandle(HANDLE,FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD); WINBASEAPI DWORD WINAPI SetFilePointer(HANDLE,LONG,LPLONG,DWORD); WINBASEAPI BOOL WINAPI SetFilePointerEx(HANDLE,LARGE_INTEGER,LARGE_INTEGER*,DWORD); WINADVAPI BOOL WINAPI SetFileSecurityA(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR); -- 2.11.4.GIT