ntdll: Implement FSCTL_GET_OBJECT_ID to retrieve a file id.
It can be used instead of FileIdInformation to avoid depending on mountmgr. Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
6ff0bb786c
commit
251335cdf3
|
@ -5666,6 +5666,29 @@ NTSTATUS WINAPI NtFsControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUTINE ap
|
|||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case FSCTL_GET_OBJECT_ID:
|
||||
{
|
||||
FILE_OBJECTID_BUFFER *info = out_buffer;
|
||||
int fd, needs_close;
|
||||
struct stat st;
|
||||
|
||||
io->Information = 0;
|
||||
if (out_size >= sizeof(*info))
|
||||
{
|
||||
status = server_get_unix_fd( handle, 0, &fd, &needs_close, NULL, NULL );
|
||||
if (status) break;
|
||||
fstat( fd, &st );
|
||||
if (needs_close) close( fd );
|
||||
memset( info, 0, sizeof(*info) );
|
||||
memcpy( info->ObjectId, &st.st_dev, sizeof(st.st_dev) );
|
||||
memcpy( info->ObjectId + 8, &st.st_ino, sizeof(st.st_ino) );
|
||||
io->Information = sizeof(*info);
|
||||
}
|
||||
else status = STATUS_BUFFER_TOO_SMALL;
|
||||
break;
|
||||
}
|
||||
|
||||
case FSCTL_SET_SPARSE:
|
||||
TRACE("FSCTL_SET_SPARSE: Ignoring request\n");
|
||||
io->Information = 0;
|
||||
|
|
|
@ -744,6 +744,21 @@ typedef struct _FILE_PIPE_LOCAL_INFORMATION {
|
|||
#define FILE_PIPE_CONNECTED_STATE 0x00000003
|
||||
#define FILE_PIPE_CLOSING_STATE 0x00000004
|
||||
|
||||
typedef struct _FILE_OBJECTID_BUFFER
|
||||
{
|
||||
BYTE ObjectId[16];
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
BYTE BirthVolumeId[16];
|
||||
BYTE BirthObjectId[16];
|
||||
BYTE DomainId[16];
|
||||
} DUMMYSTRUCTNAME;
|
||||
BYTE ExtendedInfo[48];
|
||||
} DUMMYUNIONNAME;
|
||||
} FILE_OBJECTID_BUFFER, *PFILE_OBJECTID_BUFFER;
|
||||
|
||||
typedef struct _FILE_OBJECTID_INFORMATION {
|
||||
LONGLONG FileReference;
|
||||
UCHAR ObjectId[16];
|
||||
|
|
Loading…
Reference in New Issue