Beispiel #1
0
        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));
            }
        }
Beispiel #2
0
        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;
        }