Physically? Loads of things, including a whole number of other processors...
The HDD data itself is stored in magnetic bits, which are read by a magnetic head which floats a tiny distance above the surface of a spinning disk: small changes in the magnetism of the disk surface are detected by the head and interpreted as ones and zeros. (There is usually at least one processor involved here)
The ones and zeros are organised into bytes, sectors, and tracks which are built up into a RAM buffer inside the HDD (by another processor, quite often) and transferred onto a databus (PATA or SATA normally) as requested where they are picked up (by yet another processor) and passed to the CPU for storage in RAM by driver software which reads it from the interface buffer.
Complicated? Yes. Horribly complicated when you get right down to it (and there is a lot more complication if you start going into the details - that is just a simplified, "glossed over" version of what happens). If you want more details, then start here:
How Hard Disks Work | HowStuffWorks[
^]
Then move on to this overview:
Everything You Need to Know About Serial ATA - Hardware Secrets[
^] before startign to goolge for some of the details!
But as far as your app is concerned: File.ReadAllBytes will do it all for you! :laugh: