public int GetFileInformation(IntPtr rawFilename, ref FuserDefinition.BY_HANDLE_FILE_INFORMATION rawHandleFileInformation, ref FuserDefinition.FUSER_FILE_INFO rawHFile) { try { FuserFileInformation fi = new FuserFileInformation(); Win32Returncode ret = this.fsDevice.GetFileInformation(this.hManager.GetFileHandler(GetFilename(rawFilename), ref rawHFile), fi); if (ret == Win32Returncode.SUCCESS) { if (fi.CreationTime == DateTime.MinValue || fi.LastAccessTime == DateTime.MinValue || fi.LastWriteTime == DateTime.MinValue) { ret = Win32Returncode.DEFAULT_UNKNOWN_ERROR; } } if (ret == Win32Returncode.SUCCESS) { ConvertFileInfoToRAW(fi, ref rawHandleFileInformation); } return(ConvReturnCodeToInt(ret)); } catch (Exception e) { this.fsDevice.LogErrorMessage("GetFileInformation", e.Message); return(ConvReturnCodeToInt(Win32Returncode.DEFAULT_UNKNOWN_ERROR)); } }
private void ConvertFileInfoToRAW(FuserFileInformation fi, ref FuserDefinition.BY_HANDLE_FILE_INFORMATION rawHandleFileInformation) { // TODO: boundary values and behaviour testing rawHandleFileInformation.dwFileAttributes = (uint)fi.Attributes; rawHandleFileInformation.ftCreationTime = ConvLongToFILETIME(fi.CreationTime.ToFileTime()); rawHandleFileInformation.ftLastAccessTime = ConvLongToFILETIME(fi.LastAccessTime.ToFileTime()); rawHandleFileInformation.ftLastWriteTime = ConvLongToFILETIME(fi.LastWriteTime.ToFileTime()); //ConvLongToRAW(fi.Length, out rawHandleFileInformation.nFileSizeHigh, out rawHandleFileInformation.nFileSizeLow); // TODO: Check if the parameter nFileSizeHigh/nFileSizeLow also works as INT, then only the above line leave it. int h; int l; ConvLongToRAW(fi.Length, out h, out l); rawHandleFileInformation.nFileSizeHigh = (uint)h; rawHandleFileInformation.nFileSizeLow = (uint)l; }