Exemple #1
0
        private int SetInformationFileImpl(IntPtr hfile, out Native.Native.IO_STATUS_BLOCK ioStatusBlock, void *fileInformation, uint length, Native.Native.FileInformationClass fileInformationClass)
        {
            lock (_setInfoLock)
            {
                if (_handleToInfoMap.ContainsKey(hfile) && fileInformationClass == Native.Native.FileInformationClass.FilePositionInformation)
                {
                    var pointer = *(long *)fileInformation;
                    _handleToInfoMap[hfile].FilePointer = pointer;
                }

                return(_setFilePointerHook.OriginalFunction(hfile, out ioStatusBlock, fileInformation, length, fileInformationClass));
            }
        }
Exemple #2
0
        private int QueryInformationFileHook(IntPtr hfile, out Native.Native.IO_STATUS_BLOCK ioStatusBlock, void *fileInformation, uint length, Native.Native.FileInformationClass fileInformationClass)
        {
            lock (_getInfoLock)
            {
                var result = _getFileSizeHook.OriginalFunction(hfile, out ioStatusBlock, fileInformation, length, fileInformationClass);

                if (_handleToInfoMap.ContainsKey(hfile) && fileInformationClass == Native.Native.FileInformationClass.FileStandardInformation)
                {
                    var information = (Native.Native.FILE_STANDARD_INFORMATION *)fileInformation;
                    var oldSize     = information->EndOfFile;
                    var newSize     = OnGetAfsSize(hfile);
                    if (newSize != -1)
                    {
                        information->EndOfFile = newSize;
                    }

                    #if DEBUG
                    Console.WriteLine($"File Size Override | Old: {oldSize}, New: {information->EndOfFile} | {_handleToInfoMap[hfile].FilePath}");
                    #endif
                }

                return(result);
            }
        }
Exemple #3
0
        private int QueryInformationFileImpl(IntPtr hfile, out Native.Native.IO_STATUS_BLOCK ioStatusBlock, void *fileInformation, uint length, Native.Native.FileInformationClass fileInformationClass)
        {
            lock (_getInfoLock)
            {
                if (_handleToInfoMap.ContainsKey(hfile) && fileInformationClass == Native.Native.FileInformationClass.FileStandardInformation)
                {
                    var result      = _getFileSizeHook.OriginalFunction(hfile, out ioStatusBlock, fileInformation, length, fileInformationClass);
                    var information = (Native.Native.FILE_STANDARD_INFORMATION *)fileInformation;
                    var newFileSize = OnGetFileSize(hfile);
                    if (newFileSize != -1)
                    {
                        information->EndOfFile      = newFileSize;
                        information->AllocationSize = Utilities.RoundUp(newFileSize, 4096);
                    }

#if DEBUG
                    Console.WriteLine($"[ONEHook] QueryInformationFile: Alloc Size: {information->AllocationSize}, EndOfFile: {information->EndOfFile}");
#endif

                    return(result);
                }

                return(_getFileSizeHook.OriginalFunction(hfile, out ioStatusBlock, fileInformation, length, fileInformationClass));
            }
        }