1 2 #include "k32_vista.h" 3 4 #include <ndk/rtlfuncs.h> 5 #include <ndk/iofuncs.h> 6 7 /* Taken from Wine kernel32/file.c */ 8 9 /*********************************************************************** 10 * GetFileInformationByHandleEx (KERNEL32.@) 11 */ 12 BOOL WINAPI GetFileInformationByHandleEx( HANDLE handle, FILE_INFO_BY_HANDLE_CLASS class, 13 LPVOID info, DWORD size ) 14 { 15 NTSTATUS status; 16 IO_STATUS_BLOCK io; 17 18 switch (class) 19 { 20 case FileStreamInfo: 21 case FileCompressionInfo: 22 case FileAttributeTagInfo: 23 case FileRemoteProtocolInfo: 24 case FileFullDirectoryInfo: 25 case FileFullDirectoryRestartInfo: 26 case FileStorageInfo: 27 case FileAlignmentInfo: 28 case FileIdInfo: 29 case FileIdExtdDirectoryInfo: 30 case FileIdExtdDirectoryRestartInfo: 31 //FIXME( "%p, %u, %p, %u\n", handle, class, info, size ); 32 SetLastError( ERROR_CALL_NOT_IMPLEMENTED ); 33 return FALSE; 34 35 case FileBasicInfo: 36 status = NtQueryInformationFile( handle, &io, info, size, FileBasicInformation ); 37 break; 38 39 case FileStandardInfo: 40 status = NtQueryInformationFile( handle, &io, info, size, FileStandardInformation ); 41 break; 42 43 case FileNameInfo: 44 status = NtQueryInformationFile( handle, &io, info, size, FileNameInformation ); 45 break; 46 47 case FileIdBothDirectoryRestartInfo: 48 case FileIdBothDirectoryInfo: 49 status = NtQueryDirectoryFile( handle, NULL, NULL, NULL, &io, info, size, 50 FileIdBothDirectoryInformation, FALSE, NULL, 51 (class == FileIdBothDirectoryRestartInfo) ); 52 break; 53 54 case FileRenameInfo: 55 case FileDispositionInfo: 56 case FileAllocationInfo: 57 case FileIoPriorityHintInfo: 58 case FileEndOfFileInfo: 59 default: 60 SetLastError( ERROR_INVALID_PARAMETER ); 61 return FALSE; 62 } 63 64 if (status != STATUS_SUCCESS) 65 { 66 SetLastError( RtlNtStatusToDosError( status ) ); 67 return FALSE; 68 } 69 return TRUE; 70 } 71