刻苦钻研了使用驱动直接使用IN/OUT指令来修改MBR,但是读取成功了,而写MBR却一直没有进展,到现在也没有写进去,汗…
根据网友提供的链接发现了这篇文章,http://www.codeproject.com/KB/system/rawsectorio.aspx。以下所有的个人看法全部依据本文。
在看这篇文章之前倒是了解过winhex这款软件,也使用这个软件在ring3下修改了MBR,所以就怀着一腔的幻想去调试winhex,结果可想而知,莫有结果,只找到一个函数KiFastSystemCall,由于之前对这些深层的东西没有什么了解,所以也算是有所收获,到这里也就以失败告终了。
发现KiFastSystemCall函数时以为winhex内部用了非正常手段,看了这篇文章后才突然觉悟可能是winhex内部调用的系统API然后由API调用的KiFastSystemCall函数(好像是用来跳转到ring0的吧),所以也就纠正了原来的错误,通过那篇文章(当然要保证链接到文章的正确性),另外了解到的是IoCallDriver原来也是可以利用的。
之前还一直认为IoCallDriver会把IRP传递给传入的DEVICE_OBJECT参数的device stack的栈顶DEVICE_OBJECT,现在回头想想,简直太可笑了,因为这肯定是错误的,