MASM32v11编程调用Process32First失败: 程序发出命令,但命令长度不正确
来源:http://www.tudoupe.com时间:2022-07-31
一位网友发来邮件反映说用MASM32写GUI版的netstat-NetViewG.exe不能在Windows 10上运行。
试了一下,NetViewG.exe在Windows 10上运行确实会给出一个出错提示,不能在窗口里显示协议统计信息和当前 TCP/IP 网络连接信息。
原因在于NetViewG是在2008年写的,使用API函数是AllocateAndGetTcpExTableFromStack和AllocateAndGetUdpExTableFromStack,Iphlpapi从Windows7.dll开始不再支持,这意味着NetViewG只能在Windows XP上正常运行。
利用周末的空闲时间更新.
我查了一遍,只找到NetViewC的源代码。
重新编译连接到NetViewC时会遇到以下提示:
R:masm32worksnetView>MASM32BINBuildc.bat 3
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.Assembling: 3.asm
***********
ASCII build
***********3.asm(256) : error A2006: undefined symbol : Process32First
3.asm(269) : error A2006: undefined symbol : Process32Next
_
Assembly Error
请按任何键继续。
这两个函数在MASM32和 kernel32.Inc中定义,为什么不定义?
Open kernel 32.Inc 搜索:
Process32FirstW PROTO STDCALL :DWORD,:DWORD
IFDEF __UNICODE__
Process32First equ <Process32FirstW>
ENDIF
Process32NextW PROTO STDCALL :DWORD,:DWORD
IFDEF __UNICODE__
Process32Next equ <Process32NextW>
ENDIF
为什么只有 Unicode 版本,没有 ANSI 呢?
然后查看Unicode版本,看看编译的连接是否成功完成,但当程序运行到Process32First()时返回FALSE,并添加下列showErrMsg()来获取错误信息:
showErrMsg proc
local dwMsgId: dword
local lpBuf : dwordinvoke GetLastError
mov dwMsgId,eax
INVOKE FormatMessage, FORMAT_MESSAGE_ALLOCATE_BUFFER
+ FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwMsgId, 0
, ADDR lpBuf, 0, NULL
invoke StdOut, lpBuf
invoke LocalFree, lpBuf
ret
showErrMsg endp
得到的出错信息是:
程序发出了订单,但订单的长度不正确
这个估计是基于Unicode版本的。
看看MASM32论坛,外国网民罗萨已经发现了这个问题,他指出,这是MASM32 V11版本的32内核。 Inc, Kernel 32.lib和 Kernl32p.Inc, Kernl32p.Both Module32First / Module32Next and Process32First / Process32Next 在 lib中都有错误信息。根据微软MSDN,这两对函数的ANSI版本不是Module32FirstA / Module32NextA nor Process32FirstA / Process32NextA,而是 Module32First / Module32Next and Process32First / Process32Next,在调用上述两个函数对的ANSI版本时会遇到问题。
热心的网友并且提供了修正的kernel32.inc、Kernel32.lib和kernl32p.inc、kernl32p.lib文件下载,CSDN上的下载地址如下:
MASM32v11版本中kernel32.inc和Kernel32.lib修正版。-C++文档类资源-CSDN文库
MASM32v11中的kernl32p.inc和kernl32p.lib存在bug,这是修正后的版本。-C++文档类资源-CSDN文库
相关新闻
- 2022-08-04 WPF的由来
- 2022-08-04 Win11勒索软件防护怎么打开?Win11安
- 2022-08-04 Windows系统jdk的配置
- 2022-08-04 Windows10 OneNote怎么重新登录?如何重
- 2022-08-04 超好用的 Windows 效率工具推荐
- 2022-08-04 Windows如何在CMD或PowerShell中配置代理
- 2022-08-04 powershell和cmd对比
- 2022-08-04 【QT】Windows下QT下载安装
- 2022-08-04 windows下 C++ 实现类属性的get和set方
- 2022-08-04 Win11快速助手在哪里?Win11打开快速
|
|
|
|
|
|
|
|
|
|