1 2 #include "k32_vista.h" 3 4 #include <ndk/rtlfuncs.h> 5 #include <ndk/iofuncs.h> 6 7 #define NDEBUG 8 #include <debug.h> 9 10 #undef FIXME 11 #define FIXME DPRINT1 12 13 /* Taken from Wine kernel32/file.c */ 14 15 /*********************************************************************** 16 * GetFileInformationByHandleEx (kernelbase.@) 17 */ 18 BOOL WINAPI DECLSPEC_HOTPATCH GetFileInformationByHandleEx(HANDLE handle, FILE_INFO_BY_HANDLE_CLASS class, 19 LPVOID info, DWORD size) 20 { 21 NTSTATUS status; 22 IO_STATUS_BLOCK io; 23 24 switch (class) 25 { 26 case FileRemoteProtocolInfo: 27 case FileStorageInfo: 28 case FileDispositionInfoEx: 29 case FileRenameInfoEx: 30 case FileCaseSensitiveInfo: 31 case FileNormalizedNameInfo: 32 FIXME("%p, %u, %p, %lu\n", handle, class, info, size); 33 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 34 return FALSE; 35 36 case FileStreamInfo: 37 status = NtQueryInformationFile(handle, &io, info, size, FileStreamInformation); 38 break; 39 40 case FileCompressionInfo: 41 status = NtQueryInformationFile(handle, &io, info, size, FileCompressionInformation); 42 break; 43 44 case FileAlignmentInfo: 45 status = NtQueryInformationFile(handle, &io, info, size, FileAlignmentInformation); 46 break; 47 48 case FileAttributeTagInfo: 49 status = NtQueryInformationFile(handle, &io, info, size, FileAttributeTagInformation); 50 break; 51 52 case FileBasicInfo: 53 status = NtQueryInformationFile(handle, &io, info, size, FileBasicInformation); 54 break; 55 56 case FileStandardInfo: 57 status = NtQueryInformationFile(handle, &io, info, size, FileStandardInformation); 58 break; 59 60 case FileNameInfo: 61 status = NtQueryInformationFile(handle, &io, info, size, FileNameInformation); 62 break; 63 64 case FileIdInfo: 65 status = NtQueryInformationFile(handle, &io, info, size, FileIdInformation); 66 break; 67 68 case FileIdBothDirectoryRestartInfo: 69 case FileIdBothDirectoryInfo: 70 status = NtQueryDirectoryFile(handle, NULL, NULL, NULL, &io, info, size, 71 FileIdBothDirectoryInformation, FALSE, NULL, 72 (class == FileIdBothDirectoryRestartInfo)); 73 break; 74 75 case FileFullDirectoryInfo: 76 case FileFullDirectoryRestartInfo: 77 status = NtQueryDirectoryFile(handle, NULL, NULL, NULL, &io, info, size, 78 FileFullDirectoryInformation, FALSE, NULL, 79 (class == FileFullDirectoryRestartInfo)); 80 break; 81 82 case FileIdExtdDirectoryInfo: 83 case FileIdExtdDirectoryRestartInfo: 84 status = NtQueryDirectoryFile(handle, NULL, NULL, NULL, &io, info, size, 85 FileIdExtdDirectoryInformation, FALSE, NULL, 86 (class == FileIdExtdDirectoryRestartInfo)); 87 break; 88 89 case FileRenameInfo: 90 case FileDispositionInfo: 91 case FileAllocationInfo: 92 case FileIoPriorityHintInfo: 93 case FileEndOfFileInfo: 94 default: 95 SetLastError(ERROR_INVALID_PARAMETER); 96 return FALSE; 97 } 98 99 #ifdef __REACTOS__ 100 if (!NT_SUCCESS(status)) 101 { 102 SetLastError(RtlNtStatusToDosError(status)); 103 return FALSE; 104 } 105 106 return TRUE; 107 #else 108 return set_ntstatus(status); 109 #endif 110 } 111