IOSCSIProtocolInterface
Этот класс определяет общедоступный Протокольный уровень SCSI API для любого класса, который предоставляет услуги Protocol или должен предоставить Услугу Протокола API для передачи запросов на обслуживание к драйверу Службы Протокола.
Наследование
Не применимый
Соответствует
Не применимый
Оператор импорта
Не применимый
Objective C
@import Kernel;
Доступность
Доступный в OS X v10.0 и позже.
-
Устаревший. Не используйте этот метод.
Объявление
C++
virtual SCSIServiceResponse AbortCommand ( SCSITaskIdentifier
request
) = 0;Обсуждение
Устаревший. Не используйте этот метод.
-
Прерывает задачу на основе Логической единицы и тегового идентификатора задачи.
Объявление
C++
virtual SCSIServiceResponse AbortTask ( UInt8
theLogicalUnit
, SCSITaggedTaskIdentifiertheTag
) = 0;Параметры
theLogicalUnit
Это значение должно быть нулем, если драйвером устройства не являются более сложные и управляющие многократные Логические единицы.
theTag
Допустимый SCSITaggedTaskIdentifier, представляющий выдающийся SCSITask.
Возвращаемое значение
Допустимый код SCSIServiceResponse.
Обсуждение
Прерывает задачу на основе Логической единицы и тегового идентификатора задачи. Подклассы должны переопределить этот метод. Сторонние подклассы не должны должны быть переопределять этот метод.
-
Прерывает набор задачи на основе Логической единицы.
Объявление
C++
virtual SCSIServiceResponse AbortTaskSet ( UInt8
theLogicalUnit
) = 0;Параметры
theLogicalUnit
Это значение должно быть нулем, если драйвером устройства не являются более сложные и управляющие многократные Логические единицы.
Возвращаемое значение
Допустимый код SCSIServiceResponse.
Обсуждение
Прерывает набор задачи на основе Логической единицы. Подклассы должны переопределить этот метод. Сторонние подклассы не должны должны быть переопределять этот метод.
-
Вызванный клиентами для обеспечения устройства находится в корректном состоянии электропитания прежде, чем выпустить I/O.
Объявление
C++
virtual void CheckPowerState (
void
);Обсуждение
Вызванный клиентами для обеспечения устройства находится в корректном состоянии электропитания прежде, чем выпустить I/O. Если устройство не готово обработать такие запросы, оно дает драйверу шанс блокировать поток, пока устройство не готово. Подклассы не должны должны быть переопределять этот метод.
-
Очищает Auto-Contingent Allegiance (ACA) для указанной Логической единицы.
Объявление
C++
virtual SCSIServiceResponse ClearACA ( UInt8
theLogicalUnit
) = 0;Параметры
theLogicalUnit
Это значение должно быть нулем, если драйвером устройства не являются более сложные и управляющие многократные Логические единицы.
Возвращаемое значение
Допустимый код SCSIServiceResponse.
Обсуждение
Очищает Auto-Contingent Allegiance (ACA) для указанной Логической единицы. Подклассы должны переопределить этот метод. Сторонние подклассы не должны должны быть переопределять этот метод.
-
Очищает набор задачи для указанной Логической единицы.
Объявление
C++
virtual SCSIServiceResponse ClearTaskSet ( UInt8
theLogicalUnit
) = 0;Параметры
theLogicalUnit
Это значение должно быть нулем, если драйвером устройства не являются более сложные и управляющие многократные Логические единицы.
Возвращаемое значение
Допустимый код SCSIServiceResponse.
Обсуждение
Очищает набор задачи для указанной Логической единицы. Подклассы должны переопределить этот метод. Сторонние подклассы не должны должны быть переопределять этот метод.
-
Вызванный, чтобы отправить SCSITask и транспортировать его через физический провод (а) к устройству.
Объявление
C++
virtual void ExecuteCommand ( SCSITaskIdentifier
request
) = 0;Параметры
request
Допустимый SCSITaskIdentifier, представляющий задачу транспортировать через провод (а).
Обсуждение
Вызванный, чтобы отправить SCSITask и транспортировать его через физический провод (а) к устройству. Подклассы, внутренние к IOSCSIArchitectureModelFamily, должны будут переопределить этот метод. Сторонние подклассы не должны должны быть переопределять этот метод.
-
Завершает уничтожение объекта IOService.
Объявление
C++
virtual bool finalize ( IOOptionBits
options
);Возвращаемое значение
true
.Обсуждение
См., что Подклассы IOService.h могут переопределить этот метод, но должны вызвать супер:: завершите ().
-
Вызванный для высвобождения всех средств, сохраненных объектом.
Объявление
C++
virtual void free (
void
);Обсуждение
Высвободите все средства, сохраненные объектом, затем вызовите супер:: свободный ().
-
Метод доступа получить IOCommandGate.
Объявление
C++
IOCommandGate * GetCommandGate (
void
);Возвращаемое значение
IOCommandGate для этого экземпляра. Может возвратить NULL.
Обсуждение
Метод доступа получить IOCommandGate.
-
Этот метод вызывают для получения начального состояния электропитания устройства (обычно самое высокое).
Объявление
C++
virtual UInt32 GetInitialPowerState (
void
) = 0;Возвращаемое значение
Порядковое состояние электропитания.
Обсуждение
Этот метод вызывают для получения начального состояния электропитания устройства (обычно самое высокое). Подклассы должны переопределить этот метод.
-
Получает текущее состояние эксклюзивности пользовательского клиента.
Объявление
C++
virtual bool GetUserClientExclusivityState (
void
);Возвращаемое значение
true
если пользовательский клиент находится в монопольном управлении устройства,false
иначе.Обсуждение
GetUserClientExclusivityState () метод вызывает SCSITaskUserClient, чтобы определить, содержит ли какой-либо пользовательский клиент эксклюзивный доступ в текущее время. Это - просто проверка перед полетом и возвращаемое значение
false
не гарантирует, что последующий вызов к SetUserClientExclusivityState () возвратится успешно. -
HandleCheckPowerState (недействительный) метод находится на сериализированной стороне логического элемента команды и может заменить задействованные переменные безопасно без проблем многопоточности. Это - основная цель, должен вызвать HandleCheckPowerState суперкласса (UInt32 maxPowerState) с макс. состоянием электропитания класс, зарегистрированный в.
Объявление
C++
virtual void HandleCheckPowerState (
void
) = 0;Обсуждение
HandleCheckPowerState (недействительный) метод находится на сериализированной стороне логического элемента команды и может заменить задействованные переменные безопасно без проблем многопоточности. Это - основная цель, должен вызвать HandleCheckPowerState суперкласса (UInt32 maxPowerState) с макс. состоянием электропитания класс, зарегистрированный в. Подклассы должны переопределить этот метод. Сторонние подклассы не должны должны быть переопределять этот метод, но может для изменения поведения по умолчанию.
-
HandleCheckPowerState (UInt32 maxPowerState) метод вызывают подклассы и передают maxPowerState число, данное диспетчеру электропитания во время инициализации. Это гарантирует блок потоков, пока не было достигнуто то состояние электропитания.
Объявление
C++
void HandleCheckPowerState ( UInt32
maxPowerState
);Параметры
maxPowerState
Состояние максимальной мощности в массиве состояния электропитания.
Обсуждение
HandleCheckPowerState (UInt32 maxPowerState) метод вызывают подклассы и передают maxPowerState число, данное диспетчеру электропитания во время инициализации. Это гарантирует блок потоков, пока не было достигнуто то состояние электропитания.
-
HandleCheckPowerState (UInt32 maxPowerState) метод вызывают подклассы и передают maxPowerState число, данное диспетчеру электропитания во время инициализации. Это гарантирует блок потоков, пока не было достигнуто то состояние электропитания.
Объявление
C++
void HandleCheckPowerState ( UInt32
maxPowerState
);Параметры
maxPowerState
Состояние максимальной мощности в массиве состояния электропитания.
Обсуждение
HandleCheckPowerState (UInt32 maxPowerState) метод вызывают подклассы и передают maxPowerState число, данное диспетчеру электропитания во время инициализации. Это гарантирует блок потоков, пока не было достигнуто то состояние электропитания.
-
HandleCheckPowerState (недействительный) метод находится на сериализированной стороне логического элемента команды и может заменить задействованные переменные безопасно без проблем многопоточности. Это - основная цель, должен вызвать HandleCheckPowerState суперкласса (UInt32 maxPowerState) с макс. состоянием электропитания класс, зарегистрированный в.
Объявление
C++
virtual void HandleCheckPowerState (
void
) = 0;Обсуждение
HandleCheckPowerState (недействительный) метод находится на сериализированной стороне логического элемента команды и может заменить задействованные переменные безопасно без проблем многопоточности. Это - основная цель, должен вызвать HandleCheckPowerState суперкласса (UInt32 maxPowerState) с макс. состоянием электропитания класс, зарегистрированный в. Подклассы должны переопределить этот метод. Сторонние подклассы не должны должны быть переопределять этот метод, но может для изменения поведения по умолчанию.
-
Получает текущее состояние эксклюзивности пользовательского клиента.
Объявление
C++
virtual bool HandleGetUserClientExclusivityState (
void
);Возвращаемое значение
true
если пользовательский клиент находится в монопольном управлении устройства,false
иначе.Обсуждение
HandleGetUserClientExclusivityState () метод вызывают на сериализированной стороне логического элемента команды, чтобы определить, содержит ли какой-либо пользовательский клиент эксклюзивный доступ в текущее время. Посмотрите обсуждение для GetUserClientExclusivityState (). Подклассы могут переопределить этот метод для изменения поведения по умолчанию. Сторонние подклассы не должны должны быть переопределять этот метод.
-
Метод HandlePowerChange чист виртуальный и оставлен каждому драйверу протокольного или прикладного уровня реализовать. Это, как гарантируют, вызовут на его собственном потоке выполнения и может выполнить синхронные или асинхронные вызовы.
Объявление
C++
virtual void HandlePowerChange (
void
) = 0;Обсуждение
Метод HandlePowerChange чист виртуальный и оставлен каждому драйверу протокольного или прикладного уровня реализовать. Это, как гарантируют, вызовут на его собственном потоке выполнения и может выполнить синхронные или асинхронные вызовы. Подклассы должны переопределить этот метод. Сторонние подклассы не должны должны быть переопределять этот метод, но может для изменения поведения по умолчанию.
-
Этот метод вызывают для предписания поддержки протокола определенная функция службы.
Объявление
C++
virtual bool HandleProtocolServiceFeature ( SCSIProtocolFeature
feature
, void *serviceValue
) = 0;Параметры
feature
Допустимый SCSIProtocolFeature. Посмотрите перечисления для SCSIProtocolFeature.
serviceValue
Указатель на структуру/значение, использующуюся в сочетании с функцией, которую требуют. Посмотрите перечисления для SCSIProtocolFeature. NB: Этим параметром может быть NULL для определенных запросов новых функций.
Возвращаемое значение
true
если запрос новых функций службы успешно выполнился,false
иначе.Обсуждение
Этот метод вызывают для предписания поддержки протокола определенная функция службы. Подклассы IOSCSIProtocolServices должны переопределить этот метод.
-
Метод HandleSetPowerState вызывает код связующего звена и находится на сериализированной стороне логического элемента команды.
Объявление
C++
virtual void HandleSetPowerState ( UInt32
powerStateOrdinal
);Параметры
powerStateOrdinal
Состояние электропитания, на которое должно быть изменено устройство.
Обсуждение
Метод HandleSetPowerState вызывает код связующего звена и находится на сериализированной стороне логического элемента команды. Это позволяет нам касаться любых задействованных переменных по мере необходимости без любых проблем многопоточности. Подклассы могут переопределить этот метод для изменения поведения. Сторонние подклассы не должны должны быть переопределять этот метод, но может.
-
Устанавливает текущее состояние эксклюзивности пользовательского клиента.
Объявление
C++
virtual IOReturn HandleSetUserClientExclusivityState ( IOService *
userClient
, boolstate
);Параметры
userClient
Экземпляр SCSITaskUserClient, для которого можно изменить состояние эксклюзивности.
state
Состояние эксклюзивности.
true
средний эксклюзивный доступ желаем,false
средний эксклюзивный доступ выпускается.Возвращаемое значение
Допустимый успех указания кода IOReturn или тип отказа.
Обсуждение
HandleSetUserClientExclusivityState () метод вызывают на сериализированной стороне логического элемента команды для установки режима эксклюзивного доступа.
-
Этот метод вызывают для инициализации управления питанием.
Объявление
C++
virtual void InitializePowerManagement ( IOService *
provider
);Параметры
provider
Провайдер управления питанием (т.е. провайдер для присоединения к в дереве PowerManagement). Это может быть устройством, которое не находится в самом Дереве премьер-министра, когда, плоскость IOService пересечена к корневому узлу, чтобы найти узел в Дереве премьер-министра.
Обсуждение
Этот метод вызывают для инициализации управления питанием. Это вызовет PMinit (), joinPMTree (), и makeUsable (). Этот метод не вызывает registerPowerDriver (). Подклассы могут переопределить этот метод для изменения поведения (такого как число состояний электропитания).
-
Определяет, какое состояние электропитания устройство находится в учитывая текущее состояние домена питания.
Объявление
C++
virtual unsigned long initialPowerStateForDomainState ( IOPMPowerFlags
flags
);Параметры
flags
Флаги, описывающие символ «доменного питания»; они представляют
outputPowerCharacter
поле состояния в массиве состояния электропитания домена питания.Возвращаемое значение
Число состояния.
Обсуждение
Когда драйвер инициализирует управление питанием, управление питанием вызывает этот метод один раз. Подклассы не должны должны быть переопределять этот метод.
-
Вызванный, чтобы определить, инициализируется ли управление питанием.
Объявление
C++
virtual bool IsPowerManagementIntialized (
void
);Возвращаемое значение
true
если управление питанием было инициализировано,false
иначе.Обсуждение
Вызванный, чтобы определить, инициализируется ли управление питанием. Подклассы не должны должны быть переопределять этот метод.
-
Этот метод вызывают для запросов для поддержки протокола определенной функции службы.
Объявление
C++
virtual bool IsProtocolServiceSupported ( SCSIProtocolFeature
feature
, void *serviceValue
) = 0;Параметры
feature
Допустимый SCSIProtocolFeature. Посмотрите перечисления для SCSIProtocolFeature.
serviceValue
Указатель на структуру/значение, использующуюся в сочетании с функцией, которую требуют. Посмотрите перечисления для SCSIProtocolFeature. NB: Этим параметром может быть NULL для определенных запросов новых функций.
Возвращаемое значение
true
если функция поддерживается,false
иначе.Обсуждение
Этот метод вызывают для запросов для поддержки протокола определенной функции службы. Подклассы IOSCSIProtocolServices должны переопределить этот метод.
-
Сбрасывает указанную Логическую единицу.
Объявление
C++
virtual SCSIServiceResponse LogicalUnitReset ( UInt8
theLogicalUnit
) = 0;Параметры
theLogicalUnit
Это значение должно быть нулем, если драйвером устройства не являются более сложные и управляющие многократные Логические единицы.
Возвращаемое значение
Допустимый код SCSIServiceResponse.
Обсуждение
Сбрасывает указанную Логическую единицу. Подклассы должны переопределить этот метод. Сторонние подклассы не должны должны быть переопределять этот метод.
-
Запрашивает, чтобы питание управляло драйвером для изменения состояния электропитания его устройства.
Объявление
C++
virtual IOReturn setPowerState ( unsigned long
powerStateOrdinal
, IOService *whichDevice
);Параметры
powerStateOrdinal
Число в состоянии электропитания выстраивает, на который диск проинструктирован для изменения.
whichDevice
Указатель на объект управления питанием, зарегистрировавшийся для управления питанием для этого устройства. whichDevice поле не является подходящим для нас, так как драйвер является и «влиятельным политиком» для устройства и «конструктором политики» для устройства.
Возвращаемое значение
См. IOService.h для подробных данных.
Обсуждение
Запрашивает, чтобы питание управляло драйвером для изменения состояния электропитания его устройства. Большинство подклассов IOSCSIProtocolInterface имеет специфичные для класса механизмы и не должно переопределять эту подпрограмму. См. IOSCSIProtocolServices.h, IOSCSIBlockCommandsDevice.h, IOSCSIReducedBlockCommandsDevice.h и IOSCSIMultimediaCommandsDevice.h для получения дополнительной информации об изменениях управления питанием. Подклассы не должны должны быть переопределять этот метод.
-
Устанавливает текущее состояние эксклюзивности пользовательского клиента.
Объявление
C++
virtual IOReturn SetUserClientExclusivityState ( IOService *
userClient
, boolstate
);Параметры
userClient
Экземпляр SCSITaskUserClient, для которого можно изменить состояние эксклюзивности.
state
Состояние эксклюзивности.
true
средний эксклюзивный доступ желаем,false
средний эксклюзивный доступ выпускается.Возвращаемое значение
Допустимый успех указания кода IOReturn или тип отказа.
Обсуждение
SetUserClientExclusivityState () метод вызывает SCSITaskUserClient для установки режима эксклюзивного доступа.
-
sGetPowerTransistionInProgress метод является статической функцией, используемой в качестве C-> связующее звено C++ для движения позади логического элемента команды.
Объявление
C++
static bool sGetPowerTransistionInProgress ( IOSCSIProtocolInterface *
self
);Параметры
self
'Этот' указатель для класса.
Возвращаемое значение
true
если состояние электропитания происходит, иначеfalse
.Обсуждение
sGetPowerTransistionInProgress метод является статической функцией, используемой в качестве C-> связующее звено C++ для движения позади логического элемента команды.
-
sGetUserClientExclusivityState метод является статической функцией, используемой в качестве C-> связующее звено C++ для движения позади логического элемента команды.
Объявление
C++
static void sGetUserClientExclusivityState ( IOSCSIProtocolInterface *
self
, bool *state
);Параметры
self
'Этот' указатель для класса.
state
Указатель на bool, в котором должно быть установлено состояние.
Обсуждение
sGetUserClientExclusivityState метод является статической функцией, используемой в качестве C-> связующее звено C++ для движения позади логического элемента команды.
-
sHandleCheckPowerState метод является статической функцией, используемой в качестве C-> связующее звено C++ для движения позади логического элемента команды.
Объявление
C++
static void sHandleCheckPowerState ( IOSCSIProtocolInterface *
self
);Параметры
self
'Этот' указатель для класса.
Обсуждение
sHandleCheckPowerState метод является статической функцией, используемой в качестве C-> связующее звено C++ для движения позади логического элемента команды.
-
sHandleSetPowerState метод является статической функцией, используемой в качестве C-> связующее звено C++ для движения позади логического элемента команды.
Объявление
C++
static IOReturn sHandleSetPowerState ( IOSCSIProtocolInterface *
self
, UInt32powerStateOrdinal
);Параметры
self
'Этот' указатель для класса.
powerStateOrdinal
Состояние электропитания, на которое должно быть изменено устройство.
Возвращаемое значение
Допустимый код IOReturn, указывающий успешность или неуспешность.
Обсуждение
sHandleSetPowerState метод является статической функцией, используемой в качестве C-> связующее звено C++ для движения позади логического элемента команды.
-
sPowerManagement методом является статическая C-функция, которую вызывают с помощью thread_call API Маха. Это гарантирует нам поток выполнения, отличающегося, чем поток управления питанием и поток workloop, на котором мы можем дать команды к устройству синхронно или асинхронно не волнуясь о мертвых блокировках. Это вызывает через к HandlePowerChange, который является конечным автоматом, используемым для направления управления питанием.
Объявление
C++
static void sPowerManagement ( thread_call_param_t
whichDevice
);Параметры
whichDevice
'Этот' указатель.
Обсуждение
sPowerManagement методом является статическая C-функция, которую вызывают с помощью thread_call API Маха. Это гарантирует нам поток выполнения, отличающегося, чем поток управления питанием и поток workloop, на котором мы можем дать команды к устройству синхронно или асинхронно не волнуясь о мертвых блокировках. Это вызывает через к HandlePowerChange, который является конечным автоматом, используемым для направления управления питанием.
-
sSetUserClientExclusivityState метод является статической функцией, используемой в качестве C-> связующее звено C++ для движения позади логического элемента команды.
Объявление
C++
static void sSetUserClientExclusivityState ( IOSCSIProtocolInterface *
self
, IOReturn *result
, IOService *userClient
, boolstate
);Параметры
self
'Этот' указатель для класса.
result
Указатель на IOReturn для получающегося состояния.
userClient
Экземпляр SCSITaskUserClient, для которого можно изменить состояние эксклюзивности.
state
bool указание требуемого состояния для установки.
Обсуждение
sSetUserClientExclusivityState метод является статической функцией, используемой в качестве C-> связующее звено C++ для движения позади логического элемента команды.
-
Во время инстанцирования объекта IOService, запускает объект IOService, выбранный для работы провайдера.
Объявление
C++
virtual bool start ( IOService *
provider
);Возвращаемое значение
true
если запуск был успешен;false
иначе (который заставит экземпляр быть отсоединенным и обычно освобождаться).Обсуждение
См. IOService.h для подробных данных.
-
Сбрасывает целевое устройство.
Объявление
C++
virtual SCSIServiceResponse TargetReset (
void
) = 0;Возвращаемое значение
Допустимый код SCSIServiceResponse.
Обсуждение
Сбрасывает целевое устройство. Подклассы должны переопределить этот метод. Сторонние подклассы не должны должны быть переопределять этот метод.
-
TicklePowerManager (недействительный) метод вызывает CheckPowerState и отправляет, действие щекочут к диспетчеру электропитания так, чтобы был сброшен неактивный таймер.
Объявление
C++
virtual void TicklePowerManager (
void
) = 0;Обсуждение
TicklePowerManager (недействительный) метод вызывает CheckPowerState и отправляет, действие щекочут к диспетчеру электропитания так, чтобы был сброшен неактивный таймер. Подклассы должны переопределить этот метод. Сторонние подклассы не должны должны быть переопределять этот метод, но может для изменения поведения по умолчанию.
-
TicklePowerManager (UInt32 maxPowerState), метод является функцией удобства, которая может быть вызвана подклассами в TicklePowerManager (недействительном), чтобы сказать диспетчеру электропитания сбрасывать неактивный таймер или приносить устройство в требуемое состояние. Это возвращает то, что возвращается activityTickle (истина, если устройство находится в требуемом состоянии, ложь, если это не).
Объявление
C++
bool TicklePowerManager ( UInt32
maxPowerState
);Параметры
maxPowerState
Состояние максимальной мощности в массиве состояния электропитания.
Возвращаемое значение
Результат вызова к activityTickle (). См. IOService.h для подробных данных.
Обсуждение
TicklePowerManager (UInt32 maxPowerState), метод является функцией удобства, которая может быть вызвана подклассами в TicklePowerManager (недействительном), чтобы сказать диспетчеру электропитания сбрасывать неактивный таймер или приносить устройство в требуемое состояние. Это возвращает то, что возвращается activityTickle (истина, если устройство находится в требуемом состоянии, ложь, если это не).
-
TicklePowerManager (UInt32 maxPowerState), метод является функцией удобства, которая может быть вызвана подклассами в TicklePowerManager (недействительном), чтобы сказать диспетчеру электропитания сбрасывать неактивный таймер или приносить устройство в требуемое состояние. Это возвращает то, что возвращается activityTickle (истина, если устройство находится в требуемом состоянии, ложь, если это не).
Объявление
C++
bool TicklePowerManager ( UInt32
maxPowerState
);Параметры
maxPowerState
Состояние максимальной мощности в массиве состояния электропитания.
Возвращаемое значение
Результат вызова к activityTickle (). См. IOService.h для подробных данных.
Обсуждение
TicklePowerManager (UInt32 maxPowerState), метод является функцией удобства, которая может быть вызвана подклассами в TicklePowerManager (недействительном), чтобы сказать диспетчеру электропитания сбрасывать неактивный таймер или приносить устройство в требуемое состояние. Это возвращает то, что возвращается activityTickle (истина, если устройство находится в требуемом состоянии, ложь, если это не).
-
TicklePowerManager (недействительный) метод вызывает CheckPowerState и отправляет, действие щекочут к диспетчеру электропитания так, чтобы был сброшен неактивный таймер.
Объявление
C++
virtual void TicklePowerManager (
void
) = 0;Обсуждение
TicklePowerManager (недействительный) метод вызывает CheckPowerState и отправляет, действие щекочут к диспетчеру электропитания так, чтобы был сброшен неактивный таймер. Подклассы должны переопределить этот метод. Сторонние подклассы не должны должны быть переопределять этот метод, но может для изменения поведения по умолчанию.
-
Передает завершение штабель.
Объявление
C++
virtual bool willTerminate ( IOService *
provider
, IOOptionBitsoptions
);Параметры
provider
Завершенный провайдер этого объекта.
options
Опции первоначально передали оконечному ().
Возвращаемое значение
true
.Обсуждение
Уведомление, что провайдер был завершен, отправило прежде, чем рекурсивно вызвать штабель в порядке корня к листу.