好友
阅读权限10
听众
最后登录1970-1-1
|
执_念
发表于 2024-11-18 14:57
version.dll劫持是经常用到的技术,但是我用c写劫持dll时总是得把所有导出函数都写一遍
version.dll劫持注入模版_version.dll 劫持源代码-CSDN博客
网上能搜到的只能支持32位
其实这事说简单也简单,没啥技术含量;说难也难,有十几个函数得按着签名写一遍...非常浪费时间,故把通用模板放到论坛上以备我自己和大家取用
.版本 2
.支持库 eAPI
.局部变量 hVersion, 整数型
.局部变量 systemDirectory, 文本型
.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
_临时子程序 ()
返回 (0) ' 可以根据需要修改返回值
.子程序 _临时子程序
.参数 FuncName, 文本型
.局部变量 funcAddress, 整数型
如果 (hVersion = 0)
获取系统目录 (systemDirectory)
systemDirectory = systemDirectory + “\System32\version.dll”
hVersion = 加载动态链接库 (systemDirectory)
如果 (hVersion = 0)
返回 (假)
结束如果
结束如果
funcAddress = 获取函数地址 (hVersion, FuncName)
返回 (funcAddress)
.子程序 GetFileVersionInfoA, 布尔型, 公开
.参数 lptstrFilename, 文本型
.参数 dwHandle, 整数型
.参数 dwLen, 整数型
.参数 lpData, 整数型
.局部变量 pGetFileVersionInfoA, 整数型
pGetFileVersionInfoA = _临时子程序 (“GetFileVersionInfoA”)
调用DLL函数 (pGetFileVersionInfoA, lptstrFilename, dwHandle, dwLen, lpData)
返回 (取布尔结果 ())
.子程序 GetFileVersionInfoByHandle, 布尔型, 公开
.参数 dwFlags, 整数型
.参数 hFile, 整数型
.参数 pdwLen, 整数型指针
.局部变量 pGetFileVersionInfoByHandle, 整数型
pGetFileVersionInfoByHandle = _临时子程序 (“GetFileVersionInfoByHandle”)
调用DLL函数 (pGetFileVersionInfoByHandle, dwFlags, hFile, pdwLen)
返回 (取布尔结果 ())
.子程序 GetFileVersionInfoExA, 布尔型, 公开
.参数 dwFlags, 整数型
.参数 lpwstrFilename, 文本型
.参数 dwHandle, 整数型
.参数 dwLen, 整数型
.参数 lpData, 整数型
.局部变量 pGetFileVersionInfoExA, 整数型
pGetFileVersionInfoExA = _临时子程序 (“GetFileVersionInfoExA”)
调用DLL函数 (pGetFileVersionInfoExA, dwFlags, lpwstrFilename, dwHandle, dwLen, lpData)
返回 (取布尔结果 ())
.子程序 GetFileVersionInfoExW, 布尔型, 公开
.参数 dwFlags, 整数型
.参数 lpwstrFilename, 文本型
.参数 dwHandle, 整数型
.参数 dwLen, 整数型
.参数 lpData, 整数型
.局部变量 pGetFileVersionInfoExW, 整数型
pGetFileVersionInfoExW = _临时子程序 (“GetFileVersionInfoExW”)
调用DLL函数 (pGetFileVersionInfoExW, dwFlags, lpwstrFilename, dwHandle, dwLen, lpData)
返回 (取布尔结果 ())
.子程序 GetFileVersionInfoSizeA, 整数型, 公开
.参数 lptstrFilename, 文本型
.参数 lpdwHandle, 整数型指针
.局部变量 pGetFileVersionInfoSizeA, 整数型
pGetFileVersionInfoSizeA = _临时子程序 (“GetFileVersionInfoSizeA”)
返回 (调用DLL函数 (pGetFileVersionInfoSizeA, lptstrFilename, lpdwHandle))
.子程序 GetFileVersionInfoSizeExA, 整数型, 公开
.参数 dwFlags, 整数型
.参数 lpwstrFilename, 文本型
.参数 lpdwHandle, 整数型指针
.局部变量 pGetFileVersionInfoSizeExA, 整数型
pGetFileVersionInfoSizeExA = _临时子程序 (“GetFileVersionInfoSizeExA”)
返回 (调用DLL函数 (pGetFileVersionInfoSizeExA, dwFlags, lpwstrFilename, lpdwHandle))
.子程序 GetFileVersionInfoSizeExW, 整数型, 公开
.参数 dwFlags, 整数型
.参数 lpwstrFilename, 文本型
.参数 lpdwHandle, 整数型指针
.局部变量 pGetFileVersionInfoSizeExW, 整数型
pGetFileVersionInfoSizeExW = _临时子程序 (“GetFileVersionInfoSizeExW”)
返回 (调用DLL函数 (pGetFileVersionInfoSizeExW, dwFlags, lpwstrFilename, lpdwHandle))
.子程序 GetFileVersionInfoSizeW, 整数型, 公开
.参数 lptstrFilename, 文本型
.参数 lpdwHandle, 整数型指针
.局部变量 pGetFileVersionInfoSizeW, 整数型
pGetFileVersionInfoSizeW = _临时子程序 (“GetFileVersionInfoSizeW”)
返回 (调用DLL函数 (pGetFileVersionInfoSizeW, lptstrFilename, lpdwHandle))
.子程序 GetFileVersionInfoW, 布尔型, 公开
.参数 lptstrFilename, 文本型
.参数 dwHandle, 整数型
.参数 dwLen, 整数型
.参数 lpData, 整数型
.局部变量 pGetFileVersionInfoW, 整数型
pGetFileVersionInfoW = _临时子程序 (“GetFileVersionInfoW”)
调用DLL函数 (pGetFileVersionInfoW, lptstrFilename, dwHandle, dwLen, lpData)
返回 (取布尔结果 ())
.子程序 VerFindFileA, 整数型, 公开
.参数 uFlags, 整数型
.参数 szFileName, 文本型
.参数 szWinDir, 文本型
.参数 szAppDir, 文本型
.参数 szCurDir, 文本型指针
.参数 puCurDirLen, 整数型指针
.参数 szDestDir, 文本型指针
.参数 puDestDirLen, 整数型指针
.局部变量 pVerFindFileA, 整数型
pVerFindFileA = _临时子程序 (“VerFindFileA”)
返回 (调用DLL函数 (pVerFindFileA, uFlags, szFileName, szWinDir, szAppDir, szCurDir, puCurDirLen, szDestDir, puDestDirLen))
.子程序 VerFindFileW, 整数型, 公开
.参数 uFlags, 整数型
.参数 szFileName, 文本型
.参数 szWinDir, 文本型
.参数 szAppDir, 文本型
.参数 szCurDir, 文本型指针
.参数 puCurDirLen, 整数型指针
.参数 szDestDir, 文本型指针
.参数 puDestDirLen, 整数型指针
.局部变量 pVerFindFileW, 整数型
pVerFindFileW = _临时子程序 (“VerFindFileW”)
返回 (调用DLL函数 (pVerFindFileW, uFlags, szFileName, szWinDir, szAppDir, szCurDir, puCurDirLen, szDestDir, puDestDirLen))
.子程序 VerInstallFileA, 整数型, 公开
.参数 uFlags, 整数型
.参数 szSrcFileName, 文本型
.参数 szDestFileName, 文本型
.参数 szSrcDir, 文本型
.参数 szDestDir, 文本型
.参数 szCurDir, 文本型
.参数 szTmpFile, 文本型指针
.参数 puTmpFileLen, 整数型指针
.局部变量 pVerInstallFileA, 整数型
pVerInstallFileA = _临时子程序 (“VerInstallFileA”)
返回 (调用DLL函数 (pVerInstallFileA, uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile, puTmpFileLen))
.子程序 VerInstallFileW, 整数型, 公开
.参数 uFlags, 整数型
.参数 szSrcFileName, 文本型
.参数 szDestFileName, 文本型
.参数 szSrcDir, 文本型
.参数 szDestDir, 文本型
.参数 szCurDir, 文本型
.参数 szTmpFile, 文本型指针
.参数 puTmpFileLen, 整数型指针
.局部变量 pVerInstallFileW, 整数型
pVerInstallFileW = _临时子程序 (“VerInstallFileW”)
返回 (调用DLL函数 (pVerInstallFileW, uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, szTmpFile, puTmpFileLen))
.子程序 VerLanguageNameA, 整数型, 公开
.参数 wLang, 整数型
.参数 szLang, 文本型指针
.参数 cchLang, 整数型
.局部变量 pVerLanguageNameA, 整数型
pVerLanguageNameA = _临时子程序 (“VerLanguageNameA”)
返回 (调用DLL函数 (pVerLanguageNameA, wLang, szLang, cchLang))
.子程序 VerLanguageNameW, 整数型, 公开
.参数 wLang, 整数型
.参数 szLang, 文本型指针
.参数 cchLang, 整数型
.局部变量 pVerLanguageNameW, 整数型
pVerLanguageNameW = _临时子程序 (“VerLanguageNameW”)
返回 (调用DLL函数 (pVerLanguageNameW, wLang, szLang, cchLang))
.子程序 VerQueryValueA, 布尔型, 公开
.参数 pBlock, 整数型
.参数 lpSubBlock, 文本型
.参数 lplpBuffer, 整数型指针
.参数 puLen, 整数型指针
.局部变量 pVerQueryValueA, 整数型
pVerQueryValueA = _临时子程序 (“VerQueryValueA”)
调用DLL函数 (pVerQueryValueA, pBlock, lpSubBlock, lplpBuffer, puLen)
返回 (取布尔结果 ())
.子程序 VerQueryValueW, 布尔型, 公开
.参数 pBlock, 整数型
.参数 lpSubBlock, 文本型
.参数 lplpBuffer, 整数型指针
.参数 puLen, 整数型指针
.局部变量 pVerQueryValueW, 整数型
pVerQueryValueW = _临时子程序 (“VerQueryValueW”)
调用DLL函数 (pVerQueryValueW, pBlock, lpSubBlock, lplpBuffer, puLen)
返回 (取布尔结果 ())
另外,这里是一个读取文件中函数原型生成形如上的劫持代码的小工具,上面的代码是用这个小工具根据提取的函数原型生成的
.版本 2
.支持库 eAPI
.支持库 eRegEx
.局部变量 funcSig, 文本型
.局部变量 inf, 文件流
.局部变量 exportCode, 文本型
.局部变量 sig, FuncSignature
.局部变量 result, 整数型
.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
打开文件 (inf, “cilp_r.txt”, #只读)
如果 (inf = -1)
调试输出 (“无法打开文件 cilp_r.txt”)
返回 (0)
结束如果
.判断循环首 ()
读入一行 (inf, funcSig)
如果 (funcSig = “”)
跳出循环 ()
结束如果
result = parseFunctionSignature (funcSig, sig)
如果 (result = 0)
抛出异常 (“Invalid function signature.”)
结束如果
exportCode = generateExportFunctionCode (sig)
调试输出 (exportCode)
.判断循环尾 ()
关闭文件 (inf)
返回 (0)
.子程序 parseFunctionSignature, 整数型, 公开
.参数 signature, 文本型
.参数 sig, FuncSignature 参考
.局部变量 re, 正则表达式对象
.局部变量 match, 正则表达式匹配结果集
.局部变量 params, 文本型
.局部变量 paramRe, 正则表达式对象
.局部变量 paramMatch, 正则表达式匹配结果集
.局部变量 paramIterator, 正则表达式迭代器
.局部变量 paramEnd, 正则表达式迭代器
创建正则表达式对象 (re, “(\w+)\s+(\w+)$(.*?)$”)
查找正则表达式 (match, re, signature)
如果 (match.找到 = 假)
返回 (0)
结束如果
sig.returnType = 取子匹配项文本 (match, 1)
sig.funcName = 取子匹配项文本 (match, 2)
params = 取子匹配项文本 (match, 3)
创建正则表达式对象 (paramRe, “(\w+)\s+(\w+)”)
创建正则表达式迭代器 (paramIterator, paramRe, params)
paramEnd = 创建空迭代器 ()
.判断循环首 (比较正则表达式迭代器 (paramIterator, paramEnd) ≠ 真)
获取下一个匹配项 (paramMatch, paramIterator)
加入成员 (sig.paramTypes, 取子匹配项文本 (paramMatch, 1))
加入成员 (sig.paramNames, 取子匹配项文本 (paramMatch, 2))
.判断循环尾 ()
返回 (1)
.子程序 generateExportFunctionCode, 文本型, 公开
.参数 sig, FuncSignature
.局部变量 code, 文本缓冲区
.局部变量 newFuncName, 文本型
.局部变量 i, 整数型
newFuncName = “P_” + sig.funcName
追加文本 (code, “extern \”C\” ” + sig.returnType + “ ” + newFuncName + “(\n”)
.计次循环首 (取数组成员数 (sig.paramTypes), i)
追加文本 (code, “” + sig.paramTypes [i] + “ ” + sig.paramNames [i])
如果 (i < 取数组成员数 (sig.paramTypes) - 1)
追加文本 (code, “,\n”)
否则
追加文本 (code, “\n”)
结束如果
.计次循环尾 ()
追加文本 (code, “) {\n”)
追加文本 (code, “” + sig.returnType + “ (*p” + sig.funcName + “)(")
.计次循环首 (取数组成员数 (sig.paramTypes), i)
追加文本 (code, sig.paramTypes [i])
如果 (i < 取数组成员数 (sig.paramTypes) - 1)
追加文本 (code, “, ”)
结束如果
.计次循环尾 ()
追加文本 (code, “) = (“ + sig.returnType + “(*)(")
.计次循环首 (取数组成员数 (sig.paramTypes), i)
追加文本 (code, sig.paramTypes [i])
如果 (i < 取数组成员数 (sig.paramTypes) - 1)
追加文本 (code, “, ”)
结束如果
.计次循环尾 ()
追加文本 (code, ")) (GetVersionFuncAddress(\"" + sig.funcName + "\"));\n")
追加文本 (code, “return p” + sig.funcName + “(")
.计次循环首 (取数组成员数 (sig.paramNames), i)
追加文本 (code, sig.paramNames [i])
如果 (i < 取数组成员数 (sig.paramNames) - 1)
追加文本 (code, “, ”)
结束如果
.计次循环尾 ()
追加文本 (code, ");\n}\n")
返回 (到文本 (code))
.数据类型 FuncSignature, , 公开
.成员 returnType, 文本型
.成员 funcName, 文本型
.成员 paramTypes, 文本型, , "0"
.成员 paramNames, 文本型, , "0"
读取文件cilp_r.txt示例:
.版本 2
.支持库 eAPI
.局部变量 result, 整数型
.局部变量 dwHandle, 整数型
.局部变量 dwLen, 整数型
.局部变量 lpData, 整数型
.局部变量 hFile, 整数型
.局部变量 lplpData, 整数型指针
.局部变量 pdwLen, 整数型指针
.局部变量 dwFlags, 整数型
.局部变量 lpwstrFilename, 文本型
.局部变量 lpdwHandle, 整数型指针
.局部变量 uFlags, 整数型
.局部变量 szFileName, 文本型
.局部变量 szWinDir, 文本型
.局部变量 szAppDir, 文本型
.局部变量 szCurDir, 文本型
.局部变量 puCurDirLen, 整数型指针
.局部变量 szDestDir, 文本型
.局部变量 puDestDirLen, 整数型指针
.局部变量 szSrcFileName, 文本型
.局部变量 szDestFileName, 文本型
.局部变量 szSrcDir, 文本型
.局部变量 szTmpFile, 文本型
.局部变量 puTmpFileLen, 整数型指针
.局部变量 wLang, 整数型
.局部变量 szLang, 文本型
.局部_variable cchLang, 整数型
.局部变量 pBlock, 整数型
.局部变量 lpSubBlock, 文本型
.局部变量 lplpBuffer, 整数型指针
.局部变量 puLen, 整数型指针
.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
' 示例调用,实际使用时请根据需要调整参数
' GetFileVersionInfoA
API_GetFileVersionInfoA (“example.dll”, 0, 0, 0)
' GetFileVersionInfoByHandle
hFile = CreateFile (“example.dll”, # GENERIC_READ, # FILE_SHARE_READ, 0, # OPEN_EXISTING, 0, 0)
lplpData = 到整数型指针 (0)
pdwLen = 到整数型指针 (0)
API_GetFileVersionInfoByHandle (# GET_FILE_VER_MAJOR, hFile, lplpData, pdwLen)
' GetFileVersionInfoExA
dwFlags = # GET_FILE_VER_MAJOR
lpwstrFilename = “example.dll”
lpdwHandle = 到整数型指针 (0)
API_GetFileVersionInfoExA (dwFlags, lpwstrFilename, 0, 0, 0)
' GetFileVersionInfoExW
lpwstrFilename = “example.dll”
lpdwHandle = 到整数型指针 (0)
API_GetFileVersionInfoExW (dwFlags, 到Unicode (lpwstrFilename), 0, 0, 0)
' GetFileVersionInfoSizeA
lpdwHandle = 到整数型指针 (0)
dwLen = API_GetFileVersionInfoSizeA (“example.dll”, lpdwHandle)
' GetFileVersionInfoSizeExA
dwLen = API_GetFileVersionInfoSizeExA (dwFlags, lpwstrFilename, lpdwHandle)
' GetFileVersionInfoSizeExW
dwLen = API_GetFileVersionInfoSizeExW (dwFlags, 到Unicode (lpwstrFilename), lpdwHandle)
' GetFileVersionInfoSizeW
dwLen = API_GetFileVersionInfoSizeW (到Unicode (“example.dll”), lpdwHandle)
' GetFileVersionInfoW
API_GetFileVersionInfoW (到Unicode (“example.dll”), 0, 0, 0)
' VerFindFileA
szFileName = “example.dll”
szWinDir = “C:\Windows”
szAppDir = “C:\Program Files”
szCurDir = “”
puCurDirLen = 到整数型指针 (1024)
szDestDir = “”
puDestDirLen = 到整数型指针 (1024)
API_VerFindFileA (0, szFileName, szWinDir, szAppDir, &szCurDir, puCurDirLen, &szDestDir, puDestDirLen)
' VerFindFileW
szFileName = “example.dll”
szWinDir = “C:\Windows”
szAppDir = “C:\Program Files”
szCurDir = “”
puCurDirLen = 到整数型指针 (1024)
szDestDir = “”
puDestDirLen = 到整数型指针 (1024)
API_VerFindFileW (0, 到Unicode (szFileName), 到Unicode (szWinDir), 到Unicode (szAppDir), &szCurDir, puCurDirLen, &szDestDir, puDestDirLen)
' VerInstallFileA
szSrcFileName = “example.dll”
szDestFileName = “example.dll”
szSrcDir = “C:\Source”
szDestDir = “C:\Destination”
szCurDir = “”
szTmpFile = “”
puTmpFileLen = 到整数型指针 (1024)
API_VerInstallFileA (0, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, &szTmpFile, puTmpFileLen)
' VerInstallFileW
szSrcFileName = “example.dll”
szDestFileName = “example.dll”
szSrcDir = “C:\Source”
szDestDir = “C:\Destination”
szCurDir = “”
szTmpFile = “”
puTmpFileLen = 到整数型指针 (1024)
API_VerInstallFileW (0, 到Unicode (szSrcFileName), 到Unicode (szDestFileName), 到Unicode (szSrcDir), 到Unicode (szDestDir), 到Unicode (szCurDir), &szTmpFile, puTmpFileLen)
' VerLanguageNameA
wLang = 1033
szLang = “”
cchLang = 1024
API_VerLanguageNameA (wLang, &szLang, cchLang)
' VerLanguageNameW
wLang = 1033
szLang = “”
cchLang = 1024
API_VerLanguageNameW (wLang, &szLang, cchLang)
' VerQueryValueA
pBlock = 0
lpSubBlock = “\VarFileInfo\Translation”
lplpBuffer = 到整数型指针 (0)
puLen = 到整数型指针 (0)
API_VerQueryValueA (pBlock, lpSubBlock, lplpBuffer, puLen)
' VerQueryValueW
pBlock = 0
lpSubBlock = “\VarFileInfo\Translation”
lplpBuffer = 到整数型指针 (0)
puLen = 到整数型指针 (0)
API_VerQueryValueW (pBlock, 到Unicode (lpSubBlock), lplpBuffer, puLen)
返回 (0)
.子程序 API_GetFileVersionInfoA, 布尔型, 公开, 获取文件版本信息
.参数 lptstrFilename, 文本型
.参数 dwHandle, 整数型
.参数 dwLen, 整数型
.参数 lpData, 整数型
.局部变量 result, 布尔型
result = DLL调用 (“version.dll”, “GetFileVersionInfoA”, lptstrFilename, dwHandle, dwLen, lpData)
返回 (result)
.子程序 API_GetFileVersionInfoByHandle, 布尔型, 公开, 根据文件句柄获取文件版本信息
.参数 dwFlags, 整数型
.参数 hFile, 整数型
.参数 lplpData, 整数型指针
.参数 pdwLen, 整数型指针
.局部变量 result, 布尔型
result = DLL调用 (“version.dll”, “GetFileVersionInfoByHandle”, dwFlags, hFile, lplpData, pdwLen)
返回 (result)
.子程序 API_GetFileVersionInfoExA, 布尔型, 公开, 扩展版本的获取文件版本信息
.参数 dwFlags, 整数型
.参数 lpwstrFilename, 文本型
.参数 dwHandle, 整数型
.参数 dwLen, 整数型
.参数 lpData, 整数型
.局部变量 result, 布尔型
result = DLL调用 (“version.dll”, “GetFileVersionInfoExA”, dwFlags, lpwstrFilename, dwHandle, dwLen, lpData)
返回 (result)
.子程序 API_GetFileVersionInfoExW, 布尔型, 公开, 扩展版本的获取文件版本信息(宽字符)
.参数 dwFlags, 整数型
.参数 lpwstrFilename, 文本型
.参数 dwHandle, 整数型
.参数 dwLen, 整数型
.参数 lpData, 整数型
.局部变量 result, 布尔型
result = DLL调用 (“version.dll”, “GetFileVersionInfoExW”, dwFlags, 到Unicode (lpwstrFilename), dwHandle, dwLen, lpData)
返回 (result)
.子程序 API_GetFileVersionInfoSizeA, 整数型, 公开, 获取文件版本信息大小
.参数 lptstrFilename, 文本型
.参数 lpdwHandle, 整数型指针
.局部变量 result, 整数型
result = DLL调用 (“version.dll”, “GetFileVersionInfoSizeA”, lptstrFilename, lpdwHandle)
返回 (result)
.子程序 API_GetFileVersionInfoSizeExA, 整数型, 公开, 扩展版本的获取文件版本信息大小
.参数 dwFlags, 整数型
.参数 lpwstrFilename, 文本型
.参数 lpdwHandle, 整数型指针
.局部变量 result, 整数型
result = DLL调用 (“version.dll”, “GetFileVersionInfoSizeExA”, dwFlags, lpwstrFilename, lpdwHandle)
返回 (result)
.子程序 API_GetFileVersionInfoSizeExW, 整数型, 公开, 扩展版本的获取文件版本信息大小(宽字符)
.参数 dwFlags, 整数型
.参数 lpwstrFilename, 文本型
.参数 lpdwHandle, 整数型指针
.局部变量 result, 整数型
result = DLL调用 (“version.dll”, “GetFileVersionInfoSizeExW”, dwFlags, 到Unicode (lpwstrFilename), lpdwHandle)
返回 (result)
.子程序 API_GetFileVersionInfoSizeW, 整数型, 公开, 获取文件版本信息大小(宽字符)
.参数 lptstrFilename, 文本型
.参数 lpdwHandle, 整数型指针
.局部变量 result, 整数型
result = DLL调用 (“version.dll”, “GetFileVersionInfoSizeW”, 到Unicode (lptstrFilename), lpdwHandle)
返回 (result)
.子程序 API_GetFileVersionInfoW, 布尔型, 公开, 获取文件版本信息(宽字符)
.参数 lptstrFilename, 文本型
.参数 dwHandle, 整数型
.参数 dwLen, 整数型
.参数 lpData, 整数型
.局部变量 result, 布尔型
result = DLL调用 (“version.dll”, “GetFileVersionInfoW”, 到Unicode (lptstrFilename), dwHandle, dwLen, lpData)
返回 (result)
.子程序 API_VerFindFileA, 整数型, 公开, 查找文件版本
.参数 uFlags, 整数型
.参数 szFileName, 文本型
.参数 szWinDir, 文本型
.参数 szAppDir, 文本型
.参数 szCurDir, 文本型 参考
.参数 puCurDirLen, 整数型指针
.参数 szDestDir, 文本型 参考
.参数 puDestDirLen, 整数型指针
.局部变量 result, 整数型
result = DLL调用 (“version.dll”, “VerFindFileA”, uFlags, szFileName, szWinDir, szAppDir, &szCurDir, puCurDirLen, &szDestDir, puDestDirLen)
返回 (result)
.子程序 API_VerFindFileW, 整数型, 公开, 查找文件版本(宽字符)
.参数 uFlags, 整数型
.参数 szFileName, 文本型
.参数 szWinDir, 文本型
.参数 szAppDir, 文本型
.参数 szCurDir, 文本型 参考
.参数 puCurDirLen, 整数型指针
.参数 szDestDir, 文本型 参考
.参数 puDestDirLen, 整数型指针
.局部变量 result, 整数型
result = DLL调用 (“version.dll”, “VerFindFileW”, uFlags, 到Unicode (szFileName), 到Unicode (szWinDir), 到Unicode (szAppDir), &szCurDir, puCurDirLen, &szDestDir, puDestDirLen)
返回 (result)
.子程序 API_VerInstallFileA, 整数型, 公开, 安装文件版本
.参数 uFlags, 整数型
.参数 szSrcFileName, 文本型
.参数 szDestFileName, 文本型
.参数 szSrcDir, 文本型
.参数 szDestDir, 文本型
.参数 szCurDir, 文本型
.参数 szTmpFile, 文本型 参考
.参数 puTmpFileLen, 整数型指针
.局部变量 result, 整数型
result = DLL调用 (“version.dll”, “VerInstallFileA”, uFlags, szSrcFileName, szDestFileName, szSrcDir, szDestDir, szCurDir, &szTmpFile, puTmpFileLen)
返回 (result)
.子程序 API_VerInstallFileW, 整数型, 公开, 安装文件版本(宽字符)
.参数 uFlags, 整数型
.参数 szSrcFileName, 文本型
.参数 szDestFileName, 文本型
.参数 szSrcDir, 文本型
.参数 szDestDir, 文本型
.参数 szCurDir, 文本型
.参数 szTmpFile, 文本型 参考
.参数 puTmpFileLen, 整数型指针
.局部变量 result, 整数型
result = DLL调用 (“version.dll”, “VerInstallFileW”, uFlags, 到Unicode (szSrcFileName), 到Unicode (szDestFileName), 到Unicode (szSrcDir), 到Unicode (szDestDir), 到Unicode (szCurDir), &szTmpFile, puTmpFileLen)
返回 (result)
.子程序 API_VerLanguageNameA, 整数型, 公开, 获取语言名称
.参数 wLang, 整数型
.参数 szLang, 文本型 参考
.参数 cchLang, 整数型
.局部变量 result, 整数型
result = DLL调用 (“version.dll”, “VerLanguageNameA”, wLang, &szLang, cchLang)
返回 (result)
.子程序 API_VerLanguageNameW, 整数型, 公开, 获取语言名称(宽字符)
.参数 wLang, 整数型
.参数 szLang, 文本型 参考
.参数 cchLang, 整数型
.局部变量 result, 整数型
result = DLL调用 (“version.dll”, “VerLanguageNameW”, wLang, &szLang, cchLang)
返回 (result)
.子程序 API_VerQueryValueA, 布尔型, 公开, 查询版本值
.参数 pBlock, 整数型
.参数 lpSubBlock, 文本型
.参数 lplpBuffer, 整数型指针
.参数 puLen, 整数型指针
.局部变量 result, 布尔型
result = DLL调用 (“version.dll”, “VerQueryValueA”, pBlock, lpSubBlock, lplpBuffer, puLen)
返回 (result)
.子程序 API_VerQueryValueW, 布尔型, 公开, 查询版本值(宽字符)
.参数 pBlock, 整数型
.参数 lpSubBlock, 文本型
.参数 lplpBuffer, 整数型指针
.参数 puLen, 整数型指针
.局部变量 result, 布尔型
result = DLL调用 (“version.dll”, “VerQueryValueW”, pBlock, 到Unicode (lpSubBlock), lplpBuffer, puLen)
返回 (result)
|
免费评分
-
查看全部评分
|