CoderTrevor

GSoC NTFS 2017 - Work Summary

This is a detailed summary of the work I've performed over the course of Google Summer of Code 2017. This was a continuation of my GSoC project from last year. Code Submitted You can check out my branch with SVN at https://svn.reactos.org/reactos/branches/GSoC_2016/NTFS You can find a list of commits made to my branch during GSoC 2017 at this link. I also worked on this project after GSoC last year and before the coding period officially began this year.

GSoC NTFS 2017 Update 10

Home stretch! Just a matter of days before Google opens up the GSoC final submission! I'll be using every minute I have available to me in the interim. Splitting A B-Tree Node Have I finally finished my magnum opus, allowing for file creation without limits on the number of files? Well, the bad news is, no, I still have more work to do on this. The good news, however, is I have this working in ReactOS!

GSoC NTFS 2017 Update 9

Last week went pretty well! :) In my last post, I talked about how I needed to refactor some code to fix a bug. I'm really happy with how this turned out. Refactoring As I mentioned before, the driver has a struct called an NTFS_ATTR_CONTEXT which keeps track of information related to attributes. The main purpose of the structure is to keep vital information about the attribute cached in memory, but it's also just a convenient way to pass information about attributes between functions and the driver relies on it quite extensively.

GSoC NTFS 2017 Update 8

Hello World! I know it hasn't been very long since the last update. The last few updates were late, but I'm trying to get back into good habits like committing often and blogging on time. :) Last time, I talked about how ReactOS was corrupting my test volume by trying to create files I wasn't ready for it to create. I was indeed able to fix that by booting into Windows and creating the folder and files ReactOS kept trying to make.

GSoC NTFS 2017 Update 7

Hi everyone! Last week I left off with an example of creating files, showing you how an index node fills up with file names. Once the node in a B-Tree gets too full, it needs to be split. I've been working on this for a while and I was expecting that I'd have an example of this working. I even delayed writing this post because I was so sure this feature was almost ready.

GSoC NTFS 2017 Update 6

Hello again! :) Last week, I finished the code that writes a B-Tree node to disk. Specifically, it lets me write the node to an index buffer within the index allocation of the parent directory. Don't worry if that doesn't make sense, I'll explain it more below. From a user's perspective, this means that the driver now has the ability to create dozens of files. My tester will create 39 files before filling the index node.

GSoC NTFS 2017 Update 5

Last week I got back to writing B-Tree code. Sadly, the week flew by before I could come up with anything screenshot-able. I've been updating the B-Tree code to accommodate index allocations, and trees of arbitrary depth. I'm mostly done with this but I still have to finish the code that saves an index buffer to the index allocation. Once I do that, I should be able to demonstrate creating dozens of files in a directory.

GSoC NTFS 2017 Update 4

I won't lie; it's been a slow week, feature-wise. I guess you could say that last week was all about finding and fixing bugs and errors with the driver. During the first half of the week, I upgraded my automated tester to test file creation, and I fixed a couple of bugs it turned up. I used the second half of the week for addressing issues raised by CR-123.

GSoC NTFS 2017 Update 3

All continues to go well :). Two weeks ago, I started writing code to parse B-Trees, which are representative of how NTFS organizes its directories on disk. It works like this: First, the index of a directory is read and converted to a B-Tree in memory. Next, a key for the new file is inserted into the tree. Finally, the tree is converted back to an index root attribute which is written to disk.

GSoC NTFS 2017 Update 2

All is going well :). Since the last update, I've checked off a minor TODO related to file creation: increasing the size of the master file table, if needed. Every time the mft grows, it creates several empty file records at a time. In the past, I was using this to my advantage, and was only creating files in empty slots that already existed. Every time I got an error saying there wasn't enough space for a new file, I'd boot into Windows, create a file (which would increase the mft size), and get back to testing.