Significado y contrato de AddressFamily=0 en Microsoft-Windows-TCPIP, evento 1123/v1

Carlos Ikuga Mangue 0 Reputation points
2026-09-30T02:06:32.1666667+00:00

Estoy investigando cómo debe interpretar un consumidor ETW la propiedad AddressFamily del evento de activación de un listener TCP. Busco una definición aplicable a ese evento, no solamente la definición general de AF_UNSPEC en Winsock.

Identificación del campo:

Proveedor: Microsoft-Windows-TCPIP

GUID: 2f07e2ee-15db-40f1-90ef-9d7ba282188a

Evento: 1123, versión 1; tarea 1123; opcode 0; canal 16

Keywords: 0x8000000400000002

Propiedad: AddressFamily, séptima del payload (índice TDH 6), win:UInt32

SocketAddress es otra propiedad: la tercera, de tipo Binary/SocketAddress, con longitud indicada por AddressLength.

Observaciones conservadas:

En una matriz de cinco listeners —IPv4 loopback, IPv4 wildcard, IPv6 loopback, IPv6 wildcard e IPv6 dual-stack— el escalar AddressFamily fue 0 en los cinco casos. La familia dentro de SocketAddress fue 2 para IPv4 y 23 para IPv6 y correspondía a la configuración observada del socket. Los bytes del escalar se conservaron como 00000000. Esta matriz no establece un comportamiento universal.

La metadata nativa consultada vincula el escalar a TCPIP_ADDRESS_FAMILY_TYPE_ValueMap, que contiene 2→IPV4 y 23→IPV6, sin entrada para 0. No interpreto esa ausencia como autorización para ignorar el campo ni como prueba de que el evento sea inválido.

Implementación examinada por separado:

Componente Microsoft-Windows-TCPIP-Driver, 10.0.26100.9444, amd64.

Binario: tcpip.sys

SHA-256: 4E6435DBC4357451440A280D35C03678B6A4632C3FD12FF6933CC545D215328F

En el análisis estático de ese archivo se identificó una ruta que pasa un cero literal al argumento que alimenta AddressFamily al emitir 1123/v1. Esto explica la asignación en esa ruta, no su significado contractual. No se conservó una huella en memoria del módulo cargado durante la matriz histórica; no afirmo que la identidad del archivo examinado pruebe retrospectivamente esa identidad en memoria.

El manifiesto del componente declara un DigestValue que coincide con ese SHA-256. Incluye el texto TcpipTcpListenerActivated_V1.EventMessage y las etiquetas IPV4/IPV6, pero no declaraciones individuales de eventos o plantillas, ni una definición del cero. Tampoco considero que la omisión del séptimo campo en el mensaje de presentación demuestre su opcionalidad.

Pregunta:

¿Cuál es el significado definido de AddressFamily=0 en 1123/v1, y qué regla de consumo se deriva de él? En particular, ¿el contrato exige igualdad entre ese escalar y la familia interna de SocketAddress, o admite que el escalar sea 0 mientras SocketAddress contiene 2 o 23?

Agradecería una referencia específica del evento/proveedor, una aclaración del equipo responsable o una indicación expresa de que este campo no tiene un contrato público soportado para ese uso. Si la respuesta es específica de una versión, por favor indiquen su alcance. Una referencia genérica a AF_UNSPEC=0, sin vincularla a esta propiedad ETW, no resuelve la pregunta.

No solicito código fuente privado ni afirmo que exista un defecto de Windows. La consulta busca establecer la semántica y las garantías de uso antes de cambiar una política de interpretación.

Windows development | Windows API - Win32
0 comments No comments

1 answer

Sort by: Most helpful
  1. Zack Nguyen (WICLOUD CORPORATION) 165 Reputation points Microsoft External Staff Moderator
    2026-09-30T02:39:30.5166667+00:00

    Hola, Carlos:

    Gracias por plantear esta pregunta.

    He capturado de forma independiente dos registros del evento 1123/v1 del proveedor Microsoft-Windows-TCPIP al iniciar listeners de loopback IPv4 e IPv6. En ambos, el valor escalar de AddressFamily era 0; los valores correspondientes de SocketAddress comenzaban con las familias 2 y 23, respectivamente.
    User's image

    Esta prueba reproduce la diferencia entre ambos valores, pero no establece qué significa el cero del campo escalar ni qué regla puede aplicar con garantías un consumidor ETW. La documentación de Microsoft sobre la estructura sockaddr describe la familia dentro de una dirección de socket. Por su parte, la función TdhGetEventInformation y la función TdhGetEventMapInformation explican cómo obtener los metadatos y los mapas de un evento. Ninguna de estas referencias define el significado del campo escalar independiente AddressFamily en el evento 1123/v1 ni indica que deba coincidir con la familia incluida en SocketAddress.

    Tras revisar la documentación pública disponible, siguen sin confirmarse la regla de interpretación específica de este evento y su alcance por versión. La captura muestra que una regla que exigiera igualdad entre ambos campos rechazaría estos registros, pero no demuestra que la diferencia observada esté garantizada por el contrato del evento. Tampoco permite concluir que no exista un contrato público admitido para este uso. Para resolver esa cuestión se necesita una referencia específica del evento o una aclaración del equipo responsable de Windows TCP/IP.

    Espero que esta información sea útil. Si esta instrucción aplica a tu situación, te agradecería mucho si pudieras seguirla aquí para que otros que experimenten un comportamiento similar también se beneficien de ella.

    Was this answer helpful?

    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.