Функция FwpsInjectionHandleCreate0 (fwpsk.h)
Функция FwpsInjectionHandleCreate0 создает дескриптор, который можно использовать функциями внедрения пакетов для внедрения пакетов или потоковой передачи данных в стек сети TCP/IP, а также функцией FwpsQueryPacketInjectionState0 для запроса состояния внедрения пакетов.
Синтаксис
NTSTATUS FwpsInjectionHandleCreate0(
[in, optional] ADDRESS_FAMILY addressFamily,
[in] UINT32 flags,
[out] HANDLE *injectionHandle
);
Параметры
[in, optional] addressFamily
Семейство адресов, для которого создается дескриптор внедрения. Это может быть одно из следующих семейств адресов:
AF_UNSPEC
Семейство адресов не указано.
AF_INET
Семейство адресов IPv4.
AF_INET6
Семейство адресов IPv6.
Для транспортных, потоковых и переадресных инъекций этот параметр является необязательным и может быть установлен на AF_UNSPEC, который указывает на неопределенное семейство адресов. Это значение определяется в Ws2def.h.
[in] flags
Значение флага, заданное драйвером выноски, указывающее тип данных, которые необходимо внедрить. Этот флаг может иметь одно или несколько следующих значений:
FWPS_INJECTION_TYPE_FORWARD
Пакетные данные будут внедрены путем вызова функцию FwpsInjectForwardAsync0.
FWPS_INJECTION_TYPE_NETWORK
Сетевые данные будут внедрены путем вызова любого из этих данных. функция FwpsInjectNetworkReceiveAsync0 или функцию FwpsInjectNetworkSendAsync0.
FWPS_INJECTION_TYPE_STREAM
Потоковые данные будут внедрены путем вызова функцию FwpsStreamInjectAsync0.
FWPS_INJECTION_TYPE_TRANSPORT
Транспортная передача данных будет внедрена путем вызова любого из этих данных. функцию FwpsInjectTransportReceiveAsync0 или функцию функцию FwpsInjectTransportSendAsync0.
Чтобы создать дескриптор внедрения для использования несколькими функциями внедрения, объедините биты типа внедрения с побитовыми операциями OR. Если значение флага равно нулю, результирующий дескриптор внедрения может использоваться для транспорта, потока и пересылки инъекций.
[out] injectionHandle
Указатель на переменную, которая получает дескриптор.
Возвращаемое значение
Функция FwpsInjectionHandleCreate0 возвращает один из следующих кодов NTSTATUS.
Возвращаемый код | Описание |
---|---|
|
Дескриптор внедрения успешно создан. |
|
Стек сети TCP/IP не готов. Драйвер выноски должен вызывать функцию FwpsInjectionHandleCreate0 снова, чтобы создать дескриптор внедрения. |
|
Произошла ошибка. |
Замечания
Драйвер выноски вызывает функцию FwpsInjectionHandleCreate0, чтобы создать дескриптор, который можно использовать для внедрения пакетов или потоковой передачи данных в стек сети TCP/IP и запроса состояния внедрения пакетов. Драйвер выноски передает созданный дескриптор функциям внедрения пакетов и FwpsQueryPacketInjectionState0.
После завершения работы драйвера выноски с помощью дескриптора внедрения необходимо вызвать функцию FwpsInjectionHandleDesi0, чтобы уничтожить дескриптор. Если ожидающие внедрения еще не завершены, эта функция ожидает завершения до возвращения.
При внедрении в сетевой слой и семейства адресов IPv4 и IPv6 драйвер выноски должен создать два дескриптора внедрения путем вызова функции FwpsInjectionHandleCreate0 дважды: один вызов с addressFamily AF_INET, а второй вызов с addressFamily задано значение AF_INET6.
Для слоев MAC (*MAC_FRAME_NATIVE, *MAC_FRAME_ETHERNET, *VSWITCH_ETHERNET) можно использовать тот же дескриптор внедрения, полученный с флагом FWPS_INJECTION_TYPE_L2. Тип внедрения привязан ближе к функциям внедрения, чем слои.
Пример кода см. в разделе ВППSampler HelperFunctions_InjectionData.cpp.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно начиная с Windows Vista. |
целевая платформа | Всеобщий |
заголовка | fwpsk.h (include Fwpsk.h) |
библиотеки | Fwpkclnt.lib |
IRQL | PASSIVE_LEVEL |