U盘PE| w764位旗舰版下载 | U盘装win7系统 | U盘启动 |win7pe | win10下载 |加入收藏土豆PE官网U盘PE,U盘装win7系统,win7pe,U盘启动,U盘装系统,w764位旗舰版下载站!
当前位置:主页 > 帮助中心 > 帮助中心 >

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  : dword

invoke 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文库

Copyright © 2012-2014 Www.tudoupe.Com. 土豆启动 版权所有 意见建议:tdsky@tudoupe.com

土豆系统,土豆PE,win7系统下载,win7 64位旗舰版下载,u盘启动,u盘装系统,win10下载,win10正式版下载,win10 RTM正式版下载,win8下载,电脑蓝屏,IE11修复,网络受限,4K对齐,双系统,隐藏分区,系统安装不了,U盘装系统,笔记本装系统,台式机装系统,diskgenius运用,GHSOT装系统,U盘修复,U盘技巧,U盘速度,U盘不能格式化,U盘复制发生错误,U盘加密,U盘选购,开机黑屏,蓝屏,进不了系统,上不了网,打不开程序,点击无反应,系统设置,PE个性化,PE添加网络,PE维护系统

点击这里给我发消息