2024-09-29 23:17:04 发布
网友
我在python上创建了一个小程序,它可以在较低的级别读取引导扇区,这样就不会损坏设备窗户。但是唯一的问题是我无法读取例如:\Device\Harddisk0\Partition1,启动分区或{},原始磁盘0。每次我尝试它都会告诉我:No such a file or a directory
\Device\Harddisk0\Partition1
No such a file or a directory
我做错什么了?在
所有这些都取决于您使用的NT或WIN32 api。ZwOpenFile还是{}?在
ZwOpenFile
\Device\Harddisk0\Partition1是NT名称格式,只能在ZwOpenFile或{}中使用。在
要在CreateFileW中使用此名称,必须在其前面加上\\?\globalroot
CreateFileW
\\?\globalroot
所以代码示例-(在单个函数中同时使用NT和win32调用)
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<X>Partition<Y>
\\?\PhysicalDrive<X>
一切都取决于你是怎么走上这条路的?或者你只是硬编码?在
正确的方法是:
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
所有这些都取决于您使用的NT或WIN32 api。}?在
ZwOpenFile
还是{\Device\Harddisk0\Partition1
是NT名称格式,只能在ZwOpenFile
或{要在
CreateFileW
中使用此名称,必须在其前面加上\\?\globalroot
所以代码示例-(在单个函数中同时使用NT和win32调用)
您还可以使用下一个符号与
CreateFileW
:\\?\Harddisk<X>Partition<Y>
-用于硬盘上的分区(1,2,…) (0,1,…)\\?\PhysicalDrive<X>
用于硬盘(0,1,…)一切都取决于你是怎么走上这条路的?或者你只是硬编码?在
正确的方法是:
感谢@eryksun
相关问题 更多 >
编程相关推荐