[2/3] ntdll: Implement FileIdInformation class support in NtQueryInformationFile.
Jonathan Doron
jond at wizery.com
Sat Dec 31 09:09:16 CST 2016
Signed-off-by: Jonathan Doron <jond at wizery.com>
---
dlls/ntdll/file.c | 19 ++++++++++++++++++-
include/winbase.h | 9 +++++++++
2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 6eddd19..fbadfbd 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -2379,7 +2379,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io,
0, /* FileRenameInformationBypassAccessCheck */
0, /* FileLinkInformationBypassAccessCheck */
0, /* FileVolumeNameInformation */
- 0, /* FileIdInformation */
+ sizeof(FILE_ID_INFORMATION), /* FileIdInformation */
0, /* FileIdExtdDirectoryInformation */
0, /* FileReplaceCompletionInformation */
0, /* FileHardLinkFullIdInformation */
@@ -2621,6 +2621,23 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io,
}
}
break;
+ case FileIdInformation:
+ {
+ struct statfs volstats;
+ FILE_ID_INFORMATION *info = ptr;
+ if ((fstat(fd, &st) == -1) || (fstatfs(fd, &volstats) == -1))
+ {
+ io->u.Status = FILE_GetNtStatus();
+ }
+ else
+ {
+ memset(info, 0, sizeof(*info));
+ ((PLARGE_INTEGER)&info->VolumeSerialNumber)->LowPart = (ULONG)volstats.f_fsid.__val[0];
+ ((PLARGE_INTEGER)&info->VolumeSerialNumber)->HighPart = (ULONG)volstats.f_fsid.__val[1];
+ ((PLARGE_INTEGER)&info->FileId)->QuadPart = st.st_ino;
+ }
+ }
+ break;
default:
FIXME("Unsupported class (%d)\n", class);
io->u.Status = STATUS_NOT_IMPLEMENTED;
diff --git a/include/winbase.h b/include/winbase.h
index eff5972..83c27f8 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -905,6 +905,15 @@ typedef struct _FILE_REMOTE_PROTOCOL_INFO {
} ProtocolSpecificReserved;
} FILE_REMOTE_PROTOCOL_INFO, *PFILE_REMOTE_PROTOCOL_INFO;
+typedef struct _FILE_ID_128 {
+ BYTE Identifier[16];
+} FILE_ID_128, *PFILE_ID_128;
+
+typedef struct _FILE_ID_INFORMATION {
+ ULONGLONG VolumeSerialNumber;
+ FILE_ID_128 FileId;
+} FILE_ID_INFORMATION, *PFILE_ID_INFORMATION;
+
#define PIPE_ACCESS_INBOUND 1
#define PIPE_ACCESS_OUTBOUND 2
#define PIPE_ACCESS_DUPLEX 3
--
2.9.3
More information about the wine-patches
mailing list