1、要调用Win32 API,首先要知道钽吟篑瑜API中的参数怎么用。因为使用C编程时,在头文件winnt.h中声明有Win32 API需要的常匪犬挚驰量,可是C#的编程环境中是没有的,因此我们可以从这个头文件查看常量,然后自己写uint类型枚举如图,代替C/C++中的宏定义。
2、第一个用到的函数:CreateFile上边几个就是CreateFile函数需要用到的常量。uint类型的枚举可以直接代替uint类型作为传入参数。
3、第二个用到的函数:SetFilePointer使用CreateFile创建句柄后,用这个设醅呓择锗置读指针位置。如图的MoveMethodMode就是自己定义的uint类型枚举常量。引用变量写成[In, Out] ref...SetLastError属性则可有可无,设置这个是为了能够在失败时获取Win32错误。
4、第三个/第四个用到的函数:ReadFile,CloseHandle。分别用来读取,和关闭句柄。
5、接下来,我们开始编写自己的Read函数,实现从驱动器drive中读取第sector个扇区,将512字节数据写入buffer。
6、首先如图调用CreateFile,各个参数如图设置即可。如果diskHandle得到-1,就是创建失败,弹窗显示(显示信息有小问题,是不是\\.\PHYSICALDRIVE0取决于调用函数者)
7、然后从sector计算文件指针的第32位和高32位。使用SetFilePointer设置指针位置。
8、如果返回0xffffffff,就说明设置失败,返回。如果成功,继续,调用ReadFile读取内容到缓冲区。然后关闭句柄,返回读取成功。
9、然后我们在事件处理函数中,就可以如图读取扇区,接着格式化并显示出来。
10、直接运行可能失败,我们需要开启这个程序的管理员权限要求。这里简单说明如图,若有问题请查阅别处。
11、接下来,我们把自己写的读盘程序,和一些现有软件做比较,可以看到读取结果正确。