Add file_id to volume queries, send real times and attributes back.
This commit is contained in:
parent
117e9053f4
commit
06c2dfd8d2
@ -161,7 +161,7 @@ void guac_rdpdr_fs_process_close(guac_rdpdr_device* device,
|
||||
}
|
||||
|
||||
void guac_rdpdr_fs_process_volume_info(guac_rdpdr_device* device, wStream* input_stream,
|
||||
int completion_id) {
|
||||
int file_id, int completion_id) {
|
||||
|
||||
int fs_information_class, length;
|
||||
|
||||
@ -178,23 +178,28 @@ void guac_rdpdr_fs_process_volume_info(guac_rdpdr_device* device, wStream* input
|
||||
switch (fs_information_class) {
|
||||
|
||||
case FileFsVolumeInformation:
|
||||
guac_rdpdr_fs_process_query_volume_info(device, input_stream, completion_id);
|
||||
guac_rdpdr_fs_process_query_volume_info(device, input_stream,
|
||||
file_id, completion_id);
|
||||
break;
|
||||
|
||||
case FileFsSizeInformation:
|
||||
guac_rdpdr_fs_process_query_size_info(device, input_stream, completion_id);
|
||||
guac_rdpdr_fs_process_query_size_info(device, input_stream,
|
||||
file_id, completion_id);
|
||||
break;
|
||||
|
||||
case FileFsDeviceInformation:
|
||||
guac_rdpdr_fs_process_query_device_info(device, input_stream, completion_id);
|
||||
guac_rdpdr_fs_process_query_device_info(device, input_stream,
|
||||
file_id, completion_id);
|
||||
break;
|
||||
|
||||
case FileFsAttributeInformation:
|
||||
guac_rdpdr_fs_process_query_attribute_info(device, input_stream, completion_id);
|
||||
guac_rdpdr_fs_process_query_attribute_info(device, input_stream,
|
||||
file_id, completion_id);
|
||||
break;
|
||||
|
||||
case FileFsFullSizeInformation:
|
||||
guac_rdpdr_fs_process_query_full_size_info(device, input_stream, completion_id);
|
||||
guac_rdpdr_fs_process_query_full_size_info(device, input_stream,
|
||||
file_id, completion_id);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -95,7 +95,7 @@ void guac_rdpdr_fs_process_device_control(guac_rdpdr_device* device, wStream* in
|
||||
* separate file.
|
||||
*/
|
||||
void guac_rdpdr_fs_process_volume_info(guac_rdpdr_device* device, wStream* input_stream,
|
||||
int completion_id);
|
||||
int file_id, int completion_id);
|
||||
|
||||
/**
|
||||
* Handles a Server Drive Set Volume Information Request. Currently, this
|
||||
|
@ -56,7 +56,8 @@ void guac_rdpdr_fs_process_query_basic_info(guac_rdpdr_device* device, wStream*
|
||||
int file_id, int completion_id) {
|
||||
|
||||
wStream* output_stream = Stream_New(NULL, 60);
|
||||
/*guac_rdpdr_fs_file* file = device->files[file_id];*/
|
||||
guac_rdpdr_fs_data* data = (guac_rdpdr_fs_data*) device->data;
|
||||
guac_rdpdr_fs_file* file = &(data->files[file_id]);
|
||||
|
||||
/* Write header */
|
||||
Stream_Write_UINT16(output_stream, RDPDR_CTYP_CORE);
|
||||
@ -68,12 +69,19 @@ void guac_rdpdr_fs_process_query_basic_info(guac_rdpdr_device* device, wStream*
|
||||
Stream_Write_UINT32(output_stream, STATUS_SUCCESS);
|
||||
|
||||
Stream_Write_UINT32(output_stream, 18 + GUAC_FILESYSTEM_NAME_LENGTH);
|
||||
Stream_Write_UINT64(output_stream, WINDOWS_TIME(0)); /* CreationTime */
|
||||
Stream_Write_UINT64(output_stream, WINDOWS_TIME(0)); /* LastAccessTime */
|
||||
Stream_Write_UINT64(output_stream, WINDOWS_TIME(0)); /* LastWriteTime */
|
||||
Stream_Write_UINT64(output_stream, WINDOWS_TIME(0)); /* ChangeTime */
|
||||
Stream_Write_UINT32(output_stream, FILE_ATTRIBUTE_NORMAL); /* FileAttributes */
|
||||
Stream_Write_UINT32(output_stream, 0); /* Reserved */
|
||||
Stream_Write_UINT64(output_stream, WINDOWS_TIME(file->ctime)); /* CreationTime */
|
||||
Stream_Write_UINT64(output_stream, WINDOWS_TIME(file->atime)); /* LastAccessTime */
|
||||
Stream_Write_UINT64(output_stream, WINDOWS_TIME(file->mtime)); /* LastWriteTime */
|
||||
Stream_Write_UINT64(output_stream, WINDOWS_TIME(file->mtime)); /* ChangeTime */
|
||||
|
||||
/* FileAttributes */
|
||||
if (file->type == GUAC_RDPDR_FS_DIRECTORY)
|
||||
Stream_Write_UINT32(output_stream, FILE_ATTRIBUTE_DIRECTORY);
|
||||
else
|
||||
Stream_Write_UINT32(output_stream, FILE_ATTRIBUTE_NORMAL); /* FileAttributes */
|
||||
|
||||
/* Reserved */
|
||||
Stream_Write_UINT32(output_stream, 0);
|
||||
|
||||
svc_plugin_send((rdpSvcPlugin*) device->rdpdr, output_stream);
|
||||
|
||||
|
@ -52,9 +52,11 @@
|
||||
#include <freerdp/utils/svc_plugin.h>
|
||||
|
||||
void guac_rdpdr_fs_process_query_volume_info(guac_rdpdr_device* device, wStream* input_stream,
|
||||
int completion_id) {
|
||||
int file_id, int completion_id) {
|
||||
|
||||
wStream* output_stream = Stream_New(NULL, 38 + GUAC_FILESYSTEM_NAME_LENGTH);
|
||||
guac_rdpdr_fs_data* data = (guac_rdpdr_fs_data*) device->data;
|
||||
guac_rdpdr_fs_file* file = &(data->files[file_id]);
|
||||
|
||||
/* Write header */
|
||||
Stream_Write_UINT16(output_stream, RDPDR_CTYP_CORE);
|
||||
@ -66,8 +68,8 @@ void guac_rdpdr_fs_process_query_volume_info(guac_rdpdr_device* device, wStream*
|
||||
Stream_Write_UINT32(output_stream, STATUS_SUCCESS);
|
||||
|
||||
Stream_Write_UINT32(output_stream, 18 + GUAC_FILESYSTEM_NAME_LENGTH);
|
||||
Stream_Write_UINT64(output_stream, WINDOWS_TIME(0)); /* VolumeCreationTime */
|
||||
Stream_Write(output_stream, "GUAC", 4); /* VolumeSerialNumber */
|
||||
Stream_Write_UINT64(output_stream, WINDOWS_TIME(file->ctime)); /* VolumeCreationTime */
|
||||
Stream_Write(output_stream, "GUAC", 4); /* VolumeSerialNumber */
|
||||
Stream_Write_UINT32(output_stream, GUAC_FILESYSTEM_NAME_LENGTH);
|
||||
Stream_Write_UINT8(output_stream, FALSE); /* SupportsObjects */
|
||||
Stream_Write_UINT8(output_stream, 0); /* Reserved */
|
||||
@ -78,28 +80,28 @@ void guac_rdpdr_fs_process_query_volume_info(guac_rdpdr_device* device, wStream*
|
||||
}
|
||||
|
||||
void guac_rdpdr_fs_process_query_size_info(guac_rdpdr_device* device, wStream* input_stream,
|
||||
int completion_id) {
|
||||
int file_id, int completion_id) {
|
||||
/* STUB */
|
||||
guac_client_log_error(device->rdpdr->client,
|
||||
"Unimplemented stub: guac_rdpdr_fs_query_size_info");
|
||||
}
|
||||
|
||||
void guac_rdpdr_fs_process_query_device_info(guac_rdpdr_device* device, wStream* input_stream,
|
||||
int completion_id) {
|
||||
int file_id, int completion_id) {
|
||||
/* STUB */
|
||||
guac_client_log_error(device->rdpdr->client,
|
||||
"Unimplemented stub: guac_rdpdr_fs_query_devive_info");
|
||||
}
|
||||
|
||||
void guac_rdpdr_fs_process_query_attribute_info(guac_rdpdr_device* device, wStream* input_stream,
|
||||
int completion_id) {
|
||||
int file_id, int completion_id) {
|
||||
/* STUB */
|
||||
guac_client_log_error(device->rdpdr->client,
|
||||
"Unimplemented stub: guac_rdpdr_fs_query_attribute_info");
|
||||
}
|
||||
|
||||
void guac_rdpdr_fs_process_query_full_size_info(guac_rdpdr_device* device, wStream* input_stream,
|
||||
int completion_id) {
|
||||
int file_id, int completion_id) {
|
||||
/* STUB */
|
||||
guac_client_log_error(device->rdpdr->client,
|
||||
"Unimplemented stub: guac_rdpdr_fs_query_full_size_info");
|
||||
|
@ -60,31 +60,31 @@
|
||||
* file system is mounted."
|
||||
*/
|
||||
void guac_rdpdr_fs_process_query_volume_info(guac_rdpdr_device* device, wStream* input_stream,
|
||||
int completion_id);
|
||||
int file_id, int completion_id);
|
||||
|
||||
/**
|
||||
* Processes a query request for FileFsSizeInformation.
|
||||
*/
|
||||
void guac_rdpdr_fs_process_query_size_info(guac_rdpdr_device* device, wStream* input_stream,
|
||||
int completion_id);
|
||||
int file_id, int completion_id);
|
||||
|
||||
/**
|
||||
* Processes a query request for FileFsAttributeInformation.
|
||||
*/
|
||||
void guac_rdpdr_fs_process_query_attribute_info(guac_rdpdr_device* device, wStream* input_stream,
|
||||
int completion_id);
|
||||
int file_id, int completion_id);
|
||||
|
||||
/**
|
||||
* Processes a query request for FileFsFullSizeInformation.
|
||||
*/
|
||||
void guac_rdpdr_fs_process_query_full_size_info(guac_rdpdr_device* device, wStream* input_stream,
|
||||
int completion_id);
|
||||
int file_id, int completion_id);
|
||||
|
||||
/**
|
||||
* Processes a query request for FileFsDeviceInformation.
|
||||
*/
|
||||
void guac_rdpdr_fs_process_query_device_info(guac_rdpdr_device* device, wStream* input_stream,
|
||||
int completion_id);
|
||||
int file_id, int completion_id);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -99,7 +99,7 @@ static void guac_rdpdr_device_fs_iorequest_handler(guac_rdpdr_device* device,
|
||||
|
||||
/* Query volume (drive) information */
|
||||
case IRP_MJ_QUERY_VOLUME_INFORMATION:
|
||||
guac_rdpdr_fs_process_volume_info(device, input_stream, completion_id);
|
||||
guac_rdpdr_fs_process_volume_info(device, input_stream, file_id, completion_id);
|
||||
break;
|
||||
|
||||
/* Set volume (drive) information */
|
||||
|
Loading…
Reference in New Issue
Block a user