Autor
|
Tema: Problemas para usar la función GetExtendedTcpTable (Leído 3,419 veces)
|
el_doctor
Desconectado
Mensajes: 57
|
Saludos estoy haciendo un proceso que me recupere los procesos que están usando una conexión TCP/IP leyendo la documentación MSDN esta función devuelve los datos que necesito pero tengo dudas con el primer parámetro de salida que es donde se recupera la tabla de la estructura con los datos, según la documentación MSDN la sintaxis de la función es la siguiente: DWORD GetExtendedTcpTable( _Out_ PVOID pTcpTable, _Inout_ PDWORD pdwSize, _In_ BOOL bOrder, _In_ ULONG ulAf, _In_ TCP_TABLE_CLASS TableClass, _In_ ULONG Reserved );
el problema que tengo es con el parámetro pTcpTable según entiendo debe ser una estructura de datos que ya existe en "tcpmib.h" pero no se como usar estas estructuras y como recuperaría los datos que envía la función en esta variable. la función la he definido de la siguiente manera: DWORD size; DWORD dwResult; dwResult = GetExtendedTcpTable( , size, false, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0);
les agradecería me ayudaran en comprender mejor para usar esta función
Una aclaración la variable size no le he asignado ningún valor porque igual como no se que estructura es pTcpTable no puedo darle un valor. size = sizeof (PVOID) //no se que estructura corresponde pTcpTable el tipo lo pone como PVOID
|
|
« Última modificación: 5 Septiembre 2013, 19:36 pm por Eternal Idol »
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
La misma funcion te devuelve el tamaño necesario: pdwSize [in, out] The estimated size of the structure returned in pTcpTable, in bytes. If this value is set too small, ERROR_INSUFFICIENT_BUFFER is returned by this function, and this field will contain the correct size of the structure.DWORD size = 0; DWORD dwResult = GetExtendedTcpTable(NULL, &size, false, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0); if (dwResult == ERROR_INSUFFICIENT_BUFFER) { PVOID table = malloc(size); dwResult = GetExtendedTcpTable(table, &size, false, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0); if (dwResult == NO_ERROR) { PMIB_TCPTABLE_OWNER_PID tabla = (PMIB_TCPTABLE_OWNER_PID)table; } free(table); } Y la estructura tambien esta en la documentacion: TCP_TABLE_CLASS enumerationTCP_TABLE_OWNER_PID_ALL A MIB_TCPTABLE_OWNER_PID or MIB_TCP6TABLE_OWNER_PID structure that contains all TCP endpoints on the local computer is returned to the caller.
|
|
« Última modificación: 5 Septiembre 2013, 19:38 pm por Eternal Idol »
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
el_doctor
Desconectado
Mensajes: 57
|
Gracias Eternal Idol el código me resulto de mucha utilidad hice algunos cambios lo dejo aquí para que sirva de referencia a otros: DWORD size= 64; LPVOID table = new BYTE[size]; while( dwResult = GetExtendedTcpTable(table, &size, false, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0) == ERROR_INSUFICIENT_BUFFER) delete [] table, table = new BYTE[size *= 2]; if(dwResut != NO_ERROR) { //TODO error return NULL; } PMIB_TCPTABLE_OWNER_PID tabla = (PMIB_TCPTABLE_OWNER_PID)table;
disculpa las molestias pero ahora tengo la duda quiero obtener sólo un registro de toda la lista de estructura es decir hacer un for que me recorra toda la lista pero sólo recuperar dwOwningPid de la estructura MIB_TCPROW_OWNER_PID
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
No tiene mucho sentido hacer ese bucle, como te dije la funcion te devuelve el tamaño que necesita, ir aumentando en 64 (un valor arbitrario), reservar y liberar memoria es poco optimizado.
En el campo dwNumEntries de la estructura MIB_TCPTABLE_OWNER tenes la cantidad de elementos en la tabla. Con eso podes hacer el array facilmente.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
el_doctor
Desconectado
Mensajes: 57
|
Gracias por tus sugerencias estoy corriendo el código disculpa de que biblioteca son AF_INET y ERROR_INSUFICIENT_BUFFER ya que me da un error de compilación que no están declarados esos identificadores
Salodos lo de "AF_INET" ya encontré en que biblioteca asociada a la dll se encontraba pero sigo sin poder encontrar donde está declarado "ERROR_INSUFICIENT_BUFFER"
|
|
« Última modificación: 5 Septiembre 2013, 22:43 pm por Eternal Idol »
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Es ERROR_INSUFFICIENT_BUFFER, incluyendo windows.h ya te deberia funcionar.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
el_doctor
Desconectado
Mensajes: 57
|
Gracias Eternal Idol erra un error de sintaxis el mío tengo ratos de estar dando lata con esto ahora tengo un problema de conversión cuando hago el for para recorrer la tabla no se si he hecho algo mal si le das una chequeada y me ayudas te lo agradecería. for(int i=0; i < (int) pTcpTable->dwNumEntries; i++)
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
No existe la variable pTcpTable (asi se llama el primer parametro de la funcion GetExtendedTcpTable).
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
el_doctor
Desconectado
Mensajes: 57
|
Me dará problemas si la declaro igual que el parámetro de la función???
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
No tengo tu codigo pero inverti un poco mas de esfuerzo y prueba y error por tu cuenta y seguro que logras hacerlo funcionar.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
problemas para usar el swap magic con un juego
Juegos y Consolas
|
albert25
|
0
|
1,897
|
25 Octubre 2004, 08:16 am
por albert25
|
|
|
Problemas para enviar correo en PHP, funcion mail()
PHP
|
Diabliyo
|
7
|
5,707
|
20 Diciembre 2006, 17:31 pm
por Azielito
|
|
|
PROBLEMAS PARA USAR UN VOLANTE DE PSX EN EL PC
Juegos y Consolas
|
Artikbot
|
2
|
3,037
|
5 Agosto 2007, 13:30 pm
por Artikbot
|
|
|
Que funcion puedo usar?
Programación C/C++
|
Garfield07
|
3
|
2,727
|
6 Septiembre 2010, 11:41 am
por Garfield07
|
|
|
que funcion tendria que usar para que no de error
Desarrollo Web
|
Pajarito434
|
3
|
2,409
|
11 Febrero 2017, 23:48 pm
por ivancea96
|
|