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


Функция 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 (include Wdf.h)
Библиотека Wdf01000.sys (см. управление версиями библиотеки Платформы).)
IRQL <= DISPATCH_LEVEL
правил соответствия DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), PdoDeviceInitAPI(kmdf)

См. также

WdfFdoLockStaticChildListForIteration

WdfFdoUnlockStaticChildListFromIteration