c# 读磁盘 c#读扇区 c#读驱动器 c#读硬盘 c#读 MBR

c# 读磁盘 c#读扇区 c#读驱动器 c#读硬盘 c#读 MBR

 网上流传的c#打开驱动器都有问题,原因是createfile的参数不对,下面是改好的,

        public const uint FILE_ATTRIBUTE_NORMAL = 0x80;
        public const short INVALID_HANDLE_VALUE = -1;
        public const uint GENERIC_READ = 0x80000000;
        public const uint GENERIC_WRITE = 0x40000000;
        public const uint CREATE_NEW = 1;
        public const uint CREATE_ALWAYS = 2;
        public const uint OPEN_EXISTING = 3;
        public const uint FILE_BEGIN = 0;
        public const uint FILE_CURRENT = 1;
        public const uint FILE_END = 2;

        [DllImport("Kernel32.dll")]
        extern static IntPtr CreateFile(string fileName, uint accessFlag, uint shareMode, IntPtr security,
            uint createFlag, uint attributeFlag, IntPtr tempfile);

        [DllImport("Kernel32.dll")]
        extern static bool ReadFile(IntPtr handle, [Out] byte[] buffer, uint bufferLength,
            ref uint length, IntPtr overLapped);

        [DllImport("Kernel32.dll")]
        extern static bool CloseHandle(IntPtr handle);

        [DllImport("Kernel32.dll")]
        extern static uint SetFilePointer(IntPtr handle, int offset, IntPtr distance, uint flag);

                IntPtr DiskHandle;
                string dr;

 


                //下面的参数很重要,网上流传的都缺少参数导致出现问题

//读盘符

                dr = "\\\\.\\E:";        

        DiskHandle = CreateFile(dr, GENERIC_READ,
          OPEN_EXISTING, IntPtr.Zero, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero);

//读物理磁盘0  注意参数

IntPtr DiskHandle = CreateFile(@"\\.\PhysicalDrive0", GENERIC_READ, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);

 

 

 

                byte[] buffer = new byte[512];
                uint length = 0;
                SetFilePointer(DiskHandle, 0, IntPtr.Zero, FILE_BEGIN);
                ReadFile(DiskHandle, buffer, 512, ref length, IntPtr.Zero);
                CloseHandle(DiskHandle);
                return buffer;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值