0
回答
GetExtendedTcpTable函数问题
华为云数据库免费试用   

本人写了一个获取进程的MFC程序,由于win7中不具有AllocateAndGetTcpExTableFromStack这个函数,因此我用了IPhlpapi.dll这个动态链接库,使用其中的GetExtendedTcpTable这个函数,但是我怎么用都不行,请大虾们指教!谢谢!

下面是部分代码:

typedef   struct   {     

DWORD dwState;     

DWORD dwLocalAddr;     

DWORD dwLocalPort;     

DWORD dwRemoteAddr;     

DWORD dwRemotePort;     

DWORD dwOwningPid; 

}   MIB_TCPROW_OWNER_PID,     *PMIB_TCPROW_OWNER_PID; 

 

typedef   struct   {     

DWORD                   dwNumEntries;     

MIB_TCPROW_OWNER_PID       table[500]; 

}   MIB_TCPTABLE_OWNER_PID,     *PMIB_TCPTABLE_OWNER_PID; 

 

typedef   enum   

    TCP_TABLE_BASIC_LISTENER, 

TCP_TABLE_BASIC_CONNECTIONS, 

TCP_TABLE_BASIC_ALL, 

TCP_TABLE_OWNER_PID_LISTENER, 

TCP_TABLE_OWNER_PID_CONNECTIONS, 

TCP_TABLE_OWNER_PID_ALL, 

TCP_TABLE_OWNER_MODULE_LISTENER, 

TCP_TABLE_OWNER_MODULE_CONNECTIONS, 

TCP_TABLE_OWNER_MODULE_ALL 

}TCP_TABLE_CLASS,     *PTCP_TABLE_CLASS; 

//***********函数指针

typedef   DWORD   (WINAPI *PGetExtendedTcpTable)

 PMIB_TCPTABLE_OWNER_PID   pTcpTable, 

 PDWORD   pdwSize, 

 BOOL   bOrder, 

 ULONG   ulAf, 

 TCP_TABLE_CLASS   TableClass, 

 ULONG   Reserved 

 ); 

// 定义扩展函数指针

PGetExtendedTcpTable GetExtendedTcpTable;

 

//***********函数指针

typedef   DWORD   (WINAPI *PGetExtendedTcpTable)

 PMIB_TCPTABLE_OWNER_PID   pTcpTable, 

 PDWORD   pdwSize, 

 BOOL   bOrder, 

 ULONG   ulAf, 

 TCP_TABLE_CLASS   TableClass, 

 ULONG   Reserved 

 ); 

实际的使用代码是:

// 定义扩展函数指针

PGetExtendedTcpTable GetExtendedTcpTable;

// 获取扩展函数的入口地址

HMODULE hModule = ::LoadLibrary("iphlpapi.dll");

GetExtendedTcpTable = (PGetExtendedTcpTable)::GetProcAddress(hModule,                                                                         "GetExtendedTcpTable");

// 调用扩展函数,获取TCP扩展连接表和UDP扩展监听表

PMIB_TCPTABLE_OWNER_PID pTcpExTable = NULL;

DWORD dw1;

GetExtendedTcpTable(NULL,&dw1 ,TRUE, AF_INET,TCP_TABLE_OWNER_PID_CONNECTIONS,0);

pTcpExTable = new MIB_TCPTABLE_OWNER_PID;

if( GetExtendedTcpTable(pTcpExTable,&dw1 ,TRUE, AF_INET,TCP_TABLE_OWNER_MODULE_ALL,0) != 0)

{

AfxMessageBox(" Failed to snapshot TCP endpoints.");

return -1;

}

程序运行到这里总是会弹框“Failed to snapshot TCP endpoints.”

请大虾们帮帮忙~~~~>_<~~~~~

 

举报
xzzxzt
发帖于6年前 0回/2K+阅
顶部