在Windows 3.1 WinAPI中如何锁定文件?
我试图在DosBox中运行Windows3.1中的VisualBasic4(16位)。但是,它未能启动,出现错误: 必须安装SHARE.exe才能运行Visual Basic 一些旧的MS-DOS应用程序只是检查EXE是否存在以及它是否存在于autoexec.bat中,但在这种情况下,EXE存在,但错误仍然发生 在Windows 7 32位上运行并使用附加到NTVDM.exe的调试器时,我发现使用了以下进程:在Windows 3.1 WinAPI中如何锁定文件?,winapi,dosbox,windows-3.1,Winapi,Dosbox,Windows 3.1,我试图在DosBox中运行Windows3.1中的VisualBasic4(16位)。但是,它未能启动,出现错误: 必须安装SHARE.exe才能运行Visual Basic 一些旧的MS-DOS应用程序只是检查EXE是否存在以及它是否存在于autoexec.bat中,但在这种情况下,EXE存在,但错误仍然发生 在Windows 7 32位上运行并使用附加到NTVDM.exe的调试器时,我发现使用了以下进程: 临时文件是用 调用API 调用API 当我在LockFile API返回时设置断点并在
- 内核!开放文件
- 内核_LWRITE
- 内核_笨蛋
- 内核_洛本
- 内核_利泽克
- 内核_创造
- 内核_洛斯
- OLE2!油锁运行
- 内核!锁资源
- 内核!锁段
锁文件5c00h
期望:
AX 5c00H
BX文件句柄
CX:DX文件距文件开头的偏移量(CX*65536)+DX
SI:DI要锁定的区域的字节长度(SI*65536)+DI
返回:如果CF设置为CY,则返回AX错误代码 此函数用于锁定对BX中文件句柄标识的文件区域的访问。从文件逻辑偏移量CX:DX开始并延伸到SI:DI长度的文件区域已锁定 解除锁定文件5c01h
期望:
AX 5c01H
BX文件句柄
CX:DX文件距文件开头的偏移量(CX*65536)+DX
SI:DI要锁定的区域的字节长度(SI*65536)+DI
返回:如果CF设置为CY,则返回AX错误代码 此函数用于解锁对先前锁定的文件区域的访问
您还可以检查主要标记为内部的5dh函数 在免费DOS中实现:
参见DosLockUnlock功能
如果您计划将此功能带到Dos框中,查看vDos源代码可能会有所帮助
但是在VB.exe中,我找不到任何对LOCKFILE API的引用 我不确定Win16中是否存在
LockFile
(可能不存在),但有可能通过DOS中断直接调用共享API
我怀疑NTVDM.exe不知怎么翻译了它
我不确定,但我会假设它拦截DOS中断并使用Win32 API调用来模拟所需的行为
我正试图弄清楚锁/解锁文件测试是如何完成的,这样我就可以尝试在DosBox中进行修正,并创建自己的测试程序,以便在C或VB中进行复制
我会尝试在DOS框中记录INT 21h和INT 2Fh调用