4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This file contains an 'Intel UEFI Application' and is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync licensed for Intel CPUs and chipsets under the terms of your
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync license agreement with Intel or your vendor. This file may
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync be modified by the user, subject to additional terms of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync license agreement
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2011 Intel Corporation. All rights reserved
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis software and associated documentation (if any) is furnished
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncunder a license and may only be used or copied in accordance
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwith the terms of the license. Except as permitted by such
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynclicense, no part of this software or documentation may be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncreproduced, stored in a retrieval system, or transmitted in any
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncform or by any means without the express written consent of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIntel Corporation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Display the handles in the system
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Respond with the handles in the system
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param [in] SocketFD The socket's file descriptor to add to the list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param [in] pPort The WSDT_PORT structure address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param [out] pbDone Address to receive the request completion status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The request was successfully processed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 3, 2, 1, 0, 5, 4, 7, 6, 8, 9, 10, 11, 12, 13, 14, 15 };
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Send the handles page
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for ( ; ; ) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Send the page header
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = HttpPageHeader ( SocketFD, pPort, L"Handle Database" );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Build the table header
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync "<h1>Handle Database</h1>\r\n"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync "<table border=\"1\">\r\n"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync " <tr bgcolor=\"c0c0ff\"><th>Handle</th><th>Protocol Guids</th></tr>\r\n" );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Determine the number of handles in the database
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Allocate space for the handles
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gBS->AllocatePool ( EfiRuntimeServicesData,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get the list of handles
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Entries = LengthInBytes / sizeof ( *pHandleArray );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Build the table entry for this page
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync "<tr><td><code>0x" );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for ( Shift = ( sizeof ( Shift ) << 3 ) - 4; 0 <= Shift; Shift -= 4 ) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Convert the next address nibble to ANSI hex
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Display the address digit
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Start the second column
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync "</code></td><td><code>\r\n" );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Determine the number of protocols connected to this handle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Display the guid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Separate the portions of the GUID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // 99E87DCF-6162-40c5-9FA1-32111F5197F7
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Display the GUID digits
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Convert the next address nibble to ANSI hex
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Display the address digit
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Separate each GUID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync "<br/>\r\n" );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Set the next protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Free the GUID array
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // End the row
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync "</code></td></tr>\r\n" );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Set the next handle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Done with the handle array
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Build the table trailer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync "</table>\r\n" );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Send the page trailer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = HttpPageTrailer ( SocketFD, pPort, pbDone );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Return the operation status