Blame src/fs/ntapi_tt_open_volume_by_guid.c

0e25b0
/********************************************************/
0e25b0
/*  ntapi: Native API core library                      */
59d585
/*  Copyright (C) 2013--2021  Z. Gilboa                 */
0e25b0
/*  Released under GPLv2 and GPLv3; see COPYING.NTAPI.  */
0e25b0
/********************************************************/
0e25b0
0e25b0
#include <ntapi/ntapi.h>
0e25b0
#include <ntapi/nt_file.h>
0e25b0
#include "ntapi_impl.h"
0e25b0
0e25b0
struct __ntapi_volume_name {
0e25b0
	wchar16_t		global[4];
0e25b0
	wchar16_t		volume[6];
0e25b0
	nt_guid_str_utf16	guid;
0e25b0
};
0e25b0
0e25b0
int32_t	__stdcall __ntapi_tt_open_volume_by_guid(
0e25b0
	__out	void **			hfile,
0e25b0
	__in	const nt_guid *		guid,
0e25b0
	__in	uint32_t		access,
0e25b0
	__in	nt_object_attributes *	oaarg,
0e25b0
	__out	nt_io_status_block *	iosb,
0e25b0
	__in	uint32_t		share,
0e25b0
	__in	uint32_t		options)
0e25b0
{
0e25b0
	struct __ntapi_volume_name	name;
0e25b0
	nt_unicode_string		path;
0e25b0
	nt_object_attributes		oa;
0e25b0
0e25b0
	if (!oaarg)
0e25b0
		oaarg = &(nt_object_attributes){sizeof(*oaarg),0,0,0,0,0};
0e25b0
0e25b0
	else if (oaarg->obj_name)
0e25b0
		return NT_STATUS_INVALID_PARAMETER;
0e25b0
0e25b0
	name.global[0] = '\\';
0e25b0
	name.global[1] = '?';
0e25b0
	name.global[2] = '?';
0e25b0
	name.global[3] = '\\';
0e25b0
0e25b0
	name.volume[0] = 'V';
0e25b0
	name.volume[1] = 'o';
0e25b0
	name.volume[2] = 'l';
0e25b0
	name.volume[3] = 'u';
0e25b0
	name.volume[4] = 'm';
0e25b0
	name.volume[5] = 'e';
0e25b0
0e25b0
	__ntapi->tt_guid_to_string_utf16(
0e25b0
		guid,&name.guid);
0e25b0
0e25b0
	path.strlen = sizeof(name);
0e25b0
	path.maxlen = 0;
0e25b0
	path.buffer = &name.global[0];
0e25b0
0e25b0
	oa.len      = oaarg->len;
0e25b0
	oa.root_dir = oaarg->root_dir;
0e25b0
	oa.obj_name = &pat;;
0e25b0
	oa.obj_attr = oaarg->obj_attr;
0e25b0
	oa.sec_desc = oaarg->sec_desc;
0e25b0
	oa.sec_qos  = oaarg->sec_qos;
0e25b0
0e25b0
	return __ntapi->zw_open_file(
0e25b0
		hfile,access,&oa,iosb,
0e25b0
		share,options);
0e25b0
}