详细的查询进程和端口的 API 的方法
2012-02-20 17:04
579 查看
查询进程和端口的 API 介绍:
好,上面说的有点离题了,这篇博文的目的在应用层而不在内核层,
所以我们无须去体会 Windows 网络层的这种变化。
一般来说,要完成进程和端口的映射,我们使用的是由 IPHlpapi.dll 中导出的 API 来完成的,
在 Vista 之前的操作系统中,要查询进程和端口的信息,容易很多,
你可以通过调用 IPHlpapi.dll 中导出的下面两个 API 来完成查询 TCP 和 UDP 端口的信息,
下面的两个 API 分别用来查询 TCP 和 UDP 端口信息,
(下面的两个 API 仅适用于 XP 和 Server 2003,在 Vista 以及 7 中,这两个 API 被移除)
[/code]
[/code]
参数说明:
第一个参数:很显然,为输出参数,带回我们查询到的 TCP 或者 UDP 信息;
第二个参数:也很显然,判断输出结果是否排序;
第三个参数:指定在哪个 Heap 上分配内存;
第四个参数:指定用来控制 Heap 的标识;
第四个参数:指定 IP_V4 还是 IP_V6,具体看下面的截图:
不过要完成进程和端口的映射在 Vista 和 7 下确实也没那么容易,至于原因呢,
就是 IPHlpapi.dll 中关于查询进程和端口信息的 API 没有公开,即为 UnDocument API,
不过我们还是可以通过 UnDocument API 来完成这个查询的工作,具体涉及到下面的两个 API,
当然,下面的这两个 API 由于是 UnDocumnet API,自然你查什么 MSDN 啊之类都找不到这个 API 的声明的,
下面的两个 API 分别用来查询 TCP 和 UDP 端口信息,
[/code]
[/code]
参数说明:
第一个参数:pTcpTable_Vista 或者 pUdpTable 则不需要多说,其为输出参数,带回查询到的值;
第二个参数:heap 也不需要多说,其指示要从哪个 Heap 上面分配内存;
第三个参数:flags 则未知,一般都设置为 1,不过貌似设置为 2 啊之类的好像又多影响不大;
好,上面说的有点离题了,这篇博文的目的在应用层而不在内核层,
所以我们无须去体会 Windows 网络层的这种变化。
一般来说,要完成进程和端口的映射,我们使用的是由 IPHlpapi.dll 中导出的 API 来完成的,
在 Vista 之前的操作系统中,要查询进程和端口的信息,容易很多,
你可以通过调用 IPHlpapi.dll 中导出的下面两个 API 来完成查询 TCP 和 UDP 端口的信息,
下面的两个 API 分别用来查询 TCP 和 UDP 端口信息,
(下面的两个 API 仅适用于 XP 和 Server 2003,在 Vista 以及 7 中,这两个 API 被移除)
[code] [code] DWORD WINAPI AllocateAndGetTcpExTableFromStack(
__out PVOID* ppTcpTable,
__inBOOL bOrder,
__inHANDLE hHeap,
__inDWORD dwFlags,
__inDWORD dwFamily
);
DWORD WINAPI AllocateAndGetUdpExTableFromStack(
__out PVOID* ppUDPTable,
__inBOOL bOrder,
__inHANDLE hHeap,
__inDWORD dwFlags,
__inDWORD dwFamily
);
[/code]
[/code]
参数说明:
第一个参数:很显然,为输出参数,带回我们查询到的 TCP 或者 UDP 信息;
第二个参数:也很显然,判断输出结果是否排序;
第三个参数:指定在哪个 Heap 上分配内存;
第四个参数:指定用来控制 Heap 的标识;
第四个参数:指定 IP_V4 还是 IP_V6,具体看下面的截图:
不过要完成进程和端口的映射在 Vista 和 7 下确实也没那么容易,至于原因呢,
就是 IPHlpapi.dll 中关于查询进程和端口信息的 API 没有公开,即为 UnDocument API,
不过我们还是可以通过 UnDocument API 来完成这个查询的工作,具体涉及到下面的两个 API,
当然,下面的这两个 API 由于是 UnDocumnet API,自然你查什么 MSDN 啊之类都找不到这个 API 的声明的,
下面的两个 API 分别用来查询 TCP 和 UDP 端口信息,
[code] [code]//=====================================================================================//
//Name: DWORD InternalGetTcpTable2() //
// //
//Descripion: 该函数在 Windows Vista 以及 Windows 7 下面效//
// //
//=====================================================================================//
typedef DWORD (WINAPI *PFNInternalGetTcpTable2)(
PMIB_TCPEXTABLE_VISTA *pTcpTable_Vista,
HANDLE heap,
DWORD flags
);
//=====================================================================================//
//Name: DWORD InternalGetUdpTableWithOwnerPid()//
// //
//Descripion: 该函数在 Windows Vista 以及 Windows 7 下面效//
// //
//=====================================================================================//
typedef DWORD (WINAPI *PFNInternalGetUdpTableWithOwnerPid)(
PMIB_UDPEXTABLE *pUdpTable,
HANDLE heap,
DWORD flags
);
[/code]
[/code]
参数说明:
第一个参数:pTcpTable_Vista 或者 pUdpTable 则不需要多说,其为输出参数,带回查询到的值;
第二个参数:heap 也不需要多说,其指示要从哪个 Heap 上面分配内存;
第三个参数:flags 则未知,一般都设置为 1,不过貌似设置为 2 啊之类的好像又多影响不大;
相关文章推荐
- 根据端口查找占用进程——API方法
- cmd中查看端口连接情况并关关闭相应的端口进程的方法
- Windows下查询指定端口进程,并杀死
- MACOSX下查看某个端口被哪个程序占用及杀进程方法
- 如何查询端口被占用及停止程序的方法
- [转]详细讲解提高数据库查询效率的实用方法、外键关于性能
- [原创] WinXP下根据端口查询对应的进程
- [原创] SuseLinux下根据端口查询对应的进程
- C#各种结束进程的方法详细介绍(转)
- 程序中调用进程API时进程打开缓慢引起方法调用失败
- Windows 下80端口被进程 System & PID=4 占用的解决方法
- 详细讲解提高数据库查询效率的实用方法
- oracle 中查询被锁的对象,并杀死死锁进程的方法
- Linux学习之端口被占用查询方法详解
- Windows下80端口被进程System&PID=4占用的解决方法
- 在windows系统的cmd窗口中命令查询指定端口占用的进程并关闭
- 笔记:linux下查询网络端口被监听的信息方法。
- Windows的cmd命令查询指定端口占用的进程并关闭
- 查询多个进程的目录和端口
- windows 8 查询端口,使用pid杀掉进程命令