Содержимое диска как поток байт
От: BOleg Россия  
Дата: 16.07.09 12:14
Оценка:
#Имя: FAQ.read.disk.as.file
Здравствуйте, Аноним, Вы писали:

А>Задача: прочитать содержимое жёсткого диска (FAT, FAT32, NTFS) как поток байт, без интерпретации, где там таблица разделов, а где ещё чего. Просто взять и прочитать.


Возьми и читай.
static void Main(string[] args)
{
    var discSize=0L;

    using (var handle=CreateFile(@"\\.\C:", EFileAccess.GenericRead,
        EFileShare.Read|EFileShare.Write,
        IntPtr.Zero,
        ECreationDisposition.OpenExisting,
        EFileAttributes.Normal, IntPtr.Zero))
    {
        using (var file=new FileStream(handle, FileAccess.Read))
        {
            var buffer=new byte[4*1024];
            var readed=0;
            while((readed=file.Read(buffer, 0, buffer.Length))>0)
            {
                discSize+=readed;
            }
        }
    }
}

[Flags]
public enum EFileAccess : uint
{
    GenericRead=0x80000000,
    GenericWrite=0x40000000,
    GenericExecute=0x20000000,
    GenericAll=0x10000000,
}

[Flags]
public enum EFileShare : uint
{
    None=0x00000000,
    Read=0x00000001,
    Write=0x00000002,
    Delete=0x00000004,
}

[DllImport("kernel32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern SafeFileHandle CreateFile(
    string lpFileName,
    EFileAccess dwDesiredAccess,
    EFileShare dwShareMode,
    IntPtr lpSecurityAttributes,
    ECreationDisposition dwCreationDisposition,
    EFileAttributes dwFlagsAndAttributes,
    IntPtr hTemplateFile);

public enum ECreationDisposition : uint
{
    New=1,
    CreateAlways=2,
    OpenExisting=3,
    OpenAlways=4,
    TruncateExisting=5,
}

[Flags]
public enum EFileAttributes : uint
{
    Readonly=0x00000001,
    Hidden=0x00000002,
    System=0x00000004,
    Directory=0x00000010,
    Archive=0x00000020,
    Device=0x00000040,
    Normal=0x00000080,
    Temporary=0x00000100,
    SparseFile=0x00000200,
    ReparsePoint=0x00000400,
    Compressed=0x00000800,
    Offline=0x00001000,
    NotContentIndexed=0x00002000,
    Encrypted=0x00004000,
    Write_Through=0x80000000,
    Overlapped=0x40000000,
    NoBuffering=0x20000000,
    RandomAccess=0x10000000,
    SequentialScan=0x08000000,
    DeleteOnClose=0x04000000,
    BackupSemantics=0x02000000,
    PosixSemantics=0x01000000,
    OpenReparsePoint=0x00200000,
    OpenNoRecall=0x00100000,
    FirstPipeInstance=0x00080000
}
В человечишке все должно быть прекрасненьким: и одёжка, и душенка, и мордочка, и мыслишки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.