diff --git a/include/ntapi/nt_port.h b/include/ntapi/nt_port.h index ff1cdb9..8021768 100644 --- a/include/ntapi/nt_port.h +++ b/include/ntapi/nt_port.h @@ -339,6 +339,12 @@ typedef int32_t __stdcall ntapi_tt_port_type_from_guid( __in const nt_guid * guid); +typedef int32_t __stdcall ntapi_tt_port_prefix_from_type( + __out wchar16_t (*prefix)[6], + __in nt_port_type type, + __in nt_port_subtype subtype); + + typedef int32_t __stdcall ntapi_tt_port_generate_keys( __out nt_port_keys * keys); diff --git a/include/ntapi/ntapi.h b/include/ntapi/ntapi.h index 9fcb896..93970e4 100644 --- a/include/ntapi/ntapi.h +++ b/include/ntapi/ntapi.h @@ -550,6 +550,7 @@ typedef struct _ntapi_vtbl { /* nt_port.h */ ntapi_tt_port_guid_from_type * tt_port_guid_from_type; ntapi_tt_port_type_from_guid * tt_port_type_from_guid; + ntapi_tt_port_prefix_from_type * tt_port_prefix_from_type; ntapi_tt_port_generate_keys * tt_port_generate_keys; ntapi_tt_port_format_keys * tt_port_format_keys; ntapi_tt_port_name_from_attr * tt_port_name_from_attr; diff --git a/src/internal/ntapi.c b/src/internal/ntapi.c index 51db364..4941400 100644 --- a/src/internal/ntapi.c +++ b/src/internal/ntapi.c @@ -386,6 +386,7 @@ static int32_t __fastcall __ntapi_init_once(ntapi_vtbl ** pvtbl) __ntapi->csr_port_handle = __ntapi_csr_port_handle; __ntapi->tt_port_guid_from_type = __ntapi_tt_port_guid_from_type; __ntapi->tt_port_type_from_guid = __ntapi_tt_port_type_from_guid; + __ntapi->tt_port_prefix_from_type = __ntapi_tt_port_prefix_from_type; __ntapi->tt_port_generate_keys = __ntapi_tt_port_generate_keys; __ntapi->tt_port_format_keys = __ntapi_tt_port_format_keys; __ntapi->tt_port_name_from_attr = __ntapi_tt_port_name_from_attr; diff --git a/src/internal/ntapi_fnapi.h b/src/internal/ntapi_fnapi.h index c41dc02..8e900ce 100644 --- a/src/internal/ntapi_fnapi.h +++ b/src/internal/ntapi_fnapi.h @@ -202,6 +202,7 @@ NTAPI_UFN(tt_wait_for_dummy_event); /* nt_port.h */ NTAPI_UFN(tt_port_guid_from_type); NTAPI_UFN(tt_port_type_from_guid); +NTAPI_UFN(tt_port_prefix_from_type); NTAPI_UFN(tt_port_generate_keys); NTAPI_UFN(tt_port_format_keys); NTAPI_UFN(tt_port_name_from_attr); diff --git a/src/port/ntapi_port_name_helper.c b/src/port/ntapi_port_name_helper.c index e28df8c..fe6a684 100644 --- a/src/port/ntapi_port_name_helper.c +++ b/src/port/ntapi_port_name_helper.c @@ -87,6 +87,29 @@ int32_t __stdcall __ntapi_tt_port_type_from_guid( } +int32_t __stdcall __ntapi_tt_port_prefix_from_type( + __out wchar16_t (*prefix)[6], + __in nt_port_type type, + __in nt_port_subtype subtype) +{ + const wchar16_t * svc_prefix; + + if ((type >= NT_PORT_TYPE_CAP) || (subtype >= NT_PORT_SUBTYPE_CAP)) + return NT_STATUS_INVALID_PARAMETER; + + svc_prefix = __port_service_prefixes[type][subtype]; + + prefix[0][0] = svc_prefix[0]; + prefix[0][1] = svc_prefix[1]; + prefix[0][2] = svc_prefix[2]; + prefix[0][3] = svc_prefix[3]; + prefix[0][4] = svc_prefix[4]; + prefix[0][5] = svc_prefix[5]; + + return NT_STATUS_SUCCESS; +} + + int32_t __stdcall __ntapi_tt_port_generate_keys( __out nt_port_keys * keys) {