Something went wrong. Try again.
Reactos
Something went wrong. Try again.
3.2 kB · 110 lines
C
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
#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}