mirror of
https://github.com/reactos/reactos.git
synced 2024-10-29 19:13:58 +00:00
111 lines
3.1 KiB
C
111 lines
3.1 KiB
C
|
|
#include "k32_vista.h"
|
|
|
|
#include <ndk/rtlfuncs.h>
|
|
#include <ndk/iofuncs.h>
|
|
|
|
#define NDEBUG
|
|
#include <debug.h>
|
|
|
|
#undef FIXME
|
|
#define FIXME DPRINT1
|
|
|
|
/* Taken from Wine kernel32/file.c */
|
|
|
|
/***********************************************************************
|
|
* GetFileInformationByHandleEx (kernelbase.@)
|
|
*/
|
|
BOOL WINAPI DECLSPEC_HOTPATCH GetFileInformationByHandleEx(HANDLE handle, FILE_INFO_BY_HANDLE_CLASS class,
|
|
LPVOID info, DWORD size)
|
|
{
|
|
NTSTATUS status;
|
|
IO_STATUS_BLOCK io;
|
|
|
|
switch (class)
|
|
{
|
|
case FileRemoteProtocolInfo:
|
|
case FileStorageInfo:
|
|
case FileDispositionInfoEx:
|
|
case FileRenameInfoEx:
|
|
case FileCaseSensitiveInfo:
|
|
case FileNormalizedNameInfo:
|
|
FIXME("%p, %u, %p, %lu\n", handle, class, info, size);
|
|
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
return FALSE;
|
|
|
|
case FileStreamInfo:
|
|
status = NtQueryInformationFile(handle, &io, info, size, FileStreamInformation);
|
|
break;
|
|
|
|
case FileCompressionInfo:
|
|
status = NtQueryInformationFile(handle, &io, info, size, FileCompressionInformation);
|
|
break;
|
|
|
|
case FileAlignmentInfo:
|
|
status = NtQueryInformationFile(handle, &io, info, size, FileAlignmentInformation);
|
|
break;
|
|
|
|
case FileAttributeTagInfo:
|
|
status = NtQueryInformationFile(handle, &io, info, size, FileAttributeTagInformation);
|
|
break;
|
|
|
|
case FileBasicInfo:
|
|
status = NtQueryInformationFile(handle, &io, info, size, FileBasicInformation);
|
|
break;
|
|
|
|
case FileStandardInfo:
|
|
status = NtQueryInformationFile(handle, &io, info, size, FileStandardInformation);
|
|
break;
|
|
|
|
case FileNameInfo:
|
|
status = NtQueryInformationFile(handle, &io, info, size, FileNameInformation);
|
|
break;
|
|
|
|
case FileIdInfo:
|
|
status = NtQueryInformationFile(handle, &io, info, size, FileIdInformation);
|
|
break;
|
|
|
|
case FileIdBothDirectoryRestartInfo:
|
|
case FileIdBothDirectoryInfo:
|
|
status = NtQueryDirectoryFile(handle, NULL, NULL, NULL, &io, info, size,
|
|
FileIdBothDirectoryInformation, FALSE, NULL,
|
|
(class == FileIdBothDirectoryRestartInfo));
|
|
break;
|
|
|
|
case FileFullDirectoryInfo:
|
|
case FileFullDirectoryRestartInfo:
|
|
status = NtQueryDirectoryFile(handle, NULL, NULL, NULL, &io, info, size,
|
|
FileFullDirectoryInformation, FALSE, NULL,
|
|
(class == FileFullDirectoryRestartInfo));
|
|
break;
|
|
|
|
case FileIdExtdDirectoryInfo:
|
|
case FileIdExtdDirectoryRestartInfo:
|
|
status = NtQueryDirectoryFile(handle, NULL, NULL, NULL, &io, info, size,
|
|
FileIdExtdDirectoryInformation, FALSE, NULL,
|
|
(class == FileIdExtdDirectoryRestartInfo));
|
|
break;
|
|
|
|
case FileRenameInfo:
|
|
case FileDispositionInfo:
|
|
case FileAllocationInfo:
|
|
case FileIoPriorityHintInfo:
|
|
case FileEndOfFileInfo:
|
|
default:
|
|
SetLastError(ERROR_INVALID_PARAMETER);
|
|
return FALSE;
|
|
}
|
|
|
|
#ifdef __REACTOS__
|
|
if (!NT_SUCCESS(status))
|
|
{
|
|
SetLastError(RtlNtStatusToDosError(status));
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
#else
|
|
return set_ntstatus(status);
|
|
#endif
|
|
}
|