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);