On 31.12.2016 16:50, Jonathan Doron wrote:
Signed-off-by: Jonathan Doron jond@wizery.com
dlls/ntdll/file.c | 19 ++++++++++++++++++- include/winternl.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;
}
}
default: FIXME("Unsupported class (%d)\n", class); io->u.Status = STATUS_NOT_IMPLEMENTED;break;
diff --git a/include/winternl.h b/include/winternl.h index 891b6a7..2f2ea86 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -571,6 +571,15 @@ typedef struct _FILE_INTERNAL_INFORMATION { LARGE_INTEGER IndexNumber; } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
+typedef struct _FILE_ID_128 {
- UCHAR Identifier[16];
+} FILE_ID_128, *PFILE_ID_128;
Windows SDK has it in winnt.h, using BYTE instead of UCHAR.
+typedef struct _FILE_ID_INFORMATION {
- ULONGLONG VolumeSerialNumber;
- FILE_ID_128 FileId;
+} FILE_ID_INFORMATION, *PFILE_ID_INFORMATION;
This one should go to winbase.h, as FILE_ID_INFO.
typedef struct _FILE_EA_INFORMATION { ULONG EaSize; } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;