我在python上创建了一个小程序,它以低级别读取引导扇区,因此它不会破坏设备。我昨天在Linux中成功运行了这个程序,我想在Windows中做同样的事情。但是唯一的问题是,我没有能够读取例如:\Device\Harddisk0\Partition1
,启动分区或\Device\Harddisk0\DR0
,原始磁盘0.每次我尝试它都告诉我:{{1 }}
我做错了什么?
答案 0 :(得分:2)
正确的做法是:
import os
disk_fd = os.open( r"\\.\PhysicalDrive0", os.O_RDONLY | os.O_BINARY)
data = os.read(disk_fd, 512)
os.close(disk_fd)
感谢@eryksun
答案 1 :(得分:0)
所有依赖于你使用的NT或WIN32 api。 export class LoadSuccessAction implements Action {
type = ActionTypes.LOAD_SUCCESS;
constructor(public payload: any[]) { }
}
或ZwOpenFile
?
CreateFileW
是NT名称格式,必须仅在\Device\Harddisk0\Partition1
或ZwOpenFile
中使用。
要在ZwCreateFile
中使用此名称,您必须在CreateFileW
所以代码示例 - (在单个函数中同时使用NT和win32调用)
\\?\globalroot
您也可以将下一个符号链接与void xxx()
{
HANDLE hFile;
IO_STATUS_BLOCK iosb;
UNICODE_STRING ObjectName;
OBJECT_ATTRIBUTES oa = { sizeof(oa), 0, &ObjectName, OBJ_CASE_INSENSITIVE };
RtlInitUnicodeString(&ObjectName, L"\\Device\\Harddisk0\\Partition1");
UCHAR buf[0x200];
if (0 <= ZwOpenFile(&hFile, FILE_GENERIC_READ, &oa, &iosb, FILE_SHARE_VALID_FLAGS, FILE_SYNCHRONOUS_IO_NONALERT))
{
LARGE_INTEGER ByteOffset = {};
ZwReadFile(hFile, 0, 0, 0, &iosb, buf, sizeof(buf), &ByteOffset, 0);
ZwClose(hFile);
}
hFile = CreateFile(L"\\\\?\\globalroot\\Device\\Harddisk0\\Partition1", FILE_GENERIC_READ, FILE_SHARE_VALID_FLAGS,
0, OPEN_EXISTING, 0, 0);
if (hFile != INVALID_HANDLE_VALUE)
{
OVERLAPPED ov = {};
ULONG n;
ReadFile(hFile, buf, sizeof(buf), &n, &ov);
CloseHandle(hFile);
}
}
:
CreateFileW
- 用于HardDisk上的分区(1,2,..)
(0,1,..)\\?\Harddisk<X>Partition<Y>
适用于HardDisk(0,1,..)所有人都依赖于 - 你是如何得到这条道路的?或者你只是硬编码?