0

在这里,我试图通过 objectID 打开罚款来获取文件句柄,这个打开的调用返回访问被拒绝,但调用进程具有对卷的填充写入访问权限。相同的呼叫正在某些特定机器上工作,并且总是在其他机器上被拒绝访问。

FILE_OBJECTID_BUFFER *ObjId
UNICODESTRING findstr;
findstr.Buffer = (WCHAR*)&(ObjId->ObjectId);
findstr.Length          = sizeof(ObjId->ObjectId);
findstr.MaximumLength   = sizeof(ObjId->ObjectId);

OBJECT_ATTRIBUTES ObjAttribute = {0};
InitializeObjectAttributes (&ObjAttribute, 
&fidstr, 
OBJ_CASE_INSENSITIVE, 
VolumeHandle,
NULL);

IO_STATUS_BLOCK iosb = {0};

ULONG status = NtCreatefile(&targethandle, 
GENERIC_ALL,
&ObjAttribute,
iosb, 
NULL, 
FILE_ATTRIBUTE_NORMAL, 
FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_OPEN, FILE_OPEN_BY_FILE_ID | FILE_NON_DIRECTORY_FILE, 
NULL, 0);

这里缺少一些标志吗?或者有没有其他方法可以通过 ObjectID 打开文件句柄?我正在使用 FSCTL_GET_OBJECT_ID 来获取文件 objectid。

fsutil objectid 查询 <file_path>

4

0 回答 0