private bool GetFileInformationByHandleHook(IntPtr hfile, out BY_HANDLE_FILE_INFORMATION lpfileinformation) { VirtualHandle vHandle; if (_virtualHandles.TryGetValue(hfile, out vHandle)) { var archiveInfo = vHandle.ArchiveInfo; var creationTime = archiveInfo.CreationTime.ToFileTime(); var accessTime = archiveInfo.LastWriteTime.ToFileTime(); var modificationTime = archiveInfo.LastWriteTime.ToFileTime(); var fileSize = archiveInfo.Size; lpfileinformation = new BY_HANDLE_FILE_INFORMATION { FileAttributes = archiveInfo.Attributes, CreationTime = { dwHighDateTime = (int)(creationTime >> 32), dwLowDateTime = (int)(creationTime & 0xFFFFFFFF) }, LastAccessTime = { dwHighDateTime = (int)(accessTime >> 32), dwLowDateTime = (int)(accessTime & 0xFFFFFFFF) }, LastWriteTime = { dwHighDateTime = (int)(modificationTime >> 32), dwLowDateTime = (int)(modificationTime & 0xFFFFFFFF) }, VolumeSerialNumber = 123445, FileSizeHigh = (uint)(fileSize >> 32), FileSizeLow = (uint)(fileSize & 0xFFFFFFFF), NumberOfLinks = 1, FileIndexHigh = 0, FileIndexLow = (uint)archiveInfo.Index }; #if TRACE Console.WriteLine("Get file information by handle for virtual file: " + vHandle.Filename); #endif return(true); } return(Win32Api.GetFileInformationByHandle(hfile, out lpfileinformation)); }
public static extern bool GetFileInformationByHandle(IntPtr hFile, out BY_HANDLE_FILE_INFORMATION lpFileInformation);