From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mx.groups.io with SMTP id smtpd.web12.12138.1591929716193995712 for ; Thu, 11 Jun 2020 19:41:56 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=e/99Y7lF; spf=pass (domain: intel.com, ip: 192.55.52.136, mailfrom: zhichao.gao@intel.com) IronPort-SDR: akM6mVYsXH3BMgXHcXNBuoVcKvw6mxVLNLzvNfmBHJCLUc72hw8xjlo4efuH80iVTlzwFNUWnM rEGnoP4SZkrg== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2020 19:41:55 -0700 IronPort-SDR: sy2EvMo+L5Y3ULJvfm5S85XKKSjJNihwbMWQmBo+EUpjHd6lV3iq0iLFgL4sGv1ZUI26HFFdm6 An+hXFi4OrTw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,501,1583222400"; d="scan'208";a="350390943" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by orsmga001.jf.intel.com with ESMTP; 11 Jun 2020 19:41:55 -0700 Received: from fmsmsx120.amr.corp.intel.com (10.18.124.208) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 11 Jun 2020 19:41:55 -0700 Received: from FMSEDG001.ED.cps.intel.com (10.1.192.133) by fmsmsx120.amr.corp.intel.com (10.18.124.208) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 11 Jun 2020 19:41:54 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.105) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 11 Jun 2020 19:41:54 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Pu3oLbahQ5SliaKAZBRVas8n82DQ975vR+lWs3Ih0eBaUorsBW91EdLP283FI4nx6RC06nHhkEioI1sQHVsU8gyPZzx3lQGCYEN609ffuLyoeLMZm4LiOTOnFLL8Owz4uWPi7XG9Q2Y8i66LN+TURZ6RWJMJTm/+e4PjeuAjt/Prm0Dqt3VKh9XMNd6Ro0L3ZTIwan0czf9L+CjtyFZVzMiqpR+oliK9GhvW+IPjidtQJna/PTH4TgQmxnzg+KPnkRLYvXTw0iqrVgHeVnbB0XsrPIyq+m7WG8nZFw40VWu+PiJ1zrW4Prl4ys84lS84fOhv5YqM2XtMNxDl2u3gyQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vrk6428zFnRMwHDVMSn2W9JQLfzkXqs4iokyeqjoVd4=; b=Ct/TT3+aixC0BMozb9DieIlh24NJa9TKXWK9wpffTlANhBqhJSM9kYH8JweeBvpiKXVZ9Y/ulvY51lKsQEUuASo6qUbvoFRwH6sLmisdvMBwkgXnHWqEsF6VJwieirmgQqyeSSv/DJzlkfDcHmzzE2mlaYLq6NL9gnRV7N7f9OzJ+FQuYA/qspC8YOG7xuDq+XtBvSdsKtDedtl61inJ8oxJ6zdmHMzN8zbW6+o9fiMK25sU0ksFJ87htSmX5OQQ/SCr7yTrEOJlnbG6nasRVO5Dz3qQxQ658UDDA2NCjfmlGN5d/8E82+JMpz0sBn9LMjKUDGm9+JXt47dF4IunPg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vrk6428zFnRMwHDVMSn2W9JQLfzkXqs4iokyeqjoVd4=; b=e/99Y7lFVjvpEgHEm2uSeYKAMsBHHuCK1duroRIak6O1S/hQswiQcLsc7QKUK2i7034nCBYqnr68nrjrEN8svo1+SUffHH72MQvbWehFBChhQ234SfKePys4O8oIsmACQf+A56qTlGK9rWUYq7vqbWt+2pz0nFzHbN2C3lMI9ZE= Received: from DM6PR11MB4425.namprd11.prod.outlook.com (2603:10b6:5:1d9::31) by DM6PR11MB4753.namprd11.prod.outlook.com (2603:10b6:5:2ac::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.20; Fri, 12 Jun 2020 02:41:52 +0000 Received: from DM6PR11MB4425.namprd11.prod.outlook.com ([fe80::ad34:e1fc:2e7b:d124]) by DM6PR11MB4425.namprd11.prod.outlook.com ([fe80::ad34:e1fc:2e7b:d124%3]) with mapi id 15.20.3088.023; Fri, 12 Jun 2020 02:41:52 +0000 From: "Gao, Zhichao" To: "devel@edk2.groups.io" , "Tomas.Pilar@arm.com" CC: "nd@arm.com" , "Ni, Ray" Subject: Re: [edk2-devel] [PATCH v2 6/6] ShellPkg/AcpiView: Add application wrapper Thread-Topic: [edk2-devel] [PATCH v2 6/6] ShellPkg/AcpiView: Add application wrapper Thread-Index: AQHWL5/9WpZuaIiNWE6kCD2vTKL24ajUU5zw Date: Fri, 12 Jun 2020 02:41:52 +0000 Message-ID: References: <20200521184421.2222-1-Tomas.Pilar@arm.com> <20200521184421.2222-7-Tomas.Pilar@arm.com> In-Reply-To: <20200521184421.2222-7-Tomas.Pilar@arm.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.2.0.6 authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.102.204.38] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 51238c19-a40e-40f4-7dd2-08d80e7a29fa x-ms-traffictypediagnostic: DM6PR11MB4753: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:626; x-forefront-prvs: 0432A04947 x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 9TF/18ISW6Pl/yI6SYLE7VN66AzkCqVjP0vfmSADASWZFqfRwWsnLuj+fT1cugMgW+uEMKaFoq0BW9TOgOlnF9h8qaZJcBezlkV/2P7mhUNe5ulCLq2o2Va/cj6jV6HE0e8Zm9afZQrPucFPHBS3q6/gCh10Hehtt1nGIIpB3RUDns9JCYsQqUCBwyriWSOHmQFVW6KxnZFxXK10B9hniW04P5ELXFEInMM/+iW6Ij+E7t1VoLeWBj5HQnfn4qOLoYenSWQzhDgzInB2bLRdvkgzlopZGbfCNfLVA9+nTGLjzgcbmVYkV9505AveUAbZAHh9GyglVkbuj2ZUlEQr1H8ursHNTsaAeMKFKqPXE2Ld9K+1zv6boR1yv9pZf3Nsqc+ioZuLnobrYGUpCjEWJg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR11MB4425.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(346002)(136003)(366004)(39860400002)(376002)(396003)(52536014)(5660300002)(71200400001)(966005)(86362001)(66446008)(66946007)(64756008)(83380400001)(2906002)(76116006)(8676002)(8936002)(66556008)(66476007)(478600001)(30864003)(110136005)(107886003)(6506007)(55016002)(53546011)(9686003)(316002)(4326008)(186003)(33656002)(7696005)(54906003)(26005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: uEN8FhtVDnmbVHwkNhpLETV3s7bulTpKBU4+SIutV1KO6XBqgwUSNwbjhsM8xnL6al9QYONzMhZ4P0s9M4Lqs3jvB9WyEy5Bl4YjnDKOHzhRv9GIIdB1BQYb6hMyiLUnw7QJ2Buw0qad6n5gAssjUj0r5sb4h5E67It8RaxUkTtwBlLPbvjkT7JshwYRwC9l5bZoaudziqg0h0i2ilEOjVhCysyCYcTMFekDIMwjcho39eUOJT9xGnRz+ZoJGrtg9L9Sg8Iq3e8SFw1s+wuenzmzYqgRy8uEcqpHUUtkv+/5Vm5oCCOxul+J4wLsIaDaB3qXI/UUNFtNZPBmV0bmSSxyWoJD6WP5ukW4pN6LXqdV3UlINGFBmlXKt6HdXp/Rspp3PSU3ocrS0460rjodEHRnL16k+HHd1J5pyZ+D0nt03m1rIBq3AtDEslG0b0Fv56pYn5NLHDpKpgKsnJB1WFjxp6Roe8nEzl+PFNCqrcElsK+IngEkdNlEHW0fIzMb MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 51238c19-a40e-40f4-7dd2-08d80e7a29fa X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Jun 2020 02:41:52.5266 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: QCWkgjJpF372yB5QTLrSJoOkJJ5sLzZQeeyDofsVZeBdoMhtYmWKpf86IwRwXQJKqO0/xXZ+j2z67HzjVK0ckQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB4753 Return-Path: zhichao.gao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable (1) There is one more easy with to add the help info. Put the help string in the uni file that has the same name with the module= file name. See below example from TftpApp.inf: // // String token ID of help message text. // Shell supports to find help message in the resource section of an appli= cation image if // .MAN file is not found. This global variable is added to make build too= l recognizes // that the help string is consumed by user and then build tool will add t= he string into // the resource section. Thus the application can use '-?' option to show = help message in // Shell. // GLOBAL_REMOVE_IF_UNREFERENCED EFI_STRING_ID mStringHelpTokenId =3D STRING_= TOKEN (STR_GET_HELP_TFTP); (2) I suggest to add the UefiShellAcpiViewCommandLib header file to make it vi= sible for other module. The application support to build in other module. I= t is better to put the lib visible in the inf config file. Consumers can be= clearly aware of which libs are required. When introduce new lib: a. add header file for the published interface b. add lib & header file in the package dec file c. add lib in the package dsc file [Components] for build only d. add the lib in the [LibraryClasses] for the package that would consum= e the lib (3) One white space in the end of line. It would break the Patchchecker.py. Se= e below. > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Tomas Pil= ar > (tpilar) > Sent: Friday, May 22, 2020 2:44 AM > To: devel@edk2.groups.io > Cc: nd@arm.com; Ni, Ray ; Gao, Zhichao > > Subject: [edk2-devel] [PATCH v2 6/6] ShellPkg/AcpiView: Add application = wrapper >=20 > Simple application wrapper that invokes the shell command wrapper for ac= piview. >=20 > This allows the AcpiView functionality to be used on platforms with olde= r > specifications of the UEFI shell or where the 'acpiview' command is not = built in > due to platform build configuration. >=20 > Furthermore, this app can be integrated into more comprehensive testing > frameworks as a single component of a more thorough specification compli= ance > validation strategy. >=20 > Cc: Ray Ni > Cc: Zhichao Gao > Signed-off-by: Tomas Pilar > --- > ShellPkg/Application/AcpiViewApp/AcpiViewApp.c | 189 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > +++++ > ShellPkg/Application/AcpiViewApp/AcpiViewApp.inf | 31 ++++++++++++ > ShellPkg/ShellPkg.dsc | 6 ++- > 3 files changed, 225 insertions(+), 1 deletion(-) >=20 > diff --git a/ShellPkg/Application/AcpiViewApp/AcpiViewApp.c > b/ShellPkg/Application/AcpiViewApp/AcpiViewApp.c > new file mode 100644 > index 000000000000..f83111629c21 > --- /dev/null > +++ b/ShellPkg/Application/AcpiViewApp/AcpiViewApp.c > @@ -0,0 +1,189 @@ > +/** @file > + Main file for AcpiViewApp application > + > + Copyright (c) 2020, ARM Limited. All rights reserved.
> + SPDX-License-Identifier: BSD-2-Clause-Patent **/ > + > +#include > +#include > +#include > + > +#include > + > +/** > + Execute the AcpiView command from UefiShellAcpiViewCommandLib. > + This function is pulled in directly from the library source. > +**/ > +SHELL_STATUS > +EFIAPI > +ShellCommandRunAcpiView ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE* SystemTable > + ); > + > +CHAR16 mAcpiViewAppHelp[] =3D > + u"\r\n" > + "Display ACPI Table information.\r\n" > + "\r\n" > + "AcpiViewApp.efi [[-?] | [[-l] | [-s AcpiTable [-d]]] [-q] [-h]]\r\n" > + " \r\n" > + " -l - Display list of installed ACPI Tables.\r\n" > + " -s - Display only the specified AcpiTable type and only support si= ngle\r\n" > + " invocation option.\r\n" > + " AcpiTable : The required ACPI Table type.\r\n" > + " -d - Generate a binary file dump of the specified AcpiTable.\r\n" > + " -q - Quiet. Suppress errors and warnings. Disables consistency che= cks.\r\n" > + " -h - Enable colour highlighting.\r\n" > + " -? - Show help.\r\n" > + " \r\n" > + " This program is provided to allow examination of ACPI table values= from " > + "the\r\n" > + " UEFI Shell. This can help with investigations, especially at that = " > + "stage\r\n" > + " where the tables are not enabling an OS to boot.\r\n" > + " The program is not exhaustive, and only encapsulates detailed know= ledge " > + "of a\r\n" > + " limited number of table types.\r\n" > + " \r\n" > + " Default behaviour is to display the content of all tables installe= d.\r\n" > + " 'Known' table types (listed in NOTES below) will be parsed and " > + "displayed\r\n" > + " with descriptions and field values. Where appropriate a degree of\= r\n" > + " consistency checking is done and errors may be reported in the out= put.\r\n" > + " Other table types will be displayed as an array of Hexadecimal byt= es.\r\n" > + " \r\n" > + " To facilitate debugging, the -s and -d options can be used to gene= rate " > + "a\r\n" > + " binary file image of a table that can be copied elsewhere for " > + "investigation\r\n" > + " using tools such as those provided by acpica.org. This is especial= ly\r\n" > + " relevant for AML type tables like DSDT and SSDT.\r\n" > + " \r\n" > + "NOTES:\r\n" > + " 1. The AcpiTable parameter can match any installed table type.\r\n= " > + " Tables without specific handling will be displayed as a raw hex= dump " > + "(or\r\n" > + " dumped to a file if -d is used).\r\n" > + " 2. -s option supports to display the specified AcpiTable type that= is " > + "present\r\n" > + " in the system. For normal type AcpiTable, it would display the = data of " > + "the\r\n" > + " AcpiTable and AcpiTable header. The following type may contain = header " > + "type\r\n" > + " other than AcpiTable header. The actual header can refer to the= ACPI " > + "spec\r\n" > + " 6.3\r\n" > + " Extra A. Particular types:\r\n" > + " APIC - Multiple APIC Description Table (MADT)\r\n" > + " BGRT - Boot Graphics Resource Table\r\n" > + " DBG2 - Debug Port Table 2\r\n" > + " DSDT - Differentiated System Description Table\r\n" > + " FACP - Fixed ACPI Description Table (FADT)\r\n" > + " GTDT - Generic Timer Description Table\r\n" > + " IORT - IO Remapping Table\r\n" > + " MCFG - Memory Mapped Config Space Base Address Description > Table\r\n" > + " PPTT - Processor Properties Topology Table\r\n" > + " RSDP - Root System Description Pointer\r\n" > + " SLIT - System Locality Information Table\r\n" > + " SPCR - Serial Port Console Redirection Table\r\n" > + " SRAT - System Resource Affinity Table\r\n" > + " SSDT - Secondary SystemDescription Table\r\n" > + " XSDT - Extended System Description Table\r\n" > + " \r\n" > + " Table details correspond to those in 'Advanced Configuration and P= ower\r\n" > + " Interface Specification' Version 6.3 [January 2019]\r\n" > + " (https://uefi.org/specifications)\r\n" > + " " > + " \r\n" > + " NOTE: The nature of the ACPI standard means that almost all tables= in " > + "6.1\r\n" > + " will be 'backwards compatible' with prior version of the " > + "specification\r\n" > + " in terms of structure, so formatted output should be correct= . The " > + "main\r\n" > + " exception will be that previously 'reserved' fields will be = " > + "reported\r\n" > + " with new names, where they have been added in later versions= of " > + "the\r\n" > + " specification.\r\n" > + " \r\n" > + " \r\n" > + "EXAMPLES:\r\n" > + " * To display a list of the installed table types:\r\n" > + " fs0:\\> AcpiViewApp.efi -l\r\n" > + " \r\n" > + " * To parse and display a specific table type:\r\n" > + " fs0:\\> AcpiViewApp.efi -s GTDT\r\n" > + " \r\n" > + " * To save a binary dump of the contents of a table to a file\r\n" > + " in the current working directory:\r\n" > + " fs0:\\> AcpiViewApp.efi -s DSDT -d\r\n" > + " \r\n" > + " * To display contents of all ACPI tables:\r\n" > + " fs0:\\> AcpiViewApp.efi\r\n" > + " \r\n"; > + > +/** > + Determine if the user wants to display by checking for presence > + of '/?' or '--help' on command line. We cannot override '-?' shell > + command line handling. > + > + @retval EFI_SUCCESS No help was printed > + @retval EFI_INVALID_PARAMETER Help was printed > +**/ > +STATIC > +EFI_STATUS > +CheckForHelpRequest ( > + EFI_HANDLE ImageHandle > + ) > +{ > + EFI_STATUS Status; > + EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters; > + UINTN Index; > + > + Status =3D gBS->HandleProtocol ( > + ImageHandle, Please remove the white space in the end of above line. Thanks, Zhichao > + &gEfiShellParametersProtocolGuid, > + (VOID **)&ShellParameters > + ); > + if (EFI_ERROR(Status)) { > + return Status; > + } > + > + for (Index =3D 1; Index < ShellParameters->Argc; Index++) { > + if ((StrCmp (ShellParameters->Argv[Index], L"/?") =3D=3D 0) || > + (StrCmp (ShellParameters->Argv[Index], L"--help") =3D=3D 0)) { > + Print (mAcpiViewAppHelp); > + return EFI_INVALID_PARAMETER; > + } > + } > + > + return EFI_SUCCESS; > +} > + > + > +/** > + Application Entry Point wrapper around the shell command > + > + @param[in] ImageHandle Handle to the Image (NULL if internal). > + @param[in] SystemTable Pointer to the System Table (NULL if internal= ). > +**/ > +EFI_STATUS > +EFIAPI > +AcpiViewAppMain ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE *SystemTable > + ) > +{ > + EFI_STATUS Status; > + > + Status =3D CheckForHelpRequest (ImageHandle); > + > + // Do not run code if help was printed if (Status !=3D > + EFI_INVALID_PARAMETER) { > + Status =3D ShellCommandRunAcpiView (gImageHandle, SystemTable); } > + > + return Status; > +} > diff --git a/ShellPkg/Application/AcpiViewApp/AcpiViewApp.inf > b/ShellPkg/Application/AcpiViewApp/AcpiViewApp.inf > new file mode 100644 > index 000000000000..28e724fa1909 > --- /dev/null > +++ b/ShellPkg/Application/AcpiViewApp/AcpiViewApp.inf > @@ -0,0 +1,31 @@ > +## @file > +# EFI application that displays and verifies ACPI tables # # > +Copyright (c) 2020, ARM Limited. All rights reserved.
# # > +SPDX-License-Identifier: BSD-2-Clause-Patent # # ## > + > +[Defines] > + INF_VERSION =3D 0x0001001B > + BASE_NAME =3D AcpiViewApp > + FILE_GUID =3D 46361B5B-AF17-41FF-95F9-E1BCE08435= B9 > + MODULE_TYPE =3D UEFI_APPLICATION > + VERSION_STRING =3D 1.0 > + ENTRY_POINT =3D AcpiViewAppMain > + > +[Sources.common] > + AcpiViewApp.c > + > +[Packages] > + MdeModulePkg/MdeModulePkg.dec > + MdePkg/MdePkg.dec > + ShellPkg/ShellPkg.dec > + > +[LibraryClasses] > + UefiBootServicesTableLib > + UefiLib > + BaseLib > + UefiApplicationEntryPoint > diff --git a/ShellPkg/ShellPkg.dsc b/ShellPkg/ShellPkg.dsc index > b7ee856b3a16..1ed82ee7aca3 100644 > --- a/ShellPkg/ShellPkg.dsc > +++ b/ShellPkg/ShellPkg.dsc > @@ -2,7 +2,7 @@ > # Shell Package > # > # Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved. -# > Copyright (c) 2018, Arm Limited. All rights reserved.
> +# Copyright (c) 2018 - 2020, Arm Limited. All rights reserved.
> # Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All ri= ghts > reserved.
# > # SPDX-License-Identifier: BSD-2-Clause-Patent > @@ -143,6 +143,10 @@ [Components] > gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize|FALSE > } > ShellPkg/DynamicCommand/DpDynamicCommand/DpApp.inf > + ShellPkg/Application/AcpiViewApp/AcpiViewApp.inf { > + > + > + NULL|ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCom > + mandLib.inf > + } >=20 > [BuildOptions] > *_*_*_CC_FLAGS =3D -D DISABLE_NEW_DEPRECATED_INTERFACES > -- > 2.24.1.windows.2 >=20 >=20 >=20 >=20