adding query for FileInternalInformation infoclass
this query asks for a file index which is unique identifier for a file which we can satisfy from file attribute called "fileid"
This commit is contained in:
parent
6aab42a4b5
commit
b9e369fac6
7 changed files with 20 additions and 15 deletions
|
|
@ -252,4 +252,7 @@ typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
|
|||
ULONG BytesPerSector;
|
||||
} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
|
||||
|
||||
typedef struct _FILE_INTERNAL_INFORMATION {
|
||||
LARGE_INTEGER IndexNumber;
|
||||
} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -116,6 +116,9 @@ static int handle_getattr(nfs41_upcall *upcall)
|
|||
args->tag_info.ReparseTag = info.type == NF4LNK ?
|
||||
IO_REPARSE_TAG_SYMLINK : 0;
|
||||
break;
|
||||
case FileInternalInformation:
|
||||
args->intr_info.IndexNumber.QuadPart = info.fileid;
|
||||
break;
|
||||
default:
|
||||
eprintf("unhandled file query class %d\n", args->query_class);
|
||||
status = ERROR_INVALID_PARAMETER;
|
||||
|
|
@ -153,6 +156,13 @@ static int marshall_getattr(unsigned char *buffer, uint32_t *length, nfs41_upcal
|
|||
status = safe_write(&buffer, length, &args->tag_info, info_len);
|
||||
if (status) goto out;
|
||||
break;
|
||||
case FileInternalInformation:
|
||||
info_len = sizeof(args->intr_info);
|
||||
status = safe_write(&buffer, length, &info_len, sizeof(info_len));
|
||||
if (status) goto out;
|
||||
status = safe_write(&buffer, length, &args->intr_info, info_len);
|
||||
if (status) goto out;
|
||||
break;
|
||||
default:
|
||||
eprintf("unknown file query class %d\n", args->query_class);
|
||||
status = 103;
|
||||
|
|
|
|||
|
|
@ -294,6 +294,7 @@ static void copy_attrs(
|
|||
dst->type = src->type;
|
||||
dst->numlinks = src->numlinks;
|
||||
dst->mode = src->mode;
|
||||
dst->fileid = src->fileid;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -318,7 +318,7 @@ int nfs41_open(
|
|||
info = &tmp_info;
|
||||
|
||||
init_getattr_request(&attr_request);
|
||||
attr_request.arr[0] |= FATTR4_WORD0_FSID | FATTR4_WORD0_FILEID;
|
||||
attr_request.arr[0] |= FATTR4_WORD0_FSID;
|
||||
|
||||
compound_init(&compound, argops, resops, "open");
|
||||
|
||||
|
|
@ -521,7 +521,6 @@ int nfs41_create(
|
|||
nfs41_restorefh_res restorefh_res;
|
||||
|
||||
init_getattr_request(&attr_request);
|
||||
attr_request.arr[0] |= FATTR4_WORD0_FILEID;
|
||||
|
||||
compound_init(&compound, argops, resops, "create");
|
||||
|
||||
|
|
@ -1029,7 +1028,7 @@ void init_getattr_request(bitmap4 *attr_request)
|
|||
{
|
||||
attr_request->count = 2;
|
||||
attr_request->arr[0] = FATTR4_WORD0_TYPE |
|
||||
FATTR4_WORD0_CHANGE | FATTR4_WORD0_SIZE;
|
||||
FATTR4_WORD0_CHANGE | FATTR4_WORD0_SIZE | FATTR4_WORD0_FILEID;
|
||||
attr_request->arr[1] = FATTR4_WORD1_NUMLINKS |
|
||||
FATTR4_WORD1_TIME_ACCESS | FATTR4_WORD1_TIME_CREATE |
|
||||
FATTR4_WORD1_TIME_MODIFY | FATTR4_WORD1_MODE |
|
||||
|
|
@ -1338,9 +1337,8 @@ int nfs41_link(
|
|||
|
||||
ZeroMemory(&info, sizeof(info));
|
||||
init_getattr_request(&info[0].attrmask);
|
||||
info[0].attrmask.arr[0] |= FATTR4_WORD0_FILEID;
|
||||
init_getattr_request(&info[1].attrmask);
|
||||
info[1].attrmask.arr[0] |= FATTR4_WORD0_FILEID | FATTR4_WORD0_FSID;
|
||||
info[1].attrmask.arr[0] |= FATTR4_WORD0_FSID;
|
||||
|
||||
compound_init(&compound, argops, resops, "link");
|
||||
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ static void readdir_copy_dir_info(
|
|||
IN nfs41_readdir_entry *entry,
|
||||
IN PFILE_DIR_INFO_UNION info)
|
||||
{
|
||||
info->fdi.FileIndex = 0;
|
||||
info->fdi.FileIndex = entry->attr_info.fileid;
|
||||
nfs_time_to_file_time(&entry->attr_info.time_create,
|
||||
&info->fdi.CreationTime);
|
||||
nfs_time_to_file_time(&entry->attr_info.time_access,
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ typedef struct __getattr_upcall_args {
|
|||
FILE_BASIC_INFO basic_info;
|
||||
FILE_STANDARD_INFO std_info;
|
||||
FILE_ATTRIBUTE_TAG_INFO tag_info;
|
||||
FILE_INTERNAL_INFORMATION intr_info;
|
||||
nfs41_root *root;
|
||||
nfs41_open_state *state;
|
||||
int query_class;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue