kernel32: Handle STD_*_HANDLE in GetFileType.
diff --git a/dlls/kernel32/file.c b/dlls/kernel32/file.c
index bdae8f4..2f5dee2 100644
--- a/dlls/kernel32/file.c
+++ b/dlls/kernel32/file.c
@@ -817,6 +817,10 @@
IO_STATUS_BLOCK io;
NTSTATUS status;
+ if (hFile == (HANDLE)STD_INPUT_HANDLE || hFile == (HANDLE)STD_OUTPUT_HANDLE
+ || hFile == (HANDLE)STD_ERROR_HANDLE)
+ hFile = GetStdHandle((DWORD_PTR)hFile);
+
if (is_console_handle( hFile )) return FILE_TYPE_CHAR;
status = NtQueryVolumeInformationFile( hFile, &io, &info, sizeof(info), FileFsDeviceInformation );
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
index f89e5af..b1b36bb 100644
--- a/dlls/kernel32/tests/file.c
+++ b/dlls/kernel32/tests/file.c
@@ -2686,7 +2686,7 @@
static void test_GetFileType(void)
{
- DWORD type;
+ DWORD type, type2;
HANDLE h = CreateFileA( filename, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0 );
ok( h != INVALID_HANDLE_VALUE, "open %s failed\n", filename );
type = GetFileType(h);
@@ -2698,6 +2698,11 @@
ok( type == FILE_TYPE_CHAR, "expected type char for nul got %d\n", type );
CloseHandle( h );
DeleteFileA( filename );
+ h = GetStdHandle( STD_OUTPUT_HANDLE );
+ ok( h != INVALID_HANDLE_VALUE, "GetStdHandle failed\n" );
+ type = GetFileType( (HANDLE)STD_OUTPUT_HANDLE );
+ type2 = GetFileType( h );
+ ok(type == type2, "expected type %d for STD_OUTPUT_HANDLE got %d\n", type2, type);
}
static int completion_count;