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