在这里,我试图通过 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>