首页
社区
课程
招聘
[求助]ZwReadFile 读取MBR的问题
发表于: 2011-9-24 20:36 6801

[求助]ZwReadFile 读取MBR的问题

2011-9-24 20:36
6801
ZwReadFile 读取MBR的时候出现了问题。
我以读取MBR结尾的55AA判定是否成功读取到MBR,但是始终没有成功。ring3成功了。

#define DISK_CLASS_NAME L"\\??\\PhysicalDrive0"
VOID
ReadMBR()
{
    NTSTATUS                    	Status;
	IO_STATUS_BLOCK             	IoStatusBlock;
    OBJECT_ATTRIBUTES           	ObjectAttributes;
    HANDLE                      	FileHandle;
	UNICODE_STRING 					DeviceNameString;
	UCHAR							Buf[200] = {0};
	LARGE_INTEGER					ByteOffset = {0};
	FILE_POSITION_INFORMATION		FilePointerInformation;



	RtlInitUnicodeString(&DeviceNameString,DISK_CLASS_NAME);
	
    InitializeObjectAttributes(&ObjectAttributes,
                                &DeviceNameString,
                                OBJ_KERNEL_HANDLE,
                                NULL,
                                NULL);
    Status = ZwOpenFile(&FileHandle,
						GENERIC_READ | GENERIC_WRITE,
						&ObjectAttributes,
						&IoStatusBlock,
						NULL,
						FILE_NON_DIRECTORY_FILE);
    if (NT_SUCCESS(Status))
    {
        DbgPrint("ZwCreateFile successfully!\n");
        //return;
    }
    else
    {
        DbgPrint("ZwCreateFile failed!\n");
        return;
    }
	//FilePointerInformation.CurrentByteOffset.QuadPart = 510;
	//ByteOffset = FilePointerInformation.CurrentByteOffset;
	ByteOffset.QuadPart = 510;
	/*
	Status = ZwSetInformationFile(FileHandle,
									&IoStatusBlock,
									&FilePointerInformation,
									sizeof(FILE_POSITION_INFORMATION),
									FilePositionInformation);
	if(!NT_SUCCESS(Status))
	{
		DbgPrint("ZwQueryInformationFile\n");
		return Status;
	}
	*/
	Status = ZwReadFile(FileHandle,
						NULL,
						NULL,
						NULL,
						&IoStatusBlock,
						Buf,
						2,
						&ByteOffset,
						NULL);
    if (NT_SUCCESS(Status))
    {
        DbgPrint("ZwReadFile successfully!\n");
        DbgPrint("%02X\t%02X\n",Buf[0],Buf[1]);
    }
    else
    {
        DbgPrint("ZwReadFile failed!\n");
    }
	ZwClose(FileHandle);
}

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
读磁盘每次只能读扇区的整数倍大小,而且文件指针的起始位置也只能是扇区的整数倍偏移
2011-9-25 00:14
0
雪    币: 27
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
非常感谢,但是我从0偏移读取512个还是不成功,是不是还有别的地方不对。
2011-9-25 00:19
0
雪    币: 1753
活跃值: (840)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
4
#define DISK_CLASS_NAME L"\\??\\PhysicalDrive0"

改下
#define DISK_CLASS_NAME L"\\??\\PHYSICALDRIVE0"
2011-9-26 23:05
0
雪    币: 1753
活跃值: (840)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
5
符号链接大写`!
2011-9-26 23:06
0
雪    币: 229
活跃值: (483)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
6
以鄙人之见,应该是
Status = ZwOpenFile(&FileHandle,
GENERIC_READ | GENERIC_WRITE,
&ObjectAttributes,
&IoStatusBlock,
NULL,
FILE_NON_DIRECTORY_FILE);


这个最后一个参数有问题,加个XXX_SYNC_XXX那个标志,表示是同步读写
2011-9-26 23:36
0
雪    币: 27
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你赢了。Thanks
2011-9-27 18:46
0
游客
登录 | 注册 方可回帖
返回
//