Поделиться через


Функция WdfFdoRetrieveNextStaticChild (wdffdo.h)

[Применяется только к KMDF]

Метод WdfFdoRetrieveNextStaticChild извлекает дескриптор следующего объекта устройства платформы в списке дочерних устройств.

Синтаксис

WDFDEVICE WdfFdoRetrieveNextStaticChild(
  [in]           WDFDEVICE Fdo,
  [in, optional] WDFDEVICE PreviousChild,
  [in]           ULONG     Flags
);

Параметры

[in] Fdo

Дескриптор объекта устройства платформы, представляющего родительское устройство.

[in, optional] PreviousChild

Дескриптор объекта устройства платформы, представляющий дочернее устройство, возвращенное предыдущим вызовом WdfFdoRetrieveNextStaticChild. Для первого вызова WdfFdoRetrieveNextStaticChild это значение должно иметь значение NULL.

[in] Flags

Значение перечислителя WDF_RETRIEVE_CHILD_FLAGS типа, определяющее тип дочерних устройств, которые должен получить метод. Этот параметр не может быть равен нулю.

Возвращаемое значение

Если операция выполнена успешно, метод возвращает дескриптор объекту устройства платформы. В противном случае возвращается значение NULL.

Системная ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.

Комментарии

Драйверы шины, использующие перечисление статической шины, могут вызывать WdfFdoRetrieveNextStaticChild.

Чтобы получить элементы в списке дочерних устройств, драйвер должен:

  1. Вызовите WdfFdoLockStaticChildListForIteration , чтобы заблокировать дочерний список.
  2. Многократно вызывайте WdfFdoRetrieveNextStaticChild , чтобы получить элементы в списке по одному, пока метод не вернет значение NULL.
  3. Вызовите WdfFdoUnlockStaticChildListFromIteration , чтобы разблокировать дочерний список.
Дополнительные сведения о статических дочерних списках см. в разделе Перечисление устройств в шине.

Примеры

В следующем примере кода выполняется поиск статического дочернего списка, пока не будет найдено дочернее устройство с серийным номером, соответствующим определенному значению. Другие примеры использования WdfFdoRetrieveNextStaticChild см. в разделе Пример драйвера автобуса Для тостера .

PPDO_DEVICE_DATA  pdoData;
WDFDEVICE  hChild;
NTSTATUS  status = STATUS_INVALID_PARAMETER;

WdfFdoLockStaticChildListForIteration(Device);

while ((hChild = WdfFdoRetrieveNextStaticChild(
                                               Device,
                                               hChild,
                                               WdfRetrieveAddedChildren
                                               )) != NULL) {
    //
    // Obtain device object context data and check the
    // stored serial number.
    //
    pdoData = PdoGetData(hChild);
    if (SerialNo == pdoData->SerialNo) {
        status = STATUS_SUCCESS;
        WdfPdoRequestEject(hChild);
        break;
    }
}
WdfFdoUnlockStaticChildListFromIteration(Device);

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Верхняя часть wdffdo.h (включая Wdf.h)
Библиотека Wdf01000.sys (см. раздел Управление версиями библиотеки платформы).
IRQL <= DISPATCH_LEVEL
Правила соответствия DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), PdoDeviceInitAPI(kmdf)

См. также раздел

WdfFdoLockStaticChildListForIteration

WdfFdoUnlockStaticChildListFromIteration