Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Необязательные члены
Для всех TLV с необязательными дочерними элементами TLV родительский элемент имеет одно поле с именем Необязательный. В этом поле есть логическое поле для каждого необязательного дочернего элемента по имени <child_name>_IsPresent, которое устанавливается в значение TRUE, если дочерний элемент присутствует, и в значение FALSE в противном случае. Аналогичным образом API-интерфейсы создания ожидают, что поле должно быть TRUE, если оно должно присутствовать в потоке байтов TLV и FALSE в противном случае.
WDI_SET_FIRMWARE_CONFIGURATION_PARAMETERS fwConfig = { 0 };
NDIS_STATUS status;
status = ParseWdiSetAdapterConfiguration(
pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength -
sizeof(WDI_MESSAGE_HEADER),
(PUINT8)pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer +
sizeof(WDI_MESSAGE_HEADER),
0,
&fwConfig);
if (status == NDIS_STATUS_SUCCESS)
{
if (fwConfig.Optional.MacAddress_IsPresent)
{
// Safe to use fwConfig.MacAddress
fwConfig.MacAddress;
}
}
Элементы массива
Если несколько дочерних элементов одного типа появляются в пределах одного родительского элемента (например, контейнер </>атрибут isCollection ), средство синтаксического анализа и генератор используют специальную структуру для представления массива: ArrayOfElements. Для клиентов C++ это строго типизированная структура шаблона с очисткой семантики уничтожения. Для клиентов C создаются явно именованные структуры (например, ArrayOfElementsOfUINT8). Однако эти структуры не очищаются автоматически, так как C не поддерживает деструкторы, поэтому пользователи API C должны быть осторожны, чтобы избегать утечек памяти (или повторного освобождения).
В ArrayOfElements есть два важных поля: ElementCount и pElements. ElementCount — это количество элементов в массиве. pElements — это массив на языке C из элементов. Элементы можно итерировать, как показано в этом примере.
for (UINT32 i = 0;
i < pConnectTaskParameters->ConnectParameters.
MulticastCipherAlgorithms.ElementCount;
i++)
{
// Safe to use pElements[i]
pConnectTaskParameters->ConnectParameters.MulticastCipherAlgorithms.
pElements[i];
}
Третье поле, MemoryInternallyAllocated, используется внутри синтаксического анализатора/генератора. Его не следует изменять с помощью IHV.