From e5ebe67e3837cf4da0ae2c3d00c72a244b8f202f Mon Sep 17 00:00:00 2001 From: David Disseldorp Date: Thu, 15 Mar 2012 14:43:26 +0100 Subject: idl: add offload data transfer ioctl types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For future use in handling FSCTL_OFFLOAD_READ, FSCTL_OFFLOAD_WRITE and IOCTL_STORAGE_QUERY_PROPERTY requests new to Windows 8. Based on preliminary data structure documentation from: http://msdn.microsoft.com/en-us/library/windows/hardware/hh451101%28v=vs.85%29.aspx http://msdn.microsoft.com/en-us/library/windows/hardware/hh451122%28v=vs.85%29.aspx http://msdn.microsoft.com/en-us/library/windows/desktop/hh449428%28v=vs.85%29.aspx http://msdn.microsoft.com/en-us/library/windows/hardware/hh451469%28v=vs.85%29.aspx Signed-off-by: Andreas Schneider Signed-off-by: Lars Müller Autobuild-User: David Disseldorp Autobuild-Date: Thu Mar 15 18:40:11 CET 2012 on sn-devel-104 --- librpc/idl/ioctl.idl | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'librpc') diff --git a/librpc/idl/ioctl.idl b/librpc/idl/ioctl.idl index 1c319eafec..4672777909 100644 --- a/librpc/idl/ioctl.idl +++ b/librpc/idl/ioctl.idl @@ -30,4 +30,61 @@ interface copychunk uint32 chunk_bytes_written; uint32 total_bytes_written; } srv_copychunk_rsp; + + typedef [public] struct { + uint32 version; + uint32 size; + uint32 maximum_token_lifetime; + uint32 default_token_lifetime; + hyper maximum_xfer_size; + hyper optimal_xfer_count; + uint32 maximum_data_descriptors; + uint32 maximum_xfer_length_per_descriptor; + uint32 optimal_xfer_length_per_descriptor; + uint16 optimal_xfer_length_granularity; + uint8 reserved[2]; + } device_copy_offload_descriptor; + + /* XXX: 0x00000001 is unconfirmed */ + const uint32 STORAGE_OFFLOAD_TOKEN_TYPE_ZERO_DATA = 0x00000001; + typedef [public] struct { + uint32 token_type; + uint8 reserved[2]; + uint16 token_id_len; + [size_is(token_id_len)] uint8 token[]; + } storage_offload_token; + + typedef [public] struct { + uint32 size; + uint32 flags; + uint32 token_time_to_live; + uint32 reserved; + hyper file_offset; + hyper length; + } fsctl_offload_read_input; + + const uint32 OFFLOAD_READ_FLAG_FILE_TOO_SMALL = 0x00000001; + const uint32 OFFLOAD_READ_FLAG_ALL_ZERO_BEYOND_RANGE = 0x00000002; + const uint32 OFFLOAD_READ_FLAG_CANNOT_OFFLOAD_BEYOND_RANGE = 0x00000004; + typedef [public] struct { + uint32 size; + uint32 flags; + hyper xfer_length; + uint8 token[512]; + } fsctl_offload_read_output; + + typedef [public] struct { + uint32 size; + uint32 flags; + hyper file_offset; + hyper copy_length; + hyper xfer_offset; + uint8 token[512]; + } fsctl_offload_write_input; + + typedef [public] struct { + uint32 size; + uint32 flags; + hyper length_written; + } fsctl_offload_write_output; } -- cgit